buddy-2.4/0000777000076500001440000000000010100060522006216 5buddy-2.4/m4/0000777000076500001440000000000010100060502006534 5buddy-2.4/m4/debug.m40000644000076500001440000000132310074021567010021 AC_DEFUN([buddy_DEBUG_FLAGS], [AC_ARG_ENABLE([swap-count], [AC_HELP_STRING([--enable-swap-count], [Count number of fundamental variable swaps (for debugging)])]) case $enable_swap_count in yes) AC_DEFINE([SWAPCOUNT], 1, [Define to 1 to count number of fundamental variable swaps (for debugging).]) ;; esac AC_ARG_ENABLE([cache-stats], [AC_HELP_STRING([--enable-cache-stats], [Gather statistical information about operator and unique node caching (for debugging)])]) case $enable_cache_stats in yes) AC_DEFINE([CACHESTATS], 1, [Defube to 1 to gather statistical information about operator and unique node caching (for debugging).]) ;; esac ]) buddy-2.4/tools/0000777000076500001440000000000010100060504007356 5buddy-2.4/tools/config.guess0000755000076500001440000012206510100042062011617 #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-06-17' # 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 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 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # 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 -q "$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 ;' # 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 ## for Red Hat Linux if test -f /etc/redhat-release ; then VENDOR=redhat ; else VENDOR= ; fi # 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 ;; *) 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 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; macppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mipseb-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sun3:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # 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 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/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms exit 0 ;; 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 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; 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 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit 0 ;; DRS?6000:UNIX_SV:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7 && exit 0 ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; 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 0 ;; 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 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; 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 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; # 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 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; 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 \ && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && exit 0 echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; 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 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????: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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; 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 0 ;; *: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 $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 echo rs6000-ibm-aix3.2.5 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 0 ;; *: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 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 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 # avoid double evaluation of $set_cc_for_build test -n "$CC_FOR_BUILD" || eval $set_cc_for_build if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 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 && $dummy && exit 0 echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; 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 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; *:UNICOS/mp:*:*) echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; 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 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*|*:GNU/FreeBSD:*:*) # Determine whether the default compiler uses glibc. eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #if __GLIBC__ >= 2 LIBC=gnu #else LIBC= #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; x86:Interix*:[34]*) echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' exit 0 ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit 0 ;; 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 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR:-unknown}-linux-gnu exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; 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 | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; 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 | grep ^CPU=` test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 ;; ppc:Linux:*:*) echo powerpc-${VENDOR:-unknown}-linux-gnu exit 0 ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR:-unknown}-linux-gnu exit 0 ;; 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 0 ;; 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 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR:-ibm}-linux-gnu exit 0 ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-${VENDOR:-unknown}-linux-gnu exit 0 ;; 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 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # 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 0 ;; 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 #ifdef __INTEL_COMPILER LIBC=gnu #else LIBC=gnuaout #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` test x"${LIBC}" != x && echo "${UNAME_MACHINE}-${VENDOR:-pc}-linux-${LIBC}" && exit 0 test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; 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 0 ;; 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 0 ;; 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 0 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit 0 ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; 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 0 ;; i*86:*:5:[78]*) 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 0 ;; 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 0 ;; 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 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; 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 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit 0 ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*: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) 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 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *: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 0 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; 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 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) case `uname -p` in *86) UNAME_PROCESSOR=i686 ;; powerpc) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit 0 ;; *: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 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *: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 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; 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"); 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 && $dummy && exit 0 # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # 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 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; 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: buddy-2.4/tools/config.sub0000755000076500001440000007301510100042062011262 #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. timestamp='2003-06-18' # 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., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, 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 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 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # 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 0;; * ) 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* | freebsd*-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) 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 ;; -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/'` ;; -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] \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k \ | m32r | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | msp430 \ | ns16k | ns32k \ | openrisc | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | s390 | s390x \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | 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) ;; # 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-* \ | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | 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-* \ | m32r-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | msp430-* \ | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | s390-* | s390x-* \ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | 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 ;; 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 ;; 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 ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; 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 ;; 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 ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; 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 ;; nv1) basic_machine=nv1-cray os=-unicosmp ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; or32 | or32-*) basic_machine=or32-unknown os=-coff ;; 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 ;; 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 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; 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 ;; 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 ;; 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 ;; 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 ;; sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sh64) basic_machine=sh64-unknown ;; sparc | sparcv9 | sparcv9b) 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* | -netbsd* | -openbsd* | -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* | -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*) # 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* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -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 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -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 ;; -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 ;; -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 *-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 ;; *-ibm) os=-aix ;; *-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 ;; -ptx*) vendor=sequent ;; -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 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: buddy-2.4/tools/depcomp0000755000076500001440000003541010100042071010651 #! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2004-04-25.13 # Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, 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 Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit 0 ;; -v | --v*) echo "depcomp $scriptversion" exit 0 ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # Dependencies are output in .lo.d with libtool 1.4. # They are output in .o.d with libtool 1.5. tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.o.d" tmpdepfile3="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" tmpdepfile3="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" elif test -f "$tmpdepfile2"; then tmpdepfile="$tmpdepfile2" else tmpdepfile="$tmpdepfile3" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: buddy-2.4/tools/install-sh0000755000076500001440000002244110100042061011277 #!/bin/sh # install - install a program, script, or datafile scriptversion=2004-04-01.17 # 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. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename= transform_arg= instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= usage="Usage: $0 [OPTION]... SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 -d DIRECTORIES... In the first form, install SRCFILE to DSTFILE, removing SRCFILE by default. In the second, create the directory path DIR. Options: -b=TRANSFORMBASENAME -c copy source (using $cpprog) instead of moving (using $mvprog). -d create directories instead of installing files. -g GROUP $chgrp installed files to GROUP. -m MODE $chmod installed files to MODE. -o USER $chown installed files to USER. -s strip installed files (using $stripprog). -t=TRANSFORM --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit 0;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; --version) echo "$0 $scriptversion"; exit 0;; *) # When -d is used, all remaining arguments are directories to create. test -n "$dir_arg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; 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 for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then instcmd=: chmodcmd= else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $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 "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # 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 dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" || lasterr=$? # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test ! -d "$pathcomp" && { (exit ${lasterr-1}); exit; } fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $instcmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else # If we're going to rename the final executable, determine the name now. if test -z "$transformarg"; then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename \ | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename. test -z "$dstfile" && dstfile=`basename "$dst"` # 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 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$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 $instcmd $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 "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: buddy-2.4/tools/ltmain.sh0000644000076500001440000055000510100042027011117 # ltmain.sh - Provide generalized library-building support services. # NOTE: Changing this file will not affect anything until you rerun configure. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 # Free Software Foundation, Inc. # Originally by Gordon Matzigkeit , 1996 # # This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. basename="s,^.*/,,g" # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" # define SED for historic ltconfig's generated by Libtool 1.3 test -z "$SED" && SED=sed # The name of this program: progname=`echo "$progpath" | $SED $basename` modename="$progname" # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 PROGRAM=ltmain.sh PACKAGE=libtool VERSION=1.5.6 TIMESTAMP=" (1.1220.2.95 2004/04/11 05:50:42)" # Check that we have a working $echo. if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then # Yippee, $echo works! : else # Restart under the correct shell, and then maybe $echo will work. exec $SHELL "$progpath" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat <&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE fi # Global variables. mode=$default_mode nonopt= prev= prevopt= run= show="$echo" show_help= execute_dlfiles= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" ##################################### # Shell function definitions: # This seems to be the best place for them # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. func_win32_libid () { win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then win32_nmres=`eval $NM -f posix -A $1 | \ sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` if test "X$win32_nmres" = "Ximport" ; then win32_libid_type="x86 archive import" else win32_libid_type="x86 archive static" fi fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $echo $win32_libid_type } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac CC_quoted="$CC_quoted $arg" done case "$@ " in " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then $echo "$modename: unable to infer tagged configuration" $echo "$modename: specify a tag with \`--tag'" 1>&2 exit $EXIT_FAILURE # else # $echo "$modename: using $tagname tagged configuration" fi ;; esac fi } # End of Shell function definitions ##################################### # Darwin sucks #eval std_shrext=\"$shrext_cmds\" # And fixing for Darwin sucks for everybody else if test -z "$shrext_cmds" && test -n "$shrext"; then eval shrext_cmds=\"$shrext\" fi eval std_shrext=\"$shrext_cmds\" # This value is evaluated to 32768, so place it here as a compatilibity hack # because older libtool.m4 didn't define this variable test -z "$max_cmd_len" && max_cmd_len=32768 # Parse our command line options once, thoroughly. while test "$#" -gt 0 do arg="$1" shift case $arg in -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; *) optarg= ;; esac # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in execute_dlfiles) execute_dlfiles="$execute_dlfiles $arg" ;; tag) tagname="$arg" preserve_args="${preserve_args}=$arg" # Check whether tagname contains only valid characters case $tagname in *[!-_A-Za-z0-9,/]*) $echo "$progname: invalid tag name: $tagname" 1>&2 exit $EXIT_FAILURE ;; esac case $tagname in CC) # Don't test for the "default" C tag, as we know, it's there, but # not specially marked. ;; *) if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then taglist="$taglist $tagname" # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`" else $echo "$progname: ignoring unknown tag $tagname" 1>&2 fi ;; esac ;; *) eval "$prev=\$arg" ;; esac prev= prevopt= continue fi # Have we seen a non-optional argument yet? case $arg in --help) show_help=yes ;; --version) $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" $echo $echo "Copyright (C) 2003 Free Software Foundation, Inc." $echo "This is free software; see the source for copying conditions. There is NO" $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." exit $EXIT_SUCCESS ;; --config) ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath # Now print the configurations for the tags. for tagname in $taglist; do ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath" done exit $EXIT_SUCCESS ;; --debug) $echo "$progname: enabling shell trace mode" set -x preserve_args="$preserve_args $arg" ;; --dry-run | -n) run=: ;; --features) $echo "host: $host" if test "$build_libtool_libs" = yes; then $echo "enable shared libraries" else $echo "disable shared libraries" fi if test "$build_old_libs" = yes; then $echo "enable static libraries" else $echo "disable static libraries" fi exit $EXIT_SUCCESS ;; --finish) mode="finish" ;; --mode) prevopt="--mode" prev=mode ;; --mode=*) mode="$optarg" ;; --preserve-dup-deps) duplicate_deps="yes" ;; --quiet | --silent) show=: preserve_args="$preserve_args $arg" ;; --tag) prevopt="--tag" prev=tag ;; --tag=*) set tag "$optarg" ${1+"$@"} shift prev=tag preserve_args="$preserve_args --tag" ;; -dlopen) prevopt="-dlopen" prev=execute_dlfiles ;; -*) $echo "$modename: unrecognized option \`$arg'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *) nonopt="$arg" break ;; esac done if test -n "$prevopt"; then $echo "$modename: option \`$prevopt' requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= if test -z "$show_help"; then # Infer the operation mode. if test -z "$mode"; then $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 case $nonopt in *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) mode=link for arg do case $arg in -c) mode=compile break ;; esac done ;; *db | *dbx | *strace | *truss) mode=execute ;; *install*|cp|mv) mode=install ;; *rm) mode=uninstall ;; *) # If we have no mode, but dlfiles were specified, then do execute mode. test -n "$execute_dlfiles" && mode=execute # Just use the default operation mode. if test -z "$mode"; then if test -n "$nonopt"; then $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 else $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 fi fi ;; esac fi # Only execute mode is allowed to have -dlopen flags. if test -n "$execute_dlfiles" && test "$mode" != execute; then $echo "$modename: unrecognized option \`-dlopen'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$modename --help --mode=$mode' for more information." # These modes are in order of execution frequency so that they run quickly. case $mode in # libtool compile mode compile) modename="$modename: compile" # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= for arg do case "$arg_mode" in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) if test -n "$libobj" ; then $echo "$modename: you cannot specify \`-o' more than once" 1>&2 exit $EXIT_FAILURE fi arg_mode=target continue ;; -static | -prefer-pic | -prefer-non-pic) later="$later $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac lastarg="$lastarg $arg" done IFS="$save_ifs" lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` # Add the arguments to base_compile. base_compile="$base_compile $lastarg" continue ;; * ) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` case $lastarg in # Double-quote args containing other shell metacharacters. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") lastarg="\"$lastarg\"" ;; esac base_compile="$base_compile $lastarg" done # for arg case $arg_mode in arg) $echo "$modename: you must specify an argument for -Xcompile" exit $EXIT_FAILURE ;; target) $echo "$modename: you must specify a target with \`-o'" 1>&2 exit $EXIT_FAILURE ;; *) # Get the name of the library object. [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo xform='[cCFSifmso]' case $libobj in *.ada) xform=ada ;; *.adb) xform=adb ;; *.ads) xform=ads ;; *.asm) xform=asm ;; *.c++) xform=c++ ;; *.cc) xform=cc ;; *.ii) xform=ii ;; *.class) xform=class ;; *.cpp) xform=cpp ;; *.cxx) xform=cxx ;; *.f90) xform=f90 ;; *.for) xform=for ;; *.java) xform=java ;; esac libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` case $libobj in *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; *) $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 exit $EXIT_FAILURE ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -static) build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$obj"; then xdir= else xdir=$xdir/ fi lobj=${xdir}$objdir/$objname if test -z "$base_compile"; then $echo "$modename: you must specify a compilation command" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi $run $rm $removelist trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" removelist="$removelist $output_obj $lockfile" trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15 else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $run ln "$progpath" "$lockfile" 2>/dev/null; do $show "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $echo "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi $echo $srcfile > "$lockfile" fi if test -n "$fix_srcfile_path"; then eval srcfile=\"$fix_srcfile_path\" fi $run $rm "$libobj" "${libobj}T" # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. test -z "$run" && cat > ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then $show "$mv $output_obj $lobj" if $run $mv $output_obj $lobj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the PIC object to the libtool object file. test -z "$run" && cat >> ${libobj}T <> ${libobj}T </dev/null`" != "X$srcfile"; then $echo "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $run $rm $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then $show "$mv $output_obj $obj" if $run $mv $output_obj $obj; then : else error=$? $run $rm $removelist exit $error fi fi # Append the name of the non-PIC object the libtool object file. # Only append if the libtool object file exists. test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi else if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi fi build_libtool_libs=no build_old_libs=yes prefer_static_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test ;; *) qarg=$arg ;; esac libtool_args="$libtool_args $qarg" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) compile_command="$compile_command @OUTPUT@" finalize_command="$finalize_command @OUTPUT@" ;; esac case $prev in dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. compile_command="$compile_command @SYMFILE@" finalize_command="$finalize_command @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then dlfiles="$dlfiles $arg" else dlprefiles="$dlprefiles $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" if test ! -f "$arg"; then $echo "$modename: symbol file \`$arg' does not exist" exit $EXIT_FAILURE fi prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat $save_arg` do # moreargs="$moreargs $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi done else $echo "$modename: link input file \`$save_arg' does not exist" exit $EXIT_FAILURE fi arg=$save_arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) rpath="$rpath $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) xrpath="$xrpath $arg" ;; esac fi prev= continue ;; xcompiler) compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; xlinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $wl$qarg" prev= compile_command="$compile_command $wl$qarg" finalize_command="$finalize_command $wl$qarg" continue ;; xcclinker) linker_flags="$linker_flags $qarg" compiler_flags="$compiler_flags $qarg" prev= compile_command="$compile_command $qarg" finalize_command="$finalize_command $qarg" continue ;; shrext) shrext_cmds="$arg" prev= continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then compile_command="$compile_command $link_static_flag" finalize_command="$finalize_command $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 continue ;; -avoid-version) avoid_version=yes continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: more than one -exported-symbols argument is not allowed" exit $EXIT_FAILURE fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" ;; esac continue ;; -L*) dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 exit $EXIT_FAILURE fi dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "*) ;; *) deplibs="$deplibs -L$dir" lib_search_path="$lib_search_path $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$dir:"*) ;; *) dllsearchpath="$dllsearchpath:$dir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-pw32* | *-*-beos*) # These systems don't actually have a C or math library (as such) continue ;; *-*-mingw* | *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework deplibs="$deplibs -framework System" continue esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi deplibs="$deplibs $arg" continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) deplibs="$deplibs $arg" continue ;; -module) module=yes continue ;; # gcc -m* arguments should be passed to the linker via $compiler_flags # in order to pass architecture information to the linker # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo # but this is not reliable with gcc because gcc may use -mfoo to # select a different linker, different libraries, etc, while # -Wl,-mfoo simply passes -mfoo to the linker. -m*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" if test "$with_gcc" = "yes" ; then compiler_flags="$compiler_flags $arg" fi continue ;; -shrext) prev=shrext continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) # The PATH hackery in wrapper scripts is required on Windows # in order for the loader to find any dlls it needs. $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) $echo "$modename: only absolute run-paths are allowed" 1>&2 exit $EXIT_FAILURE ;; esac case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac continue ;; -static) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -Wc,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Wl,*) args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" case $flag in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") flag="\"$flag\"" ;; esac arg="$arg $wl$flag" compiler_flags="$compiler_flags $wl$flag" linker_flags="$linker_flags $flag" done IFS="$save_ifs" arg=`$echo "X$arg" | $Xsed -e "s/^ //"` ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # Some other compiler flag. -* | +*) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; *.$objext) # A standard object. objs="$objs $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then pic_object= non_pic_object= # Read the .lo file # If there is no directory component, then add one. case $arg in */* | *\\*) . $arg ;; *) . ./$arg ;; esac if test -z "$pic_object" || \ test -z "$non_pic_object" || test "$pic_object" = none && \ test "$non_pic_object" = none; then $echo "$modename: cannot find name of object for \`$arg'" 1>&2 exit $EXIT_FAILURE fi # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then dlfiles="$dlfiles $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. dlprefiles="$dlprefiles $pic_object" prev= fi # A PIC object. libobjs="$libobjs $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object non_pic_objects="$non_pic_objects $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi fi else # Only an error if not doing a dry-run. if test -z "$run"; then $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 exit $EXIT_FAILURE else # Dry-run case. # Extract subdirectory from the argument. xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` if test "X$xdir" = "X$arg"; then xdir= else xdir="$xdir/" fi pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` libobjs="$libobjs $pic_object" non_pic_objects="$non_pic_objects $non_pic_object" fi fi ;; *.$libext) # An archive. deplibs="$deplibs $arg" old_deplibs="$old_deplibs $arg" continue ;; *.la) # A libtool-controlled library. if test "$prev" = dlfiles; then # This library was specified with -dlopen. dlfiles="$dlfiles $arg" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. dlprefiles="$dlprefiles $arg" prev= else deplibs="$deplibs $arg" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") arg="\"$arg\"" ;; esac ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi done # argument parsing loop if test -n "$prev"; then $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" compile_command="$compile_command $arg" finalize_command="$finalize_command $arg" fi oldlibs= # calculate the name of the file, without its directory outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` if test "X$output_objdir" = "X$output"; then output_objdir="$objdir" else output_objdir="$output_objdir/$objdir" fi # Create the object directory. if test ! -d "$output_objdir"; then $show "$mkdir $output_objdir" $run $mkdir $output_objdir status=$? if test "$status" -ne 0 && test ! -d "$output_objdir"; then exit $status fi fi # Determine the type of output case $output in "") $echo "$modename: you must specify an output file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac case $host in *cygwin* | *mingw* | *pw32*) # don't eliminate duplications in $postdeps and $predeps duplicate_compiler_generated_deps=yes ;; *) duplicate_compiler_generated_deps=$duplicate_deps ;; esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if test "X$duplicate_deps" = "Xyes" ; then case "$libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi libs="$libs $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; esac pre_post_deps="$pre_post_deps $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 exit $EXIT_FAILURE ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 continue fi if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then library_names= old_library= case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` ;; *) $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) xrpath="$xrpath $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) lib="$deplib" ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) if test "$deplibs_check_method" != pass_all; then $echo $echo "*** Warning: Trying to link with static lib archive $deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because the file extensions .$libext of this argument makes me believe" $echo "*** that it is just a static archive that I should not used here." else $echo $echo "*** Warning: Linking the shared library $output against the" $echo "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. newdlprefiles="$newdlprefiles $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else newdlfiles="$newdlfiles $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else $echo "$modename: cannot find the library \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Check to see that this really is a libtool archive. if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` test "X$ladir" = "X$lib" && ladir="." dlname= dlopen= dlpreopen= libdir= library_names= old_library= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no # Read the .la file case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && dlfiles="$dlfiles $dlopen" test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # It is a libtool convenience library, so add in its objects. convenience="$convenience $ladir/$objdir/$old_library" old_convenience="$old_convenience $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done elif test "$linkmode" != prog && test "$linkmode" != lib; then $echo "$modename: \`$lib' is not a convenience library" 1>&2 exit $EXIT_FAILURE fi continue fi # $pass = conv # Get the name of the library we link against. linklib= for l in $old_library $library_names; do linklib="$l" done if test -z "$linklib"; then $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 exit $EXIT_FAILURE fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. dlprefiles="$dlprefiles $lib $dependency_libs" else newdlfiles="$newdlfiles $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 abs_ladir="$ladir" fi ;; esac laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then $echo "$modename: warning: library \`$lib' was moved." 1>&2 dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$libdir" absdir="$libdir" fi else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later notinst_path="$notinst_path $abs_ladir" fi # $installed = yes name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir"; then $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 exit $EXIT_FAILURE fi # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then newdlprefiles="$newdlprefiles $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then newdlprefiles="$newdlprefiles $dir/$dlname" else newdlprefiles="$newdlprefiles $dir/$linklib" fi fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then newlib_search_path="$newlib_search_path $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var"; then # Make sure the rpath contains only unique directories. case "$temp_rpath " in *" $dir "*) ;; *" $absdir "*) ;; *) temp_rpath="$temp_rpath $dir" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically if test -n "$library_names" && { test "$prefer_static_libs" = no || test -z "$old_library"; }; then if test "$installed" = no; then notinst_deplibs="$notinst_deplibs $lib" need_relink=yes fi # This is a shared library # Warn about portability, can't link against -module's on # some systems (darwin) if test "$shouldnotlink" = yes && test "$pass" = link ; then $echo if test "$linkmode" = prog; then $echo "*** Warning: Linking the executable $output against the loadable module" else $echo "*** Warning: Linking the shared library $output against the loadable module" fi $echo "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) compile_rpath="$compile_rpath $absdir" esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names realname="$2" shift; shift libname=`eval \\$echo \"$libname_spec\"` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw*) major=`expr $current - $age` versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" soname=`$echo $soroot | ${SED} -e 's/^.*\///'` newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else $show "extracting exported symbol list from \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$extract_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else $show "generating import library for \`$soname'" save_ifs="$IFS"; IFS='~' cmds=$old_archive_from_expsyms_cmds for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5* ) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a module then we can not link against # it, someone is ignoring the new warnings I added if /usr/bin/file -L $add 2> /dev/null | $EGREP "bundle" >/dev/null ; then $echo "** Warning, lib $linklib is a module, not a shared library" if test -z "$old_library" ; then $echo $echo "** And there doesn't seem to be a static archive available" $echo "** The link will probably fail, sorry" else add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$dir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then $echo "$modename: configuration error: unsupported hardcode properties" exit $EXIT_FAILURE fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && \ test "$hardcode_minus_L" != yes && \ test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case "$libdir" in [\\/]*) add_dir="$add_dir -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. $echo $echo "*** Warning: This system can not link to static lib archive $lib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then $echo "*** But as you try to build a module library, libtool will still create " $echo "*** a static module, that should work as long as the dlopening application" $echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else convenience="$convenience $dir/$old_library" old_convenience="$old_convenience $dir/$old_library" deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` case " $xrpath " in *" $temp_xrpath "*) ;; *) xrpath="$xrpath $temp_xrpath";; esac;; *) temp_deplibs="$temp_deplibs $libdir";; esac done dependency_libs="$temp_deplibs" fi newlib_search_path="$newlib_search_path $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" if test "X$duplicate_deps" = "Xyes" ; then case "$tmp_libs " in *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; esac fi tmp_libs="$tmp_libs $deplib" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do case $deplib in -L*) path="$deplib" ;; *.la) dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$deplib" && dir="." # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 absdir="$dir" fi ;; esac if grep "^installed=no" $deplib > /dev/null; then path="$absdir/$objdir" else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi if test "$absdir" != "$libdir"; then $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 fi path="$absdir" fi depdepl= case $host in *-*-darwin*) # we do not want to link against static libs, # but need to link against shared eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$path/$depdepl" ; then depdepl="$path/$depdepl" fi # do not add paths which are already there case " $newlib_search_path " in *" $path "*) ;; *) newlib_search_path="$newlib_search_path $path";; esac fi path="" ;; *) path="-L$path" ;; esac ;; -l*) case $host in *-*-darwin*) # Again, we only want to link against shared libraries eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` for tmp in $newlib_search_path ; do if test -f "$tmp/lib$tmp_libs.dylib" ; then eval depdepl="$tmp/lib$tmp_libs.dylib" break fi done path="" ;; *) continue ;; esac ;; *) continue ;; esac case " $deplibs " in *" $depdepl "*) ;; *) deplibs="$depdepl $deplibs" ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$deplibs $path" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) lib_search_path="$lib_search_path $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) tmp_libs="$tmp_libs $deplib" ;; esac ;; *) tmp_libs="$tmp_libs $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then tmp_libs="$tmp_libs $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 fi if test -n "$export_symbols" || test -n "$export_symbols_regex"; then $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 fi # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" objs="$objs$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) if test "$module" = no; then $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 exit $EXIT_FAILURE else $echo $echo "*** Warning: Linking the shared library $output against the non-libtool" $echo "*** objects $objs is not portable!" libobjs="$libobjs $objs" fi fi if test "$dlself" != no; then $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 fi set dummy $rpath if test "$#" -gt 2; then $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 fi install_libdir="$2" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 fi else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 IFS="$save_ifs" if test -n "$8"; then $echo "$modename: too many parameters to \`-version-info'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$2" number_minor="$3" number_revision="$4" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in darwin|linux|osf|windows) current=`expr $number_major + $number_minor` age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) current=`expr $number_major + $number_minor - 1` age="$number_minor" revision="$number_minor" ;; esac ;; no) current="$2" revision="$3" age="$4" ;; esac # Check that each of the things are valid numbers. case $current in [0-9]*) ;; *) $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $revision in [0-9]*) ;; *) $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac case $age in [0-9]*) ;; *) $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE ;; esac if test "$age" -gt "$current"; then $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 $echo "$modename: \`$vinfo' is not valid version information" 1>&2 exit $EXIT_FAILURE fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header major=.`expr $current - $age` versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... minor_current=`expr $current + 1` verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current"; ;; irix | nonstopux) major=`expr $current - $age + 1` case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do iface=`expr $revision - $loop` loop=`expr $loop - 1` verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) major=.`expr $current - $age` versuffix="$major.$age.$revision" ;; osf) major=.`expr $current - $age` versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do iface=`expr $current - $loop` loop=`expr $loop - 1` verstring="$verstring:${iface}.0" done # Make executables depend on our current version. verstring="$verstring:${current}.0" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. major=`expr $current - $age` versuffix="-$major" ;; *) $echo "$modename: unknown library version type \`$version_type'" 1>&2 $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 exit $EXIT_FAILURE ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi if test "$mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$echo "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi removelist="$removelist $p" ;; *) ;; esac done if test -n "$removelist"; then $show "${rm}r $removelist" $run ${rm}r $removelist fi fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then oldlibs="$oldlibs $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` fi # Eliminate all temporary directories. for path in $notinst_path; do lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` dependency_libs=`$echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do temp_xrpath="$temp_xrpath -R$libdir" case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) dlfiles="$dlfiles $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) dlprefiles="$dlprefiles $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework deplibs="$deplibs -framework System" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then deplibs="$deplibs -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $rm conftest.c cat > conftest.c </dev/null` for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null \ | grep " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$file_magic_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for file magic test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a file magic. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` for a_deplib in $deplibs; do name="`expr $a_deplib : '-l\(.*\)'`" # If $name is empty we are operating on a -L argument. if test -n "$name" && test "$name" != "0"; then if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) newdeplibs="$newdeplibs $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval \\$echo \"$libname_spec\"` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval $echo \"$potent_lib\" 2>/dev/null \ | ${SED} 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then newdeplibs="$newdeplibs $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes $echo $echo "*** Warning: linker path does not have real file for library $a_deplib." $echo "*** I have the capability to make that library automatically link in when" $echo "*** you link to this library. But I can only do this if you have a" $echo "*** shared version of the library, which you do not appear to have" $echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $echo "*** with $libname but no candidates were found. (...for regex pattern test)" else $echo "*** with $libname and none of the candidates passed a file format test" $echo "*** using a regex pattern. Last file checked: $potlib" fi fi else # Add a -L argument. newdeplibs="$newdeplibs $a_deplib" fi done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ -e 's/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` done fi if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ | grep . >/dev/null; then $echo if test "X$deplibs_check_method" = "Xnone"; then $echo "*** Warning: inter-library dependencies are not supported in this platform." else $echo "*** Warning: inter-library dependencies are not known to be supported." fi $echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes fi ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then $echo $echo "*** Warning: libtool could not satisfy all declared inter-library" $echo "*** dependencies of module $libname. Therefore, libtool will create" $echo "*** a static module, that should work as long as the dlopening" $echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then $echo $echo "*** However, this would only work if libtool was able to extract symbol" $echo "*** lists from a program, using \`nm' or equivalent, but libtool could" $echo "*** not find such a program. So, this module is probably useless." $echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else $echo "*** The inter-library dependencies that have been dropped here will be" $echo "*** automatically added whenever a program is linked with this library" $echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then $echo $echo "*** Since this library must not contain undefined symbols," $echo "*** because either the platform does not support them or" $echo "*** it was explicitly requested with -no-undefined," $echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" dep_rpath="$dep_rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" if test -n "$hardcode_libdir_flag_spec_ld"; then eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" else eval dep_rpath=\"$hardcode_libdir_flag_spec\" fi fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names realname="$2" shift; shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" for link do linknames="$linknames $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" if len=`expr "X$cmd" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then $show "$cmd" $run eval "$cmd" || exit $? skipped_export=false else # The command line is too long to execute in one step. $show "using reloadable object file for export list..." skipped_export=: fi done IFS="$save_ifs" if test -n "$export_symbols_regex"; then $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' $show "$mv \"${export_symbols}T\" \"$export_symbols\"" $run eval '$mv "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' fi tmp_deplibs= inst_prefix_arg= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) if test -n "$inst_prefix_dir" && (echo "$test_deplib" | grep -- "$inst_prefix_dir" >/dev/null); then inst_prefix_arg="$test_deplib" else tmp_deplibs="$tmp_deplibs $test_deplib" fi ;; esac done deplibs="$tmp_deplibs" if test -n "$inst_prefix_arg"; then deplibs="$inst_prefix_arg $deplibs" fi if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" else gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" linker_flags="$linker_flags $flag" fi # Make a backup of the uninstalled library when relinking if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise. $echo "creating reloadable object files..." # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= delfiles= last_robj= k=1 output=$output_objdir/$save_output-${k}.$objext # Loop over the list of objects to be linked. for obj in $save_libobjs do eval test_cmds=\"$reload_cmds $objlist $last_robj\" if test "X$objlist" = X || { len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; }; then objlist="$objlist $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. eval concat_cmds=\"$reload_cmds $objlist $last_robj\" else # All subsequent reloadable object files will link in # the last one created. eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" fi last_robj=$output_objdir/$save_output-${k}.$objext k=`expr $k + 1` output=$output_objdir/$save_output-${k}.$objext objlist=$obj len=1 fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" if ${skipped_export-false}; then $show "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $run $rm $export_symbols libobjs=$output # Append the command to create the export file. eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" fi # Set up a command to remove the reloadale object files # after they are used. i=0 while test "$i" -lt "$k" do i=`expr $i + 1` delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" done $echo "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi # Append the command to remove the reloadable object files # to the just-reset $cmds. eval cmds=\"\$cmds~\$rm $delfiles\" fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$mode" = relink; then $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$deplibs"; then $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 fi if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 fi if test -n "$rpath"; then $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 fi if test -n "$xrpath"; then $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 fi if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 fi case $output in *.lo) if test -n "$objs$old_deplibs"; then $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 exit $EXIT_FAILURE fi libobj="$output" obj=`$echo "X$output" | $Xsed -e "$lo2o"` ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $run $rm $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" else gentop="$output_objdir/${obj}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" for xlib in $convenience; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` done fi fi # Create the old-style object. reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $run eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" cmds=$reload_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi if test -n "$gentop"; then $show "${rm}r $gentop" $run ${rm}r $gentop fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; esac if test -n "$vinfo"; then $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 fi if test -n "$release"; then $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 fi if test "$preload" = yes; then if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && test "$dlopen_self_static" = unknown; then $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." fi fi case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` ;; esac case $host in *darwin*) # Don't allow lazy linking, it breaks C++ global constructors if test "$tagname" = CXX ; then compile_command="$compile_command ${wl}-bind_at_load" finalize_command="$finalize_command ${wl}-bind_at_load" fi ;; esac compile_command="$compile_command $compile_deplibs" finalize_command="$finalize_command $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) finalize_rpath="$finalize_rpath $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) perm_rpath="$perm_rpath $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) case :$dllsearchpath: in *":$libdir:"*) ;; *) dllsearchpath="$dllsearchpath:$libdir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" rpath="$rpath $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` fi dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then dlsyms="${outputname}S.c" else $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 fi fi if test -n "$dlsyms"; then case $dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${outputname}.nm" $show "$rm $nlist ${nlist}S ${nlist}T" $run $rm "$nlist" "${nlist}S" "${nlist}T" # Parse the name list into a source file. $show "creating $output_objdir/$dlsyms" test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ #ifdef __cplusplus extern \"C\" { #endif /* Prevent the only kind of declaration conflicts we can make. */ #define lt_preloaded_symbols some_other_symbol /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then $show "generating symbol list for \`$output'" test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` for arg in $progfiles; do $show "extracting global C symbols from \`$arg'" $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi if test -n "$export_symbols_regex"; then $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' $run eval '$mv "$nlist"T "$nlist"' fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$output.exp" $run $rm $export_symbols $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' else $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' $run eval 'mv "$nlist"T "$nlist"' fi fi for arg in $dlprefiles; do $show "extracting global C symbols from \`$arg'" name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` $run eval '$echo ": $name " >> "$nlist"' $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" done if test -z "$run"; then # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $mv "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if grep -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else grep -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' else $echo '/* NONE */' >> "$output_objdir/$dlsyms" fi $echo >> "$output_objdir/$dlsyms" "\ #undef lt_preloaded_symbols #if defined (__STDC__) && __STDC__ # define lt_ptr void * #else # define lt_ptr char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr address; } lt_preloaded_symbols[] = {\ " eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" $echo >> "$output_objdir/$dlsyms" "\ {0, (lt_ptr) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " fi pic_flag_for_symtable= case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; esac;; *-*-hpux*) case "$compile_command " in *" -static "*) ;; *) pic_flag_for_symtable=" $pic_flag";; esac esac # Now compile the dynamic symbol file. $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? # Clean up the generated files. $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" # Transform the symbol file into the correct name. compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` ;; *) $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 exit $EXIT_FAILURE ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` fi if test "$need_relink" = no || test "$build_libtool_libs" != yes; then # Replace the output file specification. compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. $show "$link_command" $run eval "$link_command" status=$? # Delete the generated files. if test -n "$dlsyms"; then $show "$rm $output_objdir/${outputname}S.${objext}" $run $rm "$output_objdir/${outputname}S.${objext}" fi exit $status fi if test -n "$shlibpath_var"; then # We should set the shlibpath_var rpath= for dir in $temp_rpath; do case $dir in [\\/]* | [A-Za-z]:[\\/]*) # Absolute path. rpath="$rpath$dir:" ;; *) # Relative path: add a thisdir entry. rpath="$rpath\$thisdir/$dir:" ;; esac done temp_rpath="$rpath" fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do rpath="$rpath$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do rpath="$rpath$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $run $rm $output # Link the executable and exit $show "$link_command" $run eval "$link_command" || exit $? exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 $echo "$modename: \`$output' will be relinked during installation" 1>&2 else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname $show "$link_command" $run eval "$link_command" || exit $? # Now create the wrapper script. $show "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` fi # Quote $echo for shipping. if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then case $progpath in [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";; *) qecho="$SHELL `pwd`/$progpath --fallback-echo";; esac qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` else qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` fi # Only actually do things if our run command is non-null. if test -z "$run"; then # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) cwrappersource=`$echo ${objdir}/lt-${output}.c` cwrapper=`$echo ${output}.exe` $rm $cwrappersource $cwrapper trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 cat > $cwrappersource <> $cwrappersource<<"EOF" #include #include #include #include #include #include #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef DIR_SEPARATOR #define DIR_SEPARATOR '/' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) #define HAVE_DOS_BASED_FILE_SYSTEM #ifndef DIR_SEPARATOR_2 #define DIR_SEPARATOR_2 '\\' #endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) const char *program_name = NULL; void * xmalloc (size_t num); char * xstrdup (const char *string); char * basename (const char *name); char * fnqualify(const char *path); char * strendzap(char *str, const char *pat); void lt_fatal (const char *message, ...); int main (int argc, char *argv[]) { char **newargz; int i; program_name = (char *) xstrdup ((char *) basename (argv[0])); newargz = XMALLOC(char *, argc+2); EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" newargz[1] = fnqualify(argv[0]); /* we know the script has the same name, without the .exe */ /* so make sure newargz[1] doesn't end in .exe */ strendzap(newargz[1],".exe"); for (i = 1; i < argc; i++) newargz[i+1] = xstrdup(argv[i]); newargz[argc+1] = NULL; EOF cat >> $cwrappersource <> $cwrappersource <<"EOF" } void * xmalloc (size_t num) { void * p = (void *) malloc (num); if (!p) lt_fatal ("Memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL ; } char * basename (const char *name) { const char *base; #if defined (HAVE_DOS_BASED_FILE_SYSTEM) /* Skip over the disk name in MSDOS pathnames. */ if (isalpha (name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return (char *) base; } char * fnqualify(const char *path) { size_t size; char *p; char tmp[LT_PATHMAX + 1]; assert(path != NULL); /* Is it qualified already? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha (path[0]) && path[1] == ':') return xstrdup (path); #endif if (IS_DIR_SEPARATOR (path[0])) return xstrdup (path); /* prepend the current directory */ /* doesn't handle '~' */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal ("getcwd failed"); size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ p = XMALLOC(char, size); sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); return p; } char * strendzap(char *str, const char *pat) { size_t len, patlen; assert(str != NULL); assert(pat != NULL); len = strlen(str); patlen = strlen(pat); if (patlen <= len) { str += len - patlen; if (strcmp(str, pat) == 0) *str = '\0'; } return str; } static void lt_error_core (int exit_status, const char * mode, const char * message, va_list ap) { fprintf (stderr, "%s: %s: ", program_name, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, "FATAL", message, ap); va_end (ap); } EOF # we should really use a build-platform specific compiler # here, but OTOH, the wrappers (shell script and this C one) # are only useful if you want to execute the "real" binary. # Since the "real" binary is built for $host, then this # wrapper might as well be built for $host, too. $run $LTCC -s -o $cwrapper $cwrappersource ;; esac $rm $output trap "$rm $output; exit $EXIT_FAILURE" 1 2 15 $echo > $output "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='${SED} -e 1s/^X//' sed_quote_subst='$sed_quote_subst' # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variable: notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$echo are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then echo=\"$qecho\" file=\"\$0\" # Make sure echo works. if test \"X\$1\" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then # Yippee, \$echo works! : else # Restart under the correct shell, and then maybe \$echo will work. exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} fi fi\ " $echo >> $output "\ # Find the directory that this script lives in. thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` done # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $echo >> $output "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || \\ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $mkdir \"\$progdir\" else $rm \"\$progdir/\$file\" fi" $echo >> $output "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $echo \"\$relink_command_output\" >&2 $rm \"\$progdir/\$file\" exit $EXIT_FAILURE fi fi $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $rm \"\$progdir/\$program\"; $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } $rm \"\$progdir/\$file\" fi" else $echo >> $output "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $echo >> $output "\ if test -f \"\$progdir/\$program\"; then" # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $echo >> $output "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` export $shlibpath_var " fi # fixup the dll searchpath if we need to. if test -n "$dllsearchpath"; then $echo >> $output "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi $echo >> $output "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2*) $echo >> $output "\ exec \$progdir\\\\\$program \${1+\"\$@\"} " ;; *) $echo >> $output "\ exec \$progdir/\$program \${1+\"\$@\"} " ;; esac $echo >> $output "\ \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" exit $EXIT_FAILURE fi else # The program doesn't exist. \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 \$echo \"This script is just a wrapper for \$program.\" 1>&2 $echo \"See the $PACKAGE documentation for more information.\" 1>&2 exit $EXIT_FAILURE fi fi\ " chmod +x $output fi exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" $show "${rm}r $gentop" $run ${rm}r "$gentop" $show "$mkdir $gentop" $run $mkdir "$gentop" status=$? if test "$status" -ne 0 && test ! -d "$gentop"; then exit $status fi generated="$generated $gentop" # Add in members from convenience archives. for xlib in $addlibs; do # Extract the objects. case $xlib in [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; *) xabs=`pwd`"/$xlib" ;; esac xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` xdir="$gentop/$xlib" $show "${rm}r $xdir" $run ${rm}r "$xdir" $show "$mkdir $xdir" $run $mkdir "$xdir" status=$? if test "$status" -ne 0 && test ! -d "$xdir"; then exit $status fi # We will extract separately just the conflicting names and we will no # longer touch any unique names. It is faster to leave these extract # automatically by $AR in one run. $show "(cd $xdir && $AR x $xabs)" $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 $AR t "$xabs" | sort | uniq -cd | while read -r count name do i=1 while test "$i" -le "$count" do # Put our $i before any first dot (extension) # Never overwrite any file name_to="$name" while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" do name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` done $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? i=`expr $i + 1` done done fi oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` done fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else eval cmds=\"$old_archive_cmds\" if len=`expr "X$cmds" : ".*"` && test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts $echo "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs # GNU ar 2.10+ was changed to match POSIX; thus no paths are # encoded into archives. This makes 'ar r' malfunction in # this piecewise linking case whenever conflicting object # names appear in distinct ar calls; check, warn and compensate. if (for obj in $save_oldobjs do $echo "X$obj" | $Xsed -e 's%^.*/%%' done | sort | sort -uc >/dev/null 2>&1); then : else $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 AR_FLAGS=cq fi # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done for obj in $save_oldobjs do oldobjs="$objlist $obj" objlist="$objlist $obj" eval test_cmds=\"$old_archive_cmds\" if len=`expr "X$test_cmds" : ".*"` && test "$len" -le "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do eval cmd=\"$cmd\" IFS="$save_ifs" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$generated"; then $show "${rm}r$generated" $run ${rm}r$generated fi # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" $show "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` relink_command="$var=\"$var_value\"; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. if test -z "$run"; then for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` if test -z "$libdir"; then $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdependency_libs="$newdependency_libs $libdir/$name" ;; *) newdependency_libs="$newdependency_libs $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlfiles="$newdlfiles $libdir/$name" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` if test -z "$libdir"; then $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 exit $EXIT_FAILURE fi newdlprefiles="$newdlprefiles $libdir/$name" done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlfiles="$newdlfiles $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac newdlprefiles="$newdlprefiles $abs" done dlprefiles="$newdlprefiles" fi $rm $output # place dlname in correct position for cygwin tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; esac $echo > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $echo >> $output "\ relink_command=\"$relink_command\"" fi done fi # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? ;; esac exit $EXIT_SUCCESS ;; # libtool install mode install) modename="$modename: install" # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then # Aesthetically quote it. arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$arg " arg="$1" shift else install_prog= arg="$nonopt" fi # The real first argument should be the name of the installation program. # Aesthetically quote it. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog$arg" # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= for arg do if test -n "$dest"; then files="$files $dest" dest="$arg" continue fi case $arg in -d) isdir=yes ;; -f) prev="-f" ;; -g) prev="-g" ;; -m) prev="-m" ;; -o) prev="-o" ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then prev= else dest="$arg" continue fi ;; esac # Aesthetically quote the argument. arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` case $arg in *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) arg="\"$arg\"" ;; esac install_prog="$install_prog $arg" done if test -z "$install_prog"; then $echo "$modename: you must specify an install program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -n "$prev"; then $echo "$modename: the \`$prev' option requires an argument" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi if test -z "$files"; then if test -z "$dest"; then $echo "$modename: no file or destination specified" 1>&2 else $echo "$modename: you must specify a destination" 1>&2 fi $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Strip any trailing slash from the destination. dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` test "X$destdir" = "X$dest" && destdir=. destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` # Not a directory, so check to see that there is only one file specified. set dummy $files if test "$#" -gt 2; then $echo "$modename: \`$dest' is not a directory" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. staticlibs="$staticlibs $file" ;; *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi library_names= old_library= relink_command= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) current_libdirs="$current_libdirs $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) future_libdirs="$future_libdirs $libdir" ;; esac fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ test "X$dir" = "X$file/" && dir= dir="$dir$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. if test "$inst_prefix_dir" = "$destdir"; then $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 exit $EXIT_FAILURE fi if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi $echo "$modename: warning: relinking \`$file'" 1>&2 $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 exit $EXIT_FAILURE fi fi # See the names of the shared library. set dummy $library_names if test -n "$2"; then realname="$2" shift shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. $show "$install_prog $dir/$srcname $destdir/$realname" $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? if test -n "$stripme" && test -n "$striplib"; then $show "$striplib $destdir/$realname" $run eval "$striplib $destdir/$realname" || exit $? fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. for linkname do if test "$linkname" != "$realname"; then $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" fi done fi # Do each command in the postinstall commands. lib="$destdir/$realname" cmds=$postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" fi # Install the pseudo-library for information purposes. name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` instname="$dir/$name"i $show "$install_prog $instname $destdir/$name" $run eval "$install_prog $instname $destdir/$name" || exit $? # Maybe install the static library, too. test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` ;; *.$objext) staticdest="$destfile" destfile= ;; *) $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac # Install the libtool object if requested. if test -n "$destfile"; then $show "$install_prog $file $destfile" $run eval "$install_prog $file $destfile" || exit $? fi # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` $show "$install_prog $staticobj $staticdest" $run eval "$install_prog \$staticobj \$staticdest" || exit $? fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then file=`$echo $file|${SED} 's,.exe$,,'` stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin*|*mingw*) wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` ;; *) wrapper=$file ;; esac if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then notinst_deplibs= relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac # Check the variables that should have been set. if test -z "$notinst_deplibs"; then $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 exit $EXIT_FAILURE fi finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then # If there is no directory component, then add one. case $lib in */* | *\\*) . $lib ;; *) . ./$lib ;; esac fi libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 finalize=no fi done relink_command= # To insure that "foo" is sourced, and not "foo.exe", # finese the cygwin/MSYS system by explicitly sourcing "foo." # which disallows the automatic-append-.exe behavior. case $build in *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; *) wrapperdot=${wrapper} ;; esac # If there is no directory component, then add one. case $file in */* | *\\*) . ${wrapperdot} ;; *) . ./${wrapperdot} ;; esac outputname= if test "$fast_install" = no && test -n "$relink_command"; then if test "$finalize" = yes && test -z "$run"; then tmpdir="/tmp" test -n "$TMPDIR" && tmpdir="$TMPDIR" tmpdir="$tmpdir/libtool-$$" save_umask=`umask` umask 0077 if $mkdir "$tmpdir"; then umask $save_umask else umask $save_umask $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 continue fi file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` $show "$relink_command" if $run eval "$relink_command"; then : else $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 ${rm}r "$tmpdir" continue fi file="$outputname" else $echo "$modename: warning: cannot relink \`$file'" 1>&2 fi else # Install the binary that we compiled earlier. file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyways case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` ;; esac ;; esac $show "$install_prog$stripme $file $destfile" $run eval "$install_prog\$stripme \$file \$destfile" || exit $? test -n "$outputname" && ${rm}r "$tmpdir" ;; esac done for file in $staticlibs; do name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` # Set up the ranlib parameters. oldlib="$destdir/$name" $show "$install_prog $file $oldlib" $run eval "$install_prog \$file \$oldlib" || exit $? if test -n "$stripme" && test -n "$old_striplib"; then $show "$old_striplib $oldlib" $run eval "$old_striplib $oldlib" || exit $? fi # Do each command in the postinstall commands. cmds=$old_postinstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || exit $? done IFS="$save_ifs" done if test -n "$future_libdirs"; then $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 fi if test -n "$current_libdirs"; then # Maybe just do a dry run. test -n "$run" && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi ;; # libtool finish mode finish) modename="$modename: finish" libdirs="$nonopt" admincmds= if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for dir do libdirs="$libdirs $dir" done for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. cmds=$finish_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" || admincmds="$admincmds $cmd" done IFS="$save_ifs" fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $run eval "$cmds" || admincmds="$admincmds $cmds" fi done fi # Exit here if they wanted silent mode. test "$show" = : && exit $EXIT_SUCCESS $echo "----------------------------------------------------------------------" $echo "Libraries have been installed in:" for libdir in $libdirs; do $echo " $libdir" done $echo $echo "If you ever happen to want to link against installed libraries" $echo "in a given directory, LIBDIR, you must either use libtool, and" $echo "specify the full pathname of the library, or use the \`-LLIBDIR'" $echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then $echo " - add LIBDIR to the \`$shlibpath_var' environment variable" $echo " during execution" fi if test -n "$runpath_var"; then $echo " - add LIBDIR to the \`$runpath_var' environment variable" $echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $echo " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $echo " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then $echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi $echo $echo "See any operating system documentation about shared libraries for" $echo "more information, such as the ld(1) and ld.so(8) manual pages." $echo "----------------------------------------------------------------------" exit $EXIT_SUCCESS ;; # libtool execute mode execute) modename="$modename: execute" # The first argument is the command name. cmd="$nonopt" if test -z "$cmd"; then $echo "$modename: you must specify a COMMAND" 1>&2 $echo "$help" exit $EXIT_FAILURE fi # Handle -dlopen flags immediately. for file in $execute_dlfiles; do if test ! -f "$file"; then $echo "$modename: \`$file' is not a file" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi dir= case $file in *.la) # Check to see that this really is a libtool archive. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : else $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi # Read the libtool library. dlname= library_names= # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" continue fi dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. if test -f "$dir/$objdir/$dlname"; then dir="$dir/$objdir" else $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 exit $EXIT_FAILURE fi ;; *.lo) # Just add the directory containing the .lo file. dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` test "X$dir" = "X$file" && dir=. ;; *) $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -*) ;; *) # Do a test to see if this is really a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # If there is no directory component, then add one. case $file in */* | *\\*) . $file ;; *) . ./$file ;; esac # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` args="$args \"$file\"" done if test -z "$run"; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables if test "${save_LC_ALL+set}" = set; then LC_ALL="$save_LC_ALL"; export LC_ALL fi if test "${save_LANG+set}" = set; then LANG="$save_LANG"; export LANG fi # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" $echo "export $shlibpath_var" fi $echo "$cmd$args" exit $EXIT_SUCCESS fi ;; # libtool clean and uninstall mode clean | uninstall) modename="$modename: $mode" rm="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) rm="$rm $arg"; rmforce=yes ;; -*) rm="$rm $arg" ;; *) files="$files $arg" ;; esac done if test -z "$rm"; then $echo "$modename: you must specify an RM program" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE fi rmdirs= origobjdir="$objdir" for file in $files; do dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` if test "X$dir" = "X$file"; then dir=. objdir="$origobjdir" else objdir="$dir/$origobjdir" fi name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` test "$mode" = uninstall && objdir="$dir" # Remember objdir for removal later, being careful to avoid duplicates if test "$mode" = clean; then case " $rmdirs " in *" $objdir "*) ;; *) rmdirs="$rmdirs $objdir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if (test -L "$file") >/dev/null 2>&1 \ || (test -h "$file") >/dev/null 2>&1 \ || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then . $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do rmfiles="$rmfiles $objdir/$n" done test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" if test "$mode" = uninstall; then if test -n "$library_names"; then # Do each command in the postuninstall commands. cmds=$postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. cmds=$old_postuninstall_cmds save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $show "$cmd" $run eval "$cmd" if test "$?" -ne 0 && test "$rmforce" != yes; then exit_status=1 fi done IFS="$save_ifs" fi # FIXME: should reinstall the best remaining shared library. fi fi ;; *.lo) # Possibly a libtool object, so verify it. if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then # Read the .lo file . $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" \ && test "$pic_object" != none; then rmfiles="$rmfiles $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" \ && test "$non_pic_object" != none; then rmfiles="$rmfiles $dir/$non_pic_object" fi fi ;; *) if test "$mode" = clean ; then noexename=$name case $file in *.exe) file=`$echo $file|${SED} 's,.exe$,,'` noexename=`$echo $name|${SED} 's,.exe$,,'` # $file with .exe has already been added to rmfiles, # add $file without .exe rmfiles="$rmfiles $file" ;; esac # Do a test to see if this is a libtool program. if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then relink_command= . $dir/$noexename # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then rmfiles="$rmfiles $objdir/lt-$name" fi if test "X$noexename" != "X$name" ; then rmfiles="$rmfiles $objdir/lt-${noexename}.c" fi fi fi ;; esac $show "$rm $rmfiles" $run $rm $rmfiles || exit_status=1 done objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then $show "rmdir $dir" $run rmdir $dir >/dev/null 2>&1 fi done exit $exit_status ;; "") $echo "$modename: you must specify a MODE" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE ;; esac if test -z "$exec_cmd"; then $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$generic_help" 1>&2 exit $EXIT_FAILURE fi fi # test -z "$show_help" if test -n "$exec_cmd"; then eval exec $exec_cmd exit $EXIT_FAILURE fi # We need to display help for each of the modes. case $mode in "") $echo \ "Usage: $modename [OPTION]... [MODE-ARG]... Provide generalized library-building support services. --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --finish same as \`--mode=finish' --help display this help message and exit --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] --quiet same as \`--silent' --silent don't print informational messages --tag=TAG use configuration variables from tag TAG --version print version information MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for a more detailed description of MODE. Report bugs to ." exit $EXIT_SUCCESS ;; clean) $echo \ "Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $echo \ "Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -prefer-pic try to building PIC objects only -prefer-non-pic try to building non-PIC objects only -static always build a \`.o' file suitable for static linking COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $echo \ "Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $echo \ "Usage: $modename [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $echo \ "Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $echo \ "Usage: $modename [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -static do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $echo \ "Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) $echo "$modename: invalid operation mode \`$mode'" 1>&2 $echo "$help" 1>&2 exit $EXIT_FAILURE ;; esac $echo $echo "Try \`$modename --help' for more information about other modes." exit $EXIT_SUCCESS # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) $echo no;; *) $echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: buddy-2.4/tools/missing0000755000076500001440000002466610100042061010705 #! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2003-09-02.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: buddy-2.4/README0000644000076500001440000001215110074645726007043 ========================================================================== *** BuDDy *** Binary Decision Diagrams Library Package v2.4 -------------------------------------------------------------------------- Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================== --------------------------------------------------------------------- --- PREFACE -------------------------------------------------------- --------------------------------------------------------------------- BuDDy was originally developed by Jorn Lind-Nielsen as a part of his PhD thesis. After using BuDDy as a BDD library for long time (while getting some support from Jorn through email), I have been suggested by Jorn to take ownership of the project and move it to SourceForge. I invite all users who are interested to participate in the development to contact me. (I always have desired tasks / features awaiting...) I hope that BuDDy will prosper under my management. Haim Cohen haimcohen@users.sourceforge.net --------------------------------------------------------------------- --- REQUIREMENTS ---------------------------------------------------- --------------------------------------------------------------------- * A (not too old) C++ compiler. I use g++ 3.3.3 * A machine that supports 32 bit integers --------------------------------------------------------------------- --- INSTALLING ------------------------------------------------------ --------------------------------------------------------------------- The following commands should build and install the library. ./configure make make install `./configure' accepts many arguments to tune your installation. The following options are noteworthy: --includedir=/somewhere/include Specify where header files will be installed. --libdir=/somewhere/lib Specify where libraries will be installed. --disable-shared Do not build the shared library for BuDDy. --disable-static Do not build the static library for BuDDy. --enable-swap-count Count number of fundamental variable swaps (for debugging) --enable-cache-stats Gather statistical information about operator and unique node caching (for debugging) Run `./configure --help' for a complete listing, and see the INSTALL file for generic instructions. Some machines are missing "CLOCKS_PER_SEC". BuDDy will use a default value of 60 on these. You can overwrite this setting by setting DEFAULT_CLOCK as follows: ./configure CPPFLAGS=-DDEFAULT_CLOCK=1000 Part of the BuDDy library needs 64 bit arithmetics. With gnu C++, Microsoft C++ and KAI C++, and any C99 compiler, this is part of the language and used by BuDDy. With other compilers BuDDy need to implement the math it self -- which is a bit slower. If you now of a 64 bit unsigned integer type on your platform then define that in the BUDDYUINT64 variable. Example: ./configure CPPFLAGS=-DBUDDYUINT64="long long" Run `make check' to build the examples. The examples also serve as a regression suite. --------------------------------------------------------------------- --- USING ----------------------------------------------------------- --------------------------------------------------------------------- Assuming that the files "bdd.h" and "libbdd.a" are in directories "/usr/local/include" and "/usr/local/lib" then the compile command could be: g++ -I/usr/local/include myfile.cc -o myfile -L/usr/local/lib -lbdd Your machine may be setup to use the above directories automatically, so you might be able to do: g++ myfile.cc -o myfile -lbdd buddy-2.4/configure.ac0000644000076500001440000000157110074025575010447 AC_PREREQ([2.57]) AC_INIT([buddy], [2.4]) AC_CONFIG_AUX_DIR([tools]) AM_INIT_AUTOMAKE([foreign nostdinc no-define 1.7.3]) MAJOR_VERSION=`echo "$VERSION" | sed -e 's/^\([[0-9]]*\)\.[[0-9]]*.*$/\1/'` MINOR_VERSION=`echo "$VERSION" | sed -e 's/^[[0-9]]*\.\([[0-9]]*\).*$/\1/'` AC_DEFINE_UNQUOTED([MAJOR_VERSION], [$MAJOR_VERSION], [BuDDy's major version.]) AC_DEFINE_UNQUOTED([MINOR_VERSION], [$MINOR_VERSION], [BuDDy's minor version.]) AC_PROG_CC AM_PROG_LEX AC_PROG_YACC AC_PROG_CXX AC_PROG_LIBTOOL buddy_DEBUG_FLAGS AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([ Makefile src/Makefile doc/Makefile examples/Makefile examples/adder/Makefile examples/bddcalc/Makefile examples/bddtest/Makefile examples/cmilner/Makefile examples/fdd/Makefile examples/milner/Makefile examples/money/Makefile examples/queen/Makefile examples/solitare/Makefile ]) AC_OUTPUT buddy-2.4/aclocal.m40000644000076500001440000073434310100042035010007 # generated automatically by aclocal 1.8.5 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 47 AC_PROG_LIBTOOL # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) # ----------------------------------------------------------- # If this macro is not defined by Autoconf, define it here. m4_ifdef([AC_PROVIDE_IFELSE], [], [m4_define([AC_PROVIDE_IFELSE], [m4_ifdef([AC_PROVIDE_$1], [$2], [$3])])]) # AC_PROG_LIBTOOL # --------------- AC_DEFUN([AC_PROG_LIBTOOL], [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. AC_PROVIDE_IFELSE([AC_PROG_CXX], [AC_LIBTOOL_CXX], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX ])]) dnl And a similar setup for Fortran 77 support AC_PROVIDE_IFELSE([AC_PROG_F77], [AC_LIBTOOL_F77], [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 ])]) dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [AC_LIBTOOL_GCJ], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], [AC_LIBTOOL_GCJ], [ifdef([AC_PROG_GCJ], [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([A][M_PROG_GCJ], [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) ifdef([LT_AC_PROG_GCJ], [define([LT_AC_PROG_GCJ], defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) ])])# AC_PROG_LIBTOOL # _AC_PROG_LIBTOOL # ---------------- AC_DEFUN([_AC_PROG_LIBTOOL], [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl # Prevent multiple expansion define([AC_PROG_LIBTOOL], []) ])# _AC_PROG_LIBTOOL # AC_LIBTOOL_SETUP # ---------------- AC_DEFUN([AC_LIBTOOL_SETUP], [AC_PREREQ(2.50)dnl AC_REQUIRE([AC_ENABLE_SHARED])dnl AC_REQUIRE([AC_ENABLE_STATIC])dnl AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_LD])dnl AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl AC_REQUIRE([AC_PROG_NM])dnl AC_REQUIRE([AC_PROG_LN_S])dnl AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! AC_REQUIRE([AC_OBJEXT])dnl AC_REQUIRE([AC_EXEEXT])dnl dnl AC_LIBTOOL_SYS_MAX_CMD_LEN AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE AC_LIBTOOL_OBJDIR AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_PROG_ECHO_BACKSLASH case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' [sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'] # Same as above, but do not quote variable references. [double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'] # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" AC_CHECK_TOOL(AR, ar, false) AC_CHECK_TOOL(RANLIB, ranlib, :) AC_CHECK_TOOL(STRIP, strip, :) old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then AC_PATH_MAGIC fi ;; esac AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], enable_win32_dll=yes, enable_win32_dll=no) AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes AC_ARG_WITH([pic], [AC_HELP_STRING([--with-pic], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [pic_mode="$withval"], [pic_mode=default]) test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= AC_LIBTOOL_LANG_C_CONFIG _LT_AC_TAGCONFIG ])# AC_LIBTOOL_SETUP # _LT_AC_SYS_COMPILER # ------------------- AC_DEFUN([_LT_AC_SYS_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_AC_SYS_COMPILER # _LT_AC_SYS_LIBPATH_AIX # ---------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], [AC_LINK_IFELSE(AC_LANG_PROGRAM,[ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi],[]) if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ])# _LT_AC_SYS_LIBPATH_AIX # _LT_AC_SHELL_INIT(ARG) # ---------------------- AC_DEFUN([_LT_AC_SHELL_INIT], [ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], [AC_DIVERT_PUSH(NOTICE)]) $1 AC_DIVERT_POP ])# _LT_AC_SHELL_INIT # _LT_AC_PROG_ECHO_BACKSLASH # -------------------------- # Add some code to the start of the generated configure script which # will find an echo command which doesn't interpret backslashes. AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], [_LT_AC_SHELL_INIT([ # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` ;; esac echo=${ECHO-echo} if test "X[$]1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X[$]1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} fi if test "X[$]1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL [$]0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL [$]0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "[$]0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" fi AC_SUBST(ECHO) ])])# _LT_AC_PROG_ECHO_BACKSLASH # _LT_AC_LOCK # ----------- AC_DEFUN([_LT_AC_LOCK], [AC_ARG_ENABLE([libtool-lock], [AC_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line __oline__ "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext lt_cv_cc_lib64_suffix=no if AC_TRY_EVAL(ac_compile); then case "`/usr/bin/file conftest.$ac_objext`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" lt_cv_cc_lib64_suffix=yes ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" lt_cv_cc_lib64_suffix=yes ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" lt_cv_cc_lib64_suffix=yes ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" lt_cv_cc_lib64_suffix=yes ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], [*-*-cygwin* | *-*-mingw* | *-*-pw32*) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; ]) esac need_locks="$enable_libtool_lock" ])# _LT_AC_LOCK # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_REQUIRE([LT_AC_PROG_SED]) AC_CACHE_CHECK([$1], [$2], [$2=no ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then $2=yes fi fi $rm conftest* ]) if test x"[$]$2" = xyes; then ifelse([$5], , :, [$5]) else ifelse([$6], , :, [$6]) fi ])# AC_LIBTOOL_COMPILER_OPTION # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ------------------------------------------------------------ # Check whether the given compiler option works AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD else $2=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then ifelse([$4], , :, [$4]) else ifelse([$5], , :, [$5]) fi ])# AC_LIBTOOL_LINKER_OPTION # AC_LIBTOOL_SYS_MAX_CMD_LEN # -------------------------- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [# find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi ])# AC_LIBTOOL_SYS_MAX_CMD_LEN # _LT_AC_CHECK_DLFCN # -------------------- AC_DEFUN([_LT_AC_CHECK_DLFCN], [AC_CHECK_HEADERS(dlfcn.h)dnl ])# _LT_AC_CHECK_DLFCN # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ------------------------------------------------------------------ AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); }] EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_unknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_AC_TRY_DLOPEN_SELF # AC_LIBTOOL_DLOPEN_SELF # ------------------- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_AC_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi ])# AC_LIBTOOL_DLOPEN_SELF # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) # --------------------------------- # Check to see if options -c and -o are simultaneously supported by compiler AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* ]) ])# AC_LIBTOOL_PROG_CC_C_O # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) # ----------------------------------------- # Check to see if we can do hard links to lock some files if needed AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_REQUIRE([_LT_AC_LOCK])dnl hard_links="nottested" if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS # AC_LIBTOOL_OBJDIR # ----------------- AC_DEFUN([AC_LIBTOOL_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir ])# AC_LIBTOOL_OBJDIR # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) # ---------------------------------------------- # Check hardcoding attributes. AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_AC_TAGVAR(hardcode_action, $1)= if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then # We can hardcode non-existant directories. if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_AC_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_AC_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_AC_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH # AC_LIBTOOL_SYS_LIB_STRIP # ------------------------ AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], [striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi ])# AC_LIBTOOL_SYS_LIB_STRIP # AC_LIBTOOL_SYS_DYNAMIC_LINKER # ----------------------------- # PORTME Fill in your ld.so characteristics AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_MSG_CHECKING([dynamic linker characteristics]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes libsuff= if test "$lt_cv_cc_lib64_suffix" = "yes"; then libsuff=64 fi # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/[:,\t]/ /g;s/=[^=]*$//;s/=[^= ]* / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} $lt_ld_extra" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} /usr/local/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER # _LT_AC_TAGCONFIG # ---------------- AC_DEFUN([_LT_AC_TAGCONFIG], [AC_ARG_WITH([tags], [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], [include additional configurations @<:@automatic@:>@])], [tagnames="$withval"]) if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then AC_MSG_WARN([output file `$ofile' does not exist]) fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) else AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in "") ;; *) AC_MSG_ERROR([invalid tag name: $tagname]) ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then AC_MSG_ERROR([tag name \"$tagname\" already exists]) fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then AC_LIBTOOL_LANG_CXX_CONFIG else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then AC_LIBTOOL_LANG_F77_CONFIG else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then AC_LIBTOOL_LANG_GCJ_CONFIG else tagname="" fi ;; RC) AC_LIBTOOL_LANG_RC_CONFIG ;; *) AC_MSG_ERROR([Unsupported tag name: $tagname]) ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" AC_MSG_ERROR([unable to update list of available tagged configurations.]) fi fi ])# _LT_AC_TAGCONFIG # AC_LIBTOOL_DLOPEN # ----------------- # enable checks for dlopen support AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_DLOPEN # AC_LIBTOOL_WIN32_DLL # -------------------- # declare package support for building win32 dll's AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) ])# AC_LIBTOOL_WIN32_DLL # AC_ENABLE_SHARED([DEFAULT]) # --------------------------- # implement the --enable-shared flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_SHARED], [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([shared], [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]AC_ENABLE_SHARED_DEFAULT) ])# AC_ENABLE_SHARED # AC_DISABLE_SHARED # ----------------- #- set the default shared flag to --disable-shared AC_DEFUN([AC_DISABLE_SHARED], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_SHARED(no) ])# AC_DISABLE_SHARED # AC_ENABLE_STATIC([DEFAULT]) # --------------------------- # implement the --enable-static flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_STATIC], [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([static], [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]AC_ENABLE_STATIC_DEFAULT) ])# AC_ENABLE_STATIC # AC_DISABLE_STATIC # ----------------- # set the default static flag to --disable-static AC_DEFUN([AC_DISABLE_STATIC], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_STATIC(no) ])# AC_DISABLE_STATIC # AC_ENABLE_FAST_INSTALL([DEFAULT]) # --------------------------------- # implement the --enable-fast-install flag # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. AC_DEFUN([AC_ENABLE_FAST_INSTALL], [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl AC_ARG_ENABLE([fast-install], [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT) ])# AC_ENABLE_FAST_INSTALL # AC_DISABLE_FAST_INSTALL # ----------------------- # set the default to --disable-fast-install AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_ENABLE_FAST_INSTALL(no) ])# AC_DISABLE_FAST_INSTALL # AC_LIBTOOL_PICMODE([MODE]) # -------------------------- # implement the --with-pic flag # MODE is either `yes' or `no'. If omitted, it defaults to `both'. AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl pic_mode=ifelse($#,1,$1,default) ])# AC_LIBTOOL_PICMODE # AC_PROG_EGREP # ------------- # This is predefined starting with Autoconf 2.54, so this conditional # definition can be removed once we require Autoconf 2.54 or later. m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi]) EGREP=$ac_cv_prog_egrep AC_SUBST([EGREP]) ])]) # AC_PATH_TOOL_PREFIX # ------------------- # find a file program which can recognise shared library AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="ifelse([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi ])# AC_PATH_TOOL_PREFIX # AC_PATH_MAGIC # ------------- # find a file program which can recognise a shared library AC_DEFUN([AC_PATH_MAGIC], [AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# AC_PATH_MAGIC # AC_PROG_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([AC_PROG_LD], [AC_ARG_WITH([gnu-ld], [AC_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no]) AC_REQUIRE([LT_AC_PROG_SED])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) case $host_cpu in alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*|x86_64*) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown ])# AC_DEPLIBS_CHECK_METHOD # AC_PROG_NM # ---------- # find the pathname to a BSD-compatible name lister AC_DEFUN([AC_PROG_NM], [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi]) NM="$lt_cv_path_NM" ])# AC_PROG_NM # AC_CHECK_LIBM # ------------- # check for math library AC_DEFUN([AC_CHECK_LIBM], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac ])# AC_CHECK_LIBM # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl convenience library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with # '${top_srcdir}/' (note the single quotes!). If your package is not # flat and you're not using automake, define top_builddir and # top_srcdir appropriately in the Makefiles. AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl case $enable_ltdl_convenience in no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; "") enable_ltdl_convenience=yes ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; esac LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_CONVENIENCE # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) # ----------------------------------- # sets LIBLTDL to the link flags for the libltdl installable library and # LTDLINCL to the include flags for the libltdl header and adds # --enable-ltdl-install to the configure arguments. Note that LIBLTDL # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If # DIRECTORY is not provided and an installed libltdl is not found, it is # assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single # quotes!). If your package is not flat and you're not using automake, # define top_builddir and top_srcdir appropriately in the Makefiles. # In the future, this macro may have to be called after AC_PROG_LIBTOOL. AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl AC_CHECK_LIB(ltdl, lt_dlinit, [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], [if test x"$enable_ltdl_install" = xno; then AC_MSG_WARN([libltdl not installed, but installation disabled]) else enable_ltdl_install=yes fi ]) if test x"$enable_ltdl_install" = x"yes"; then ac_configure_args="$ac_configure_args --enable-ltdl-install" LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) else ac_configure_args="$ac_configure_args --enable-ltdl-install=no" LIBLTDL="-lltdl" LTDLINCL= fi # For backwards non-gettext consistent compatibility... INCLTDL="$LTDLINCL" ])# AC_LIBLTDL_INSTALLABLE # AC_LIBTOOL_CXX # -------------- # enable support for C++ libraries AC_DEFUN([AC_LIBTOOL_CXX], [AC_REQUIRE([_LT_AC_LANG_CXX]) ])# AC_LIBTOOL_CXX # _LT_AC_LANG_CXX # --------------- AC_DEFUN([_LT_AC_LANG_CXX], [AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX]) ])# _LT_AC_LANG_CXX # AC_LIBTOOL_F77 # -------------- # enable support for Fortran 77 libraries AC_DEFUN([AC_LIBTOOL_F77], [AC_REQUIRE([_LT_AC_LANG_F77]) ])# AC_LIBTOOL_F77 # _LT_AC_LANG_F77 # --------------- AC_DEFUN([_LT_AC_LANG_F77], [AC_REQUIRE([AC_PROG_F77]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77]) ])# _LT_AC_LANG_F77 # AC_LIBTOOL_GCJ # -------------- # enable support for GCJ libraries AC_DEFUN([AC_LIBTOOL_GCJ], [AC_REQUIRE([_LT_AC_LANG_GCJ]) ])# AC_LIBTOOL_GCJ # _LT_AC_LANG_GCJ # --------------- AC_DEFUN([_LT_AC_LANG_GCJ], [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ]) ])# _LT_AC_LANG_GCJ # AC_LIBTOOL_RC # -------------- # enable support for Windows resource files AC_DEFUN([AC_LIBTOOL_RC], [AC_REQUIRE([LT_AC_PROG_RC]) _LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC]) ])# AC_LIBTOOL_RC # AC_LIBTOOL_LANG_C_CONFIG # ------------------------ # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) AC_DEFUN([_LT_AC_LANG_C_CONFIG], [lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' _LT_AC_SYS_COMPILER # # Check for any special shared library compilation flags. # _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= if test "$GCC" = no; then case $host_os in sco3.2v5*) _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' ;; esac fi if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[ ]]" >/dev/null; then : else AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no fi fi # # Check to make sure the static flag actually works. # AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), [], [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) # Report which librarie types wil actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac output_verbose_link_cmd='echo' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC="$lt_save_CC" ])# AC_LIBTOOL_LANG_C_CONFIG # AC_LIBTOOL_LANG_CXX_CONFIG # -------------------------- # Ensure that the configuration vars for the C compiler are # suitably defined. Those variables are subsequently used by # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], [AC_LANG_PUSH(C++) AC_REQUIRE([AC_PROG_CXX]) AC_REQUIRE([AC_PROG_CXXCPP]) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_AC_TAGVAR(no_undefined_flag, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Dependencies to place before and after the object being linked: _LT_AC_TAGVAR(predep_objects, $1)= _LT_AC_TAGVAR(postdep_objects, $1)= _LT_AC_TAGVAR(predeps, $1)= _LT_AC_TAGVAR(postdeps, $1)= _LT_AC_TAGVAR(compiler_lib_search_path, $1)= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o _LT_AC_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_AC_SYS_COMPILER # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC _LT_AC_TAGVAR(compiler, $1)=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration AC_PROG_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_AC_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; darwin* | rhapsody*) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd[12]*) # C++ shared libraries reported to be fairly broken before switch to ELF _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | kfreebsd*-gnu) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_AC_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; hpux9*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; *) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_AC_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; cxx) _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; sco*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case $cc_basename in CC) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; lcc) # Lucid # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_AC_TAGVAR(GCC, $1)="$GXX" _LT_AC_TAGVAR(LD, $1)="$LD" AC_LIBTOOL_POSTDEP_PREDEP($1) AC_LIBTOOL_PROG_COMPILER_PIC($1) AC_LIBTOOL_PROG_CC_C_O($1) AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) AC_LIBTOOL_PROG_LD_SHLIBS($1) AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) AC_LIBTOOL_SYS_LIB_STRIP AC_LIBTOOL_DLOPEN_SELF($1) AC_LIBTOOL_CONFIG($1) AC_LANG_POP CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld ])# AC_LIBTOOL_LANG_CXX_CONFIG # AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME]) # ------------------------ # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" ifelse([$1], [], [#! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG], [# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) # Is the compiler the GNU C compiler? with_gcc=$_LT_AC_TAGVAR(GCC, $1) # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_[]_LT_AC_TAGVAR(LD, $1) # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) # Commands used to build and install a shared archive. archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) # Flag that forces no undefined symbols. no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1) # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" # Set to yes if exported symbols are required. always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) # The commands to list exported symbols. export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) # Symbols that must always be exported. include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) ifelse([$1],[], [# ### END LIBTOOL CONFIG], [# ### END LIBTOOL TAG CONFIG: $tagname]) __EOF__ ifelse([$1],[], [ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ]) else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi fi ])# AC_LIBTOOL_CONFIG # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # --------------------------------- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_NM]) AC_REQUIRE([AC_OBJEXT]) # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32*) symcode='[[ABCDGISTW]]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris* | sysv5*) symcode='[[BDRT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[[]] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) # --------------------------------------- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)= AC_MSG_CHECKING([for $compiler option to produce PIC]) ifelse([$1],[CXX],[ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; icpc) # Intel C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx) # Digital/Compaq C++ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc) # Lucid _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; newsos6) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; linux*) case $CC in icc* | ecc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; ccc*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; sco3.2v5*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' ;; solaris*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sunos4*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; uts4*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" ;; esac ]) # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) # ------------------------------------ # See if the linker supports building shared libraries. AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) ifelse([$1],[CXX],[ _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw*) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ],[ runpath_var= _LT_AC_TAGVAR(allow_undefined_flag, $1)= _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_AC_TAGVAR(archive_cmds, $1)= _LT_AC_TAGVAR(archive_expsym_cmds, $1)= _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown _LT_AC_TAGVAR(hardcode_automatic, $1)=no _LT_AC_TAGVAR(module_cmds, $1)= _LT_AC_TAGVAR(module_expsym_cmds, $1)= _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_AC_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac _LT_AC_TAGVAR(ld_shlibs, $1)=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=no _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then _LT_AC_TAGVAR(ld_shlibs, $1)=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; sunos4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_cmds, $1)="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ [01].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)="$tmp_archive_cmds" fi else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then runpath_var=LD_RUN_PATH _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(always_export_symbols, $1)=yes _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' else _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_AC_TAGVAR(archive_cmds, $1)='' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=yes else # We have old collect2 _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_AC_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. _LT_AC_SYS_LIBPATH_AIX _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) _LT_AC_TAGVAR(always_export_symbols, $1)=yes # Exported symbols can be pulled into shared objects from archives _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds it's shared libraries. _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # see comment about different semantics on the GNU ld section _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; bsdi4*) _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no case "$host_os" in rhapsody* | darwin1.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[[012]]) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' ;; 10.*) _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi _LT_AC_TAGVAR(module_cmds, $1)='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_automatic, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' _LT_AC_TAGVAR(link_all_deplibs, $1)=yes else _LT_AC_TAGVAR(ld_shlibs, $1)=no fi ;; dgux*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; freebsd1*) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; ia64*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; *) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; openbsd*) _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi ;; os2*) _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: ;; sco3.2v5*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_AC_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_AC_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_AC_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4.2uw2*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_direct, $1)=yes _LT_AC_TAGVAR(hardcode_minus_L, $1)=no _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' if test "$GCC" = yes; then _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv5*) _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' ;; uts4*) _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_AC_TAGVAR(ld_shlibs, $1)=no ;; esac fi ]) AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_AC_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_MSG_CHECKING([whether -lc should be explicitly linked in]) $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) _LT_AC_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) then _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no else _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) ;; esac fi ;; esac ])# AC_LIBTOOL_PROG_LD_SHLIBS # _LT_AC_FILE_LTDLL_C # ------------------- # Be careful that the start marker always follows a newline. AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ # /* ltdll.c starts here */ # #define WIN32_LEAN_AND_MEAN # #include # #undef WIN32_LEAN_AND_MEAN # #include # # #ifndef __CYGWIN__ # # ifdef __CYGWIN32__ # # define __CYGWIN__ __CYGWIN32__ # # endif # #endif # # #ifdef __cplusplus # extern "C" { # #endif # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); # #ifdef __cplusplus # } # #endif # # #ifdef __CYGWIN__ # #include # DECLARE_CYGWIN_DLL( DllMain ); # #endif # HINSTANCE __hDllInstance_base; # # BOOL APIENTRY # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) # { # __hDllInstance_base = hInst; # return TRUE; # } # /* ltdll.c ends here */ ])# _LT_AC_FILE_LTDLL_C # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) # --------------------------------- AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) # old names AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) # This is just to silence aclocal about the macro not being used ifelse([AC_DISABLE_FAST_INSTALL]) AC_DEFUN([LT_AC_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj, no) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS) ]) AC_DEFUN([LT_AC_PROG_RC], [AC_CHECK_TOOL(RC, windres, no) ]) # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # # LT_AC_PROG_SED # -------------- # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. AC_DEFUN([LT_AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED ]) AC_MSG_RESULT([$SED]) ]) # -*- Autoconf -*- # Copyright (C) 2002, 2003 Free Software Foundation, Inc. # Generated from amversion.in; do not edit by hand. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.8"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.8.5])]) # AM_AUX_DIR_EXPAND # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 6 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]) fi])]) # serial 7 -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 # Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. #serial 2 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # This macro actually does too much some checks are only needed if # your package does certain things. But this isn't really a big deal. # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 11 # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_MISSING_PROG(AMTAR, tar) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # -*- Autoconf -*- # Copyright (C) 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 1 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 4 # AM_PROG_LEX # ----------- # Autoconf leaves LEX=: if lex or flex can't be found. Change that to a # "missing" invocation, for better error output. AC_DEFUN([AM_PROG_LEX], [AC_PREREQ(2.50)dnl AC_REQUIRE([AM_MISSING_HAS_RUN])dnl AC_REQUIRE([AC_PROG_LEX])dnl if test "$LEX" = :; then LEX=${am_missing_run}flex fi]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # Copyright (C) 2003, 2004 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # Keeping the `.' argument allows $(mkdir_p) to be used without # argument. Indeed, we sometimes output rules like # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more # expensive solution, as it forces Make to start a sub-shell.) mkdir_p='mkdir -p -- .' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 2 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # # Check to make sure that the build environment is sane. # # Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # serial 3 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # AM_PROG_INSTALL_STRIP # Copyright (C) 2001, 2003 Free Software Foundation, Inc. # This program 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, 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) m4_include([m4/debug.m4]) buddy-2.4/Makefile.am0000644000076500001440000000012610074021567010205 ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src examples doc EXTRA_DIST = CHANGES m4/debug.m4 buddy-2.4/Makefile.in0000644000076500001440000004450110100042062010202 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure AUTHORS ChangeLog NEWS \ tools/config.guess tools/config.sub tools/depcomp \ tools/install-sh tools/ltmain.sh tools/missing subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(mkdir_p) CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = src examples doc EXTRA_DIST = CHANGES m4/debug.m4 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ cd $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) $(mkdir_p) $(distdir)/m4 $(distdir)/tools @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || mkdir "$(distdir)/$$subdir" \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="../$(top_distdir)" \ distdir="../$(distdir)/$$subdir" \ distdir) \ || exit 1; \ fi; \ done -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir $(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir $(AMTAR) chof - $(distdir) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(AMTAR) xf - ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(AMTAR) xf - ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ check-am clean clean-generic clean-libtool clean-recursive \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-shar dist-tarZ dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-recursive distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/config.h.in0000644000076500001440000000342010100042137010156 /* config.h.in. Generated from configure.ac by autoheader. */ /* Defube to 1 to gather statistical information about operator and unique node caching (for debugging). */ #undef CACHESTATS /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* BuDDy's major version. */ #undef MAJOR_VERSION /* BuDDy's minor version. */ #undef MINOR_VERSION /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 to count number of fundamental variable swaps (for debugging). */ #undef SWAPCOUNT /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER buddy-2.4/configure0000755000076500001440000243744010100042046010060 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for buddy 2.4. # # Copyright (C) 2003 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 Bourne compatible 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH 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 fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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'` # PATH needs CR, and LINENO needs CR and PATH. # 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 as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') 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=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # 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 before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, 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 # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi 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$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} case X$ECHO in X*--fallback-echo) # Remove one level of quotation (which was required for Make). ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` ;; esac echo=${ECHO-echo} if test "X$1" = X--no-reexec; then # Discard the --no-reexec flag, and continue. shift elif test "X$1" = X--fallback-echo; then # Avoid inline document here, it may be left over : elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then # Yippee, $echo works! : else # Restart under the correct shell. exec $SHELL "$0" --no-reexec ${1+"$@"} fi if test "X$1" = X--fallback-echo; then # used as fallback echo shift cat </dev/null && echo_test_string="`eval $cmd`" && (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null then break fi done fi if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then : else # The Solaris, AIX, and Digital Unix default echo programs unquote # backslashes. This makes it impossible to quote backslashes using # echo "$something" | sed 's/\\/\\\\/g' # # So, first we look for a working echo in the user's PATH. lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for dir in $PATH /usr/ucb; do IFS="$lt_save_ifs" if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$dir/echo" break fi done IFS="$lt_save_ifs" if test "X$echo" = Xecho; then # We didn't find a better echo, so look for alternatives. if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # This shell has a builtin print -r that does the trick. echo='print -r' elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && test "X$CONFIG_SHELL" != X/bin/ksh; then # If we have ksh, try running configure again with it. ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} export ORIGINAL_CONFIG_SHELL CONFIG_SHELL=/bin/ksh export CONFIG_SHELL exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} else # Try using printf. echo='printf %s\n' if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then # Cool, printf works : elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL export CONFIG_SHELL SHELL="$CONFIG_SHELL" export SHELL echo="$CONFIG_SHELL $0 --fallback-echo" elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && test "X$echo_testing_string" = 'X\t' && echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && test "X$echo_testing_string" = "X$echo_test_string"; then echo="$CONFIG_SHELL $0 --fallback-echo" else # maybe with a smaller string... prev=: for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null then break fi prev="$cmd" done if test "$prev" != 'sed 50q "$0"'; then echo_test_string=`eval $prev` export echo_test_string exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} else # Oops. We lost completely, so just stick with echo. echo=echo fi fi fi fi fi fi # Copy echo and quote the copy suitably for passing to libtool from # the Makefile, instead of quoting the original, which is used later. ECHO=$echo if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" fi tagnames=${tagnames+${tagnames},}CXX tagnames=${tagnames+${tagnames},}F77 # 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` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='buddy' PACKAGE_TARNAME='buddy' PACKAGE_VERSION='2.4' PACKAGE_STRING='buddy 2.4' PACKAGE_BUGREPORT='' # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE LEX LEXLIB LEX_OUTPUT_ROOT YACC CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOBJS LTLIBOBJS' ac_subst_files='' # 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. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' ac_prev= 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_option in -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 | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$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" ;; -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'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac 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 ;; -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 ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) 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 ;; -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'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac 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; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` 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 paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac 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 # 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 its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $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 if test "$ac_srcdir_defaulted" = yes; then { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CXX_set=${CXX+set} ac_env_CXX_value=$CXX ac_cv_env_CXX_set=${CXX+set} ac_cv_env_CXX_value=$CXX ac_env_CXXFLAGS_set=${CXXFLAGS+set} ac_env_CXXFLAGS_value=$CXXFLAGS ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} ac_cv_env_CXXFLAGS_value=$CXXFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP ac_env_CXXCPP_set=${CXXCPP+set} ac_env_CXXCPP_value=$CXXCPP ac_cv_env_CXXCPP_set=${CXXCPP+set} ac_cv_env_CXXCPP_value=$CXXCPP ac_env_F77_set=${F77+set} ac_env_F77_value=$F77 ac_cv_env_F77_set=${F77+set} ac_cv_env_F77_value=$F77 ac_env_FFLAGS_set=${FFLAGS+set} ac_env_FFLAGS_value=$FFLAGS ac_cv_env_FFLAGS_set=${FFLAGS+set} ac_cv_env_FFLAGS_value=$FFLAGS # # 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 buddy 2.4 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 \`..'] _ACEOF cat <<_ACEOF 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] --datadir=DIR read-only architecture-independent data [PREFIX/share] --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] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names 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 case $ac_init_help in short | recursive ) echo "Configuration of buddy 2.4:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-swap-count Count number of fundamental variable swaps (for debugging) --enable-cache-stats Gather statistical information about operator and unique node caching (for debugging) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] --with-tags[=TAGS] include additional configurations [automatic] 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 CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags CPP C preprocessor CXXCPP C++ preprocessor F77 Fortran 77 compiler command FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style 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 elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd $ac_popdir done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF buddy configure 2.4 generated by GNU Autoconf 2.59 Copyright (C) 2003 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 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by buddy $as_me 2.4, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { 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` hostinfo = `(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 } >&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_sep= 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_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; 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: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. 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, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf 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 -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >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 -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; 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 `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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_aux_dir= for ac_dir in tools $srcdir/tools; 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 tools $srcdir/tools" >&5 echo "$as_me: error: cannot find install-sh or install.sh in tools $srcdir/tools" >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. am__api_version="1.8" # 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 $as_executable_p "$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 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. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. 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 whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # Keeping the `.' argument allows $(mkdir_p) to be used without # argument. Indeed, we sometimes output rules like # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. # (`test -n '$(somedir)' && $(mkdir_p) $(somedir)' is a more # expensive solution, as it forces Make to start a sub-shell.) mkdir_p='mkdir -p -- .' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk 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_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='buddy' VERSION='2.4' # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} AMTAR=${AMTAR-"${am_missing_run}tar"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; 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_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; 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_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. MAJOR_VERSION=`echo "$VERSION" | sed -e 's/^\([0-9]*\)\.[0-9]*.*$/\1/'` MINOR_VERSION=`echo "$VERSION" | sed -e 's/^[0-9]*\.\([0-9]*\).*$/\1/'` cat >>confdefs.h <<_ACEOF #define MAJOR_VERSION $MAJOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define MINOR_VERSION $MINOR_VERSION _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 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 $as_executable_p "$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 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 $as_executable_p "$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 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 CC=$ac_ct_CC 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 $as_executable_p "$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 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 "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_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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done 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 CC=$ac_ct_CC else CC="$ac_cv_prog_CC" 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 $as_executable_p "$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 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 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 $as_executable_p "$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 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 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 $as_executable_p "$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 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 CC=$ac_ct_CC 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` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&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[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else 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 echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check 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' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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 | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 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 CFLAGS="-g" 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 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 ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=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 -std1 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 -std1. */ int osf4_cc_array ['\x00' == 0 ? 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 # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (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_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f 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. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext 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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi for ac_prog in flex lex 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_LEX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then echo "$as_me:$LINENO: result: $LEX" >&5 echo "${ECHO_T}$LEX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test -z "$LEXLIB" then echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 if test "${ac_cv_lib_fl_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lfl $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char yywrap (); int main () { yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_fl_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_fl_yywrap=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 if test $ac_cv_lib_fl_yywrap = yes; then LEXLIB="-lfl" else echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 if test "${ac_cv_lib_l_yywrap+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ll $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char yywrap (); int main () { yywrap (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_l_yywrap=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_l_yywrap=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 if test $ac_cv_lib_l_yywrap = yes; then LEXLIB="-ll" fi fi fi if test "x$LEX" != "x:"; then echo "$as_me:$LINENO: checking lex output file root" >&5 echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 if test "${ac_cv_prog_lex_root+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # The minimal lex program is just a single line: %%. But some broken lexes # (Solaris, I think it was) want two %% lines, so accommodate them. cat >conftest.l <<_ACEOF %% %% _ACEOF { (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 (eval $LEX conftest.l) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} { (exit 1); exit 1; }; } fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 rm -f conftest.l LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c ac_save_LIBS=$LIBS LIBS="$LIBS $LEXLIB" cat >conftest.$ac_ext <<_ACEOF `cat $LEX_OUTPUT_ROOT.c` _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_lex_yytext_pointer=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS rm -f "${LEX_OUTPUT_ROOT}.c" fi echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 if test $ac_cv_prog_lex_yytext_pointer = yes; then cat >>confdefs.h <<\_ACEOF #define YYTEXT_POINTER 1 _ACEOF fi fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi for ac_prog in 'bison -y' byacc 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_YACC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_YACC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then echo "$as_me:$LINENO: result: $YACC" >&5 echo "${ECHO_T}$YACC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC 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_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then echo "$as_me:$LINENO: result: $CXX" >&5 echo "${ECHO_T}$CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC 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_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 echo "${ECHO_T}$ac_ct_CXX" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CXX" && break done test -n "$ac_ct_CXX" || ac_ct_CXX="g++" CXX=$ac_ct_CXX fi # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C++ compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 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_cxx_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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 GXX=`test $ac_compiler_gnu = yes && echo yes` ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS CXXFLAGS="-g" echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cxx_g+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.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cxx_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cxx_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (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_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f 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. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h 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 depcc="$CXX" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi # Check whether --enable-shared or --disable-shared was given. if test "${enable_shared+set}" = set; then enableval="$enable_shared" p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi; # Check whether --enable-static or --disable-static was given. if test "${enable_static+set}" = set; then enableval="$enable_static" p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=yes fi; # Check whether --enable-fast-install or --disable-fast-install was given. if test "${enable_fast_install+set}" = set; then enableval="$enable_fast_install" p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi; # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_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_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { 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=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_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 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` 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 ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 if test "${lt_cv_path_SED+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && break cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done SED=$lt_cv_path_SED fi echo "$as_me:$LINENO: result: $SED" >&5 echo "${ECHO_T}$SED" >&6 echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_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_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 if test "${lt_cv_ld_reload_flag+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_ld_reload_flag='-r' fi echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 if test "${lt_cv_path_NM+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/${ac_tool_prefix}nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac esac fi done IFS="$lt_save_ifs" test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 echo "${ECHO_T}$lt_cv_path_NM" >&6 NM="$lt_cv_path_NM" echo "$as_me:$LINENO: checking whether ln -s works" >&5 echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else echo "$as_me:$LINENO: result: no, using $LN_S" >&5 echo "${ECHO_T}no, using $LN_S" >&6 fi echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 if test "${lt_cv_deplibs_check_method+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix4* | aix5*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi4*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump'. lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | kfreebsd*-gnu) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case "$host_cpu" in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be Linux ELF. linux*) case $host_cpu in alpha*|hppa*|i*86|ia64*|m68*|mips*|powerpc*|sparc*|s390*|sh*|x86_64*) lt_cv_deplibs_check_method=pass_all ;; *) # glibc up to 2.1.1 does not perform some relocations on ARM # this will be overridden with pass_all, but let us keep it just in case lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; esac lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; nto-qnx*) lt_cv_deplibs_check_method=unknown ;; openbsd*) lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' else lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; sco3.2v5*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; esac fi echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line 4439 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext lt_cv_cc_lib64_suffix=no if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then case "`/usr/bin/file conftest.$ac_objext`" in *32-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" lt_cv_cc_lib64_suffix=yes ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" lt_cv_cc_lib64_suffix=yes ;; s390*-*linux*) LD="${LD-ld} -m elf64_s390" lt_cv_cc_lib64_suffix=yes ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" lt_cv_cc_lib64_suffix=yes ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 if test "${lt_cv_cc_needs_belf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else 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 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then lt_cv_cc_needs_belf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 lt_cv_cc_needs_belf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext 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 fi echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; esac need_locks="$enable_libtool_lock" 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 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 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 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 #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)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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 eval "test \"\${$as_ac_Header+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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 for ac_header in dlfcn.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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;} ( cat <<\_ASBOX ## -------------------------------- ## ## Report this to the buddy lists. ## ## -------------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_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 if test -z "$CXXCPP"; then if test "${ac_cv_prog_CXXCPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi echo "$as_me:$LINENO: result: $CXXCPP" >&5 echo "${ECHO_T}$CXXCPP" >&6 ac_preproc_ok=false for ac_cxx_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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then if test -s conftest.err; then ac_cpp_err=$ac_cxx_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_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 \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran 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_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$F77"; then ac_cv_prog_F77="$F77" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_F77="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi F77=$ac_cv_prog_F77 if test -n "$F77"; then echo "$as_me:$LINENO: result: $F77" >&5 echo "${ECHO_T}$F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$F77" && break done fi if test -z "$F77"; then ac_ct_F77=$F77 for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran 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_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_F77"; then ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_F77="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_F77=$ac_cv_prog_ac_ct_F77 if test -n "$ac_ct_F77"; then echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 echo "${ECHO_T}$ac_ct_F77" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_F77" && break done F77=$ac_ct_F77 fi # Provide some information about the compiler. echo "$as_me:5552:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 if test "${ac_cv_f77_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_f77_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 ac_ext=$ac_save_ext ac_test_FFLAGS=${FFLAGS+set} ac_save_FFLAGS=$FFLAGS FFLAGS= echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_f77_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else FFLAGS=-g cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_f77_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_f77_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 if test "$ac_test_FFLAGS" = set; then FFLAGS=$ac_save_FFLAGS elif test $ac_cv_prog_f77_g = yes; then if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-g -O2" else FFLAGS="-g" fi else if test "x$ac_cv_f77_compiler_gnu" = xyes; then FFLAGS="-O2" else FFLAGS= fi fi G77=`test $ac_compiler_gnu = yes && echo yes` 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 # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 if test "${lt_cv_sys_max_cmd_len+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; *) # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while (test "X"`$CONFIG_SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \ = "XX$teststring") >/dev/null 2>&1 && new_result=`expr "X$teststring" : ".*" 2>&1` && lt_cv_sys_max_cmd_len=$new_result && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done teststring= # Add a significant safety factor because C++ compilers can tack on massive # amounts of additional arguments before passing them to the linker. # It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 else echo "$as_me:$LINENO: result: none" >&5 echo "${ECHO_T}none" >&6 fi # Check for command to grab the raw symbol name followed by C symbol from nm. echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. symxfrm='\1 \2\3 \3' # Transform an extracted symbol line into a proper C declaration lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32*) symcode='[ABCDGISTW]' ;; hpux*) # Its linker distinguishes data from code symbols if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris* | sysv5*) symcode='[BDRT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Try without a prefix undercore, then with it. for ac_symprfx in "" "_"; do # Write the raw and C identifiers. lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Now try to grab the symbols. nlist=conftest.nm if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if grep ' nm_test_var$' "$nlist" >/dev/null; then if grep ' nm_test_func$' "$nlist" >/dev/null; then cat < conftest.$ac_ext #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' cat <> conftest.$ac_ext #if defined (__STDC__) && __STDC__ # define lt_ptr_t void * #else # define lt_ptr_t char * # define const #endif /* The mapping between symbol names and symbols. */ const struct { const char *name; lt_ptr_t address; } lt_preloaded_symbols[] = { EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext cat <<\EOF >> conftest.$ac_ext {0, (lt_ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_save_LIBS="$LIBS" lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" CFLAGS="$lt_save_CFLAGS" else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then echo "$as_me:$LINENO: result: failed" >&5 echo "${ECHO_T}failed" >&6 else echo "$as_me:$LINENO: result: ok" >&5 echo "${ECHO_T}ok" >&6 fi echo "$as_me:$LINENO: checking for objdir" >&5 echo $ECHO_N "checking for objdir... $ECHO_C" >&6 if test "${lt_cv_objdir+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 echo "${ECHO_T}$lt_cv_objdir" >&6 objdir=$lt_cv_objdir case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed='sed -e s/^X//' sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' # Constants: rm="rm -f" # Global variables: default_ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a ltmain="$ac_aux_dir/ltmain.sh" ofile="$default_ofile" with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; 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_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then echo "$as_me:$LINENO: result: $AR" >&5 echo "${ECHO_T}$AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; 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_AR+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 echo "${ECHO_T}$ac_ct_AR" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi AR=$ac_ct_AR else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then echo "$as_me:$LINENO: result: $RANLIB" >&5 echo "${ECHO_T}$RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; 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_RANLIB+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 echo "${ECHO_T}$ac_ct_RANLIB" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi RANLIB=$ac_ct_RANLIB else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; 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_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; 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_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$AR" && AR=ar test -z "$AR_FLAGS" && AR_FLAGS=cru test -z "$AS" && AS=as test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$LD" && LD=ld test -z "$LN_S" && LN_S="ln -s" test -z "$MAGIC_CMD" && MAGIC_CMD=file test -z "$NM" && NM=nm test -z "$SED" && SED=sed test -z "$OBJDUMP" && OBJDUMP=objdump test -z "$RANLIB" && RANLIB=: test -z "$STRIP" && STRIP=: test -z "$ac_objext" && ac_objext=o # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" ;; *) old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" fi # Only perform the check for file, if the check method requires it case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then echo "$as_me:$LINENO: checking for file" >&5 echo $ECHO_N "checking for file... $ECHO_C" >&6 if test "${lt_cv_path_MAGIC_CMD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 echo "${ECHO_T}$MAGIC_CMD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi else MAGIC_CMD=: fi fi fi ;; esac enable_dlopen=no enable_win32_dll=no # Check whether --enable-libtool-lock or --disable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then enableval="$enable_libtool_lock" fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Check whether --with-pic or --without-pic was given. if test "${with_pic+set}" = set; then withval="$with_pic" pic_mode="$withval" else pic_mode=default fi; test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script tagname= lt_save_CC="$CC" 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}\n' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # # Check for any special shared library compilation flags. # lt_prog_cc_shlib= if test "$GCC" = no; then case $host_os in sco3.2v5*) lt_prog_cc_shlib='-belf' ;; esac fi if test -n "$lt_prog_cc_shlib"; then { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 if test "${lt_prog_compiler_static_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_prog_compiler_static" printf "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 else lt_prog_compiler_static_works=yes fi fi $rm conftest* LDFLAGS="$save_LDFLAGS" fi echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 if test x"$lt_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6586: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:6590: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; *) lt_prog_compiler_pic='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic='-Kpic' lt_prog_compiler_static='-dn' ;; solaris*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 echo "${ECHO_T}$lt_prog_compiler_pic" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6819: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:6823: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:6879: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:6883: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag= enable_shared_with_static_runtimes=no archive_cmds= archive_expsym_cmds= old_archive_From_new_cmds= old_archive_from_expsyms_cmds= export_dynamic_flag_spec= whole_archive_flag_spec= thread_safe_flag_spec= hardcode_libdir_flag_spec= hardcode_libdir_flag_spec_ld= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no hardcode_shlibpath_var=unsupported link_all_deplibs=unknown hardcode_automatic=no module_cmds= module_expsym_cmds= always_export_symbols=no export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds="$tmp_archive_cmds" fi else ld_shlibs=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_libdir_separator=':' link_all_deplibs=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec=' ' archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; freebsd1*) ld_shlibs=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld='+b $libdir' hardcode_libdir_separator=: hardcode_direct=no hardcode_shlibpath_var=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no hardcode_shlibpath_var=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld='-rpath $libdir' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; openbsd*) hardcode_direct=yes hardcode_shlibpath_var=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag=' -z text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4.2uw2*) archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=no hardcode_shlibpath_var=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv5*) no_undefined_flag=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec= hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs" >&5 echo "${ECHO_T}$ld_shlibs" >&6 test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc=no else archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 echo "${ECHO_T}$archive_cmds_need_lc" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes libsuff= if test "$lt_cv_cc_lib64_suffix" = "yes"; then libsuff=64 fi # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} $lt_ld_extra" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} /usr/local/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var " || \ test "X$hardcode_automatic"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action" >&5 echo "${ECHO_T}$hardcode_action" >&6 if test "$hardcode_action" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" 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 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+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. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+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 shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+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 dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+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. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # Report which librarie types wil actually be built echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; darwin* | rhapsody*) if test "$GCC" = yes; then archive_cmds_need_lc=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag='-undefined dynamic_lookup' ;; esac fi ;; esac output_verbose_link_cmd='echo' archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' module_expsym_cmds='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported whole_archive_flag_spec='-all_load $convenience' link_all_deplibs=yes else ld_shlibs=no fi ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler \ CC \ LD \ lt_prog_compiler_wl \ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_prog_compiler_no_builtin_flag \ export_dynamic_flag_spec \ thread_safe_flag_spec \ whole_archive_flag_spec \ enable_shared_with_static_runtimes \ old_archive_cmds \ old_archive_from_new_cmds \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ archive_cmds \ archive_expsym_cmds \ postinstall_cmds \ postuninstall_cmds \ old_archive_from_expsyms_cmds \ allow_undefined_flag \ no_undefined_flag \ export_symbols_cmds \ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ hardcode_automatic \ module_cmds \ module_expsym_cmds \ lt_cv_prog_compiler_c_o \ exclude_expsyms \ include_expsyms; do case $var in old_archive_cmds | \ old_archive_from_new_cmds | \ archive_cmds | \ archive_expsym_cmds | \ module_cmds | \ module_expsym_cmds | \ old_archive_from_expsyms_cmds | \ export_symbols_cmds | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" { echo "$as_me:$LINENO: creating $ofile" >&5 echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # # This file is part of GNU Libtool: # Originally by Gordon Matzigkeit , 1996 # # This program 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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. # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="$SED -e s/^X//" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi # The names of the tagged configurations supported by this script. available_tags= # ### BEGIN LIBTOOL CONFIG # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler # Is the compiler the GNU C compiler? with_gcc=$GCC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # ### END LIBTOOL CONFIG __EOF__ case $host_os in aix3*) cat <<\EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi EOF ;; esac # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || \ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi 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 CC="$lt_save_CC" # Check whether --with-tags or --without-tags was given. if test "${with_tags+set}" = set; then withval="$with_tags" tagnames="$withval" fi; if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi # Extract list of available tagged configurations in $ofile. # Note that this assumes the entire list is on one line. available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for tagname in $tagnames; do IFS="$lt_save_ifs" # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 echo "$as_me: error: invalid tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} { (exit 1); exit 1; }; } fi # Update the list of available tags. if test -n "$tagname"; then echo appending configuration tag \"$tagname\" to $ofile case $tagname in CXX) if test -n "$CXX" && test "X$CXX" != "Xno"; then ac_ext=cc ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_flag_spec_ld_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_automatic_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= # Source file extension for C++ test sources. ac_ext=cc # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;\n" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *) { return(0); }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} compiler=$CC compiler_CXX=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` # We don't want -fno-exception wen compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld or --without-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then withval="$with_gnu_ld" test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi; ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. echo "$as_me:$LINENO: checking for ld used by $CC" >&5 echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then echo "$as_me:$LINENO: checking for GNU ld" >&5 echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 else echo "$as_me:$LINENO: checking for non-GNU ld" >&5 echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 fi if test "${lt_cv_path_LD+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 echo "${ECHO_T}$LD" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 if test "${lt_cv_prog_gnu_ld+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes if test "$GXX" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_CXX=yes else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty executable. 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_CXX=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX=' ' archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs_CXX=no fi ;; darwin* | rhapsody*) if test "$GXX" = yes; then archive_cmds_need_lc_CXX=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_CXX='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_CXX='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_CXX='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag_CXX='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_CXX='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_CXX='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported whole_archive_flag_spec_CXX='-all_load $convenience' link_all_deplibs_CXX=yes else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd12*) # C++ shared libraries reported to be fairly broken before switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | kfreebsd*-gnu) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_CXX='+b $libdir' hardcode_libdir_separator_CXX=: ;; ia64*) hardcode_libdir_flag_spec_CXX='-L$libdir' ;; *) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case "$host_cpu" in hppa*64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; *) hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC) case "$host_cpu" in hppa*64*|ia64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case "$host_cpu" in ia64*|hppa*64*) archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' ;; *) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; irix5* | irix6*) case $cc_basename in CC) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: ;; linux*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc) # Intel C++ with_gnu_ld=yes archive_cmds_need_lc_CXX=no archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; cxx) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; osf3*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; osf4* | osf5*) case $cc_basename in KCC) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; RCC) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry $objdir/so_locations -o $lib~ $rm $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sco*) archive_cmds_need_lc_CXX=no case $cc_basename in CC) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.0-5 | solaris2.0-5.*) ;; *) # The C++ compiler is used as linker so we must use $wl # flag to pass the commands to the underlying system # linker. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac link_all_deplibs_CXX=yes # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[LR]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | grep -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' fi ;; esac ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) archive_cmds_need_lc_CXX=no ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no # The `*' in the case matches for architectures that use `case' in # $output_verbose_cmd can trigger glob expansion during the loop # eval without this substitution. output_verbose_link_cmd="`$echo \"X$output_verbose_link_cmd\" | $Xsed -e \"$no_glob_subst\"`" for p in `eval $output_verbose_link_cmd`; do case $p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" \ || test $p = "-R"; then prev=$p continue else prev= fi if test "$pre_test_object_deps_done" = no; then case $p in -L* | -R*) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi ;; *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $rm -f confest.$objext case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | os2* | pw32*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix4* | aix5*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68) # Green Hills C++ Compiler # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; dgux*) case $cc_basename in ec++) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | kfreebsd*-gnu) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux*) case $cc_basename in KCC) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; icpc) # Intel C++ lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; cxx) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; osf3* | osf4* | osf5*) case $cc_basename in KCC) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; sco*) case $cc_basename in CC) lt_prog_compiler_pic_CXX='-fPIC' ;; *) ;; esac ;; solaris*) case $cc_basename in CC) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; tandem*) case $cc_basename in NCC) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; unixware*) ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:11346: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:11350: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_CXX=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_CXX=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:11406: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:11410: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' case $host_os in aix4* | aix5*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw*) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 echo "${ECHO_T}$ld_shlibs_CXX" >&6 test "$ld_shlibs_CXX" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_CXX=no else archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes libsuff= if test "$lt_cv_cc_lib64_suffix" = "yes"; then libsuff=64 fi # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} $lt_ld_extra" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} /usr/local/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || \ test -n "$runpath_var CXX" || \ test "X$hardcode_automatic_CXX"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 echo "${ECHO_T}$hardcode_action_CXX" >&6 if test "$hardcode_action_CXX" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" 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 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+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. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+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 shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+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 dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+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. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_cxx_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_CXX \ CC_CXX \ LD_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_static_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ export_dynamic_flag_spec_CXX \ thread_safe_flag_spec_CXX \ whole_archive_flag_spec_CXX \ enable_shared_with_static_runtimes_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ postinstall_cmds_CXX \ postuninstall_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ export_symbols_cmds_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_flag_spec_ld_CXX \ hardcode_libdir_separator_CXX \ hardcode_automatic_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ lt_cv_prog_compiler_c_o_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX; do case $var in old_archive_cmds_CXX | \ old_archive_from_new_cmds_CXX | \ archive_cmds_CXX | \ archive_expsym_cmds_CXX | \ module_cmds_CXX | \ module_expsym_cmds_CXX | \ old_archive_from_expsyms_cmds_CXX | \ export_symbols_cmds_CXX | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU C compiler? with_gcc=$GCC_CXX # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_CXX # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_CXX old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_CXX # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_CXX # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_CXX # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_CXX # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_CXX" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi 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 CC=$lt_save_CC LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ldcxx=$with_gnu_ld with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld else tagname="" fi ;; F77) if test -n "$F77" && test "X$F77" != "Xno"; then ac_ext=f ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_f77_compiler_gnu archive_cmds_need_lc_F77=no allow_undefined_flag_F77= always_export_symbols_F77=no archive_expsym_cmds_F77= export_dynamic_flag_spec_F77= hardcode_direct_F77=no hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_minus_L_F77=no hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= link_all_deplibs_F77=unknown old_archive_cmds_F77=$old_archive_cmds no_undefined_flag_F77= whole_archive_flag_spec_F77= enable_shared_with_static_runtimes_F77=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o objext_F77=$objext # Code to be used in simple compile tests lt_simple_compile_test_code=" subroutine t\n return\n end\n" # Code to be used in simple link tests lt_simple_link_test_code=" program t\n end\n" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${F77-"f77"} compiler=$CC compiler_F77=$CC cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $can_build_shared" >&5 echo "${ECHO_T}$can_build_shared" >&6 echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case "$host_os" in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix4* | aix5*) test "$enable_shared" = yes && enable_static=no ;; esac echo "$as_me:$LINENO: result: $enable_shared" >&5 echo "${ECHO_T}$enable_shared" >&6 echo "$as_me:$LINENO: checking whether to build static libraries" >&5 echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes echo "$as_me:$LINENO: result: $enable_static" >&5 echo "${ECHO_T}$enable_static" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no GCC_F77="$G77" LD_F77="$LD" lt_prog_compiler_wl_F77= lt_prog_compiler_pic_F77= lt_prog_compiler_static_F77= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_static_F77='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_F77='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_F77=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_F77=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_F77='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_F77='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_F77='-Bstatic' else lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_F77='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_F77='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_F77='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_F77='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_F77='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_F77='-non_shared' ;; newsos6) lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-static' ;; ccc*) lt_prog_compiler_wl_F77='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_F77='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_F77='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_F77='-Kpic' lt_prog_compiler_static_F77='-dn' ;; solaris*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_F77='-Qoption ld ' lt_prog_compiler_pic_F77='-PIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_F77='-Wl,' lt_prog_compiler_pic_F77='-KPIC' lt_prog_compiler_static_F77='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_F77='-Kconform_pic' lt_prog_compiler_static_F77='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_F77='-pic' lt_prog_compiler_static_F77='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_F77=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_F77"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_F77=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_F77" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13698: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:13702: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_F77=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 if test x"$lt_prog_compiler_pic_works_F77" = xyes; then case $lt_prog_compiler_pic_F77 in "" | " "*) ;; *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; esac else lt_prog_compiler_pic_F77= lt_prog_compiler_can_build_shared_F77=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_F77= ;; *) lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_F77=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:13758: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:13762: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_F77=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_F77= enable_shared_with_static_runtimes_F77=no archive_cmds_F77= archive_expsym_cmds_F77= old_archive_From_new_cmds_F77= old_archive_from_expsyms_cmds_F77= export_dynamic_flag_spec_F77= whole_archive_flag_spec_F77= thread_safe_flag_spec_F77= hardcode_libdir_flag_spec_F77= hardcode_libdir_flag_spec_ld_F77= hardcode_libdir_separator_F77= hardcode_direct_F77=no hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=unsupported link_all_deplibs_F77=unknown hardcode_automatic_F77=no module_cmds_F77= module_expsym_cmds_F77= always_export_symbols_F77=no export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_F77= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_F77=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_F77=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_F77=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_F77=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_F77=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_F77='-L$libdir' allow_undefined_flag_F77=unsupported always_export_symbols_F77=no enable_shared_with_static_runtimes_F77=yes export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_F77=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; sunos4*) archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_F77="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_F77="$tmp_archive_cmds" fi else ld_shlibs_F77=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_F77=no fi ;; esac if test "$ld_shlibs_F77" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_F77='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_F77= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_F77=unsupported always_export_symbols_F77=yes archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_F77=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_F77=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_F77='' hardcode_direct_F77=yes hardcode_libdir_separator_F77=':' link_all_deplibs_F77=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_F77=yes else # We have old collect2 hardcode_direct_F77=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_F77=yes hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_libdir_separator_F77= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_F77=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_F77='-berok' # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_F77="-z nodefs" archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. cat >conftest.$ac_ext <<_ACEOF program main end _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_f77_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_F77=' ${wl}-bernotok' allow_undefined_flag_F77=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_F77=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_F77=' ' archive_cmds_need_lc_F77=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes # see comment about different semantics on the GNU ld section ld_shlibs_F77=no ;; bsdi4*) export_dynamic_flag_spec_F77=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_F77=' ' allow_undefined_flag_F77=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_F77='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_F77=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then archive_cmds_need_lc_F77=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_F77='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_F77='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_F77='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag_F77='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_F77='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_F77='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_F77='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_F77=no hardcode_automatic_F77=yes hardcode_shlibpath_var_F77=unsupported whole_archive_flag_spec_F77='-all_load $convenience' link_all_deplibs_F77=yes else ld_shlibs_F77=no fi ;; dgux*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; freebsd1*) ld_shlibs_F77=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes export_dynamic_flag_spec_F77='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_F77='+b $libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=no hardcode_shlibpath_var_F77=no ;; ia64*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=no hardcode_shlibpath_var_F77=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; *) hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_direct_F77=yes export_dynamic_flag_spec_F77='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_F77=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: link_all_deplibs_F77=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no ;; newsos6) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: hardcode_shlibpath_var_F77=no ;; openbsd*) hardcode_direct_F77=yes hardcode_shlibpath_var_F77=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' export_dynamic_flag_spec_F77='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-R$libdir' ;; *) archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_minus_L_F77=yes allow_undefined_flag_F77=unsupported archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_F77=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_F77=' -expect_unresolved \*' archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_F77='-rpath $libdir' fi hardcode_libdir_separator_F77=: ;; sco3.2v5*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_F77=' -z text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_F77='-R$libdir' hardcode_shlibpath_var_F77=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_F77=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_direct_F77=yes hardcode_minus_L_F77=yes hardcode_shlibpath_var_F77=no ;; sysv4) case $host_vendor in sni) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_F77='$CC -r -o $output$reload_objs' hardcode_direct_F77=no ;; motorola) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv4.3*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no export_dynamic_flag_spec_F77='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_F77=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_F77=yes fi ;; sysv4.2uw2*) archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_F77=yes hardcode_minus_L_F77=no hardcode_shlibpath_var_F77=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_F77='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_F77=no ;; sysv5*) no_undefined_flag_F77=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_F77= hardcode_shlibpath_var_F77=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_F77='-L$libdir' hardcode_shlibpath_var_F77=no ;; *) ld_shlibs_F77=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 echo "${ECHO_T}$ld_shlibs_F77" >&6 test "$ld_shlibs_F77" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_F77" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_F77=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_F77 in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_F77 compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_F77 allow_undefined_flag_F77= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_F77=no else archive_cmds_need_lc_F77=yes fi allow_undefined_flag_F77=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes libsuff= if test "$lt_cv_cc_lib64_suffix" = "yes"; then libsuff=64 fi # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} $lt_ld_extra" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} /usr/local/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_F77= if test -n "$hardcode_libdir_flag_spec_F77" || \ test -n "$runpath_var F77" || \ test "X$hardcode_automatic_F77"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_F77" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && test "$hardcode_minus_L_F77" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_F77=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_F77=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_F77=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 echo "${ECHO_T}$hardcode_action_F77" >&6 if test "$hardcode_action_F77" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" 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 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_F77 \ CC_F77 \ LD_F77 \ lt_prog_compiler_wl_F77 \ lt_prog_compiler_pic_F77 \ lt_prog_compiler_static_F77 \ lt_prog_compiler_no_builtin_flag_F77 \ export_dynamic_flag_spec_F77 \ thread_safe_flag_spec_F77 \ whole_archive_flag_spec_F77 \ enable_shared_with_static_runtimes_F77 \ old_archive_cmds_F77 \ old_archive_from_new_cmds_F77 \ predep_objects_F77 \ postdep_objects_F77 \ predeps_F77 \ postdeps_F77 \ compiler_lib_search_path_F77 \ archive_cmds_F77 \ archive_expsym_cmds_F77 \ postinstall_cmds_F77 \ postuninstall_cmds_F77 \ old_archive_from_expsyms_cmds_F77 \ allow_undefined_flag_F77 \ no_undefined_flag_F77 \ export_symbols_cmds_F77 \ hardcode_libdir_flag_spec_F77 \ hardcode_libdir_flag_spec_ld_F77 \ hardcode_libdir_separator_F77 \ hardcode_automatic_F77 \ module_cmds_F77 \ module_expsym_cmds_F77 \ lt_cv_prog_compiler_c_o_F77 \ exclude_expsyms_F77 \ include_expsyms_F77; do case $var in old_archive_cmds_F77 | \ old_archive_from_new_cmds_F77 | \ archive_cmds_F77 | \ archive_expsym_cmds_F77 | \ module_cmds_F77 | \ module_expsym_cmds_F77 | \ old_archive_from_expsyms_cmds_F77 | \ export_symbols_cmds_F77 | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_F77 # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_F77 # Is the compiler the GNU C compiler? with_gcc=$GCC_F77 # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_F77 # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_F77 # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_F77 pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_F77 # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_F77 old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_F77 archive_expsym_cmds=$lt_archive_expsym_cmds_F77 postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_F77 module_expsym_cmds=$lt_module_expsym_cmds_F77 # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_F77 # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_F77 # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_F77 # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_F77 # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_F77 # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_F77 # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_F77 # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_F77 # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_F77 # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_F77 # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_F77 # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_F77 # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_F77" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_F77 # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_F77 # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_F77 # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_F77 # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi 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 CC="$lt_save_CC" else tagname="" fi ;; GCJ) if test -n "$GCJ" && test "X$GCJ" != "Xno"; then # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o objext_GCJ=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}\n" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String argv) {}; }\n' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${GCJ-"gcj"} compiler=$CC compiler_GCJ=$CC # GCJ did not exist at the time GCC didn't implicitly link libc in. archive_cmds_need_lc_GCJ=no lt_prog_compiler_no_builtin_flag_GCJ= if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:15798: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:15802: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_static_GCJ='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' fi ;; amigaos*) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4' ;; beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_GCJ='-fno-common' ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared_GCJ=no enable_shared=no ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_GCJ=-Kconform_pic fi ;; hpux*) # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac ;; *) lt_prog_compiler_pic_GCJ='-fPIC' ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl_GCJ='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_GCJ='-Bstatic' else lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | pw32* | os2*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_GCJ='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case "$host_cpu" in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_GCJ='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl_GCJ='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static_GCJ='-non_shared' ;; newsos6) lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; linux*) case $CC in icc* | ecc*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-static' ;; ccc*) lt_prog_compiler_wl_GCJ='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; esac ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl_GCJ='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static_GCJ='-non_shared' ;; sco3.2v5*) lt_prog_compiler_pic_GCJ='-Kpic' lt_prog_compiler_static_GCJ='-dn' ;; solaris*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sunos4*) lt_prog_compiler_wl_GCJ='-Qoption ld ' lt_prog_compiler_pic_GCJ='-PIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) lt_prog_compiler_wl_GCJ='-Wl,' lt_prog_compiler_pic_GCJ='-KPIC' lt_prog_compiler_static_GCJ='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic_GCJ='-Kconform_pic' lt_prog_compiler_static_GCJ='-Bstatic' fi ;; uts4*) lt_prog_compiler_pic_GCJ='-pic' lt_prog_compiler_static_GCJ='-Bstatic' ;; *) lt_prog_compiler_can_build_shared_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_GCJ" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16031: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:16035: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s conftest.err; then lt_prog_compiler_pic_works_GCJ=yes fi fi $rm conftest* fi echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in "" | " "*) ;; *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;; esac else lt_prog_compiler_pic_GCJ= lt_prog_compiler_can_build_shared_GCJ=no fi fi case "$host_os" in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_GCJ= ;; *) lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ" ;; esac echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out printf "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:16091: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:16095: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings if test ! -s out/conftest.err; then lt_cv_prog_compiler_c_o_GCJ=yes fi fi chmod u+w . $rm conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files $rm out/* && rmdir out cd .. rmdir conftest $rm conftest* fi echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no echo "$as_me:$LINENO: result: $hard_links" >&5 echo "${ECHO_T}$hard_links" >&6 if test "$hard_links" = no; then { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 runpath_var= allow_undefined_flag_GCJ= enable_shared_with_static_runtimes_GCJ=no archive_cmds_GCJ= archive_expsym_cmds_GCJ= old_archive_From_new_cmds_GCJ= old_archive_from_expsyms_cmds_GCJ= export_dynamic_flag_spec_GCJ= whole_archive_flag_spec_GCJ= thread_safe_flag_spec_GCJ= hardcode_libdir_flag_spec_GCJ= hardcode_libdir_flag_spec_ld_GCJ= hardcode_libdir_separator_GCJ= hardcode_direct_GCJ=no hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=unsupported link_all_deplibs_GCJ=unknown hardcode_automatic_GCJ=no module_cmds_GCJ= module_expsym_cmds_GCJ= always_export_symbols_GCJ=no export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms_GCJ= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_" # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs_GCJ=yes if test "$with_gnu_ld" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # See if GNU ld supports shared libraries. case $host_os in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs_GCJ=no cat <&2 *** Warning: the GNU linker, at least up to release 2.9.1, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to modify your PATH *** so that a non-GNU linker is found, and then restart. EOF fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can't use # them. ld_shlibs_GCJ=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_GCJ=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_GCJ=no fi ;; cygwin* | mingw* | pw32*) # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_GCJ='-L$libdir' allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=no enable_shared_with_static_runtimes_GCJ=yes export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris* | sysv5*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs_GCJ=no cat <&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. EOF elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; sunos4*) archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; linux*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then tmp_archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_cmds_GCJ="$tmp_archive_cmds" supports_anon_versioning=no case `$LD -v 2>/dev/null` in *\ 01.* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac if test $supports_anon_versioning = yes; then archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ $echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' else archive_expsym_cmds_GCJ="$tmp_archive_cmds" fi else ld_shlibs_GCJ=no fi ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs_GCJ=no fi ;; esac if test "$ld_shlibs_GCJ" = yes; then runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_GCJ='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_GCJ= fi fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag_GCJ=unsupported always_export_symbols_GCJ=yes archive_expsym_cmds_GCJ='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L_GCJ=yes if test "$GCC" = yes && test -z "$link_static_flag"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct_GCJ=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm if $NM -V 2>&1 | grep 'GNU' > /dev/null; then export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_GCJ='' hardcode_direct_GCJ=yes hardcode_libdir_separator_GCJ=':' link_all_deplibs_GCJ=yes if test "$GCC" = yes; then case $host_os in aix4.012|aix4.012.*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct_GCJ=yes else # We have old collect2 hardcode_direct_GCJ=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_GCJ=yes hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_libdir_separator_GCJ= fi esac shared_flag='-shared' else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols_GCJ=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_GCJ="-z nodefs" archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_GCJ=' ${wl}-bernotok' allow_undefined_flag_GCJ=' ${wl}-berok' # -bexpall does not export symbols beginning with underscore (_) always_export_symbols_GCJ=yes # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_GCJ=' ' archive_cmds_need_lc_GCJ=yes # This is similar to how AIX traditionally builds it's shared libraries. archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) archive_cmds_GCJ='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes # see comment about different semantics on the GNU ld section ld_shlibs_GCJ=no ;; bsdi4*) export_dynamic_flag_spec_GCJ=-rdynamic ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_GCJ=' ' allow_undefined_flag_GCJ=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_From_new_cmds_GCJ='true' # FIXME: Should let the user specify the lib program. old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs' fix_srcfile_path='`cygpath -w "$srcfile"`' enable_shared_with_static_runtimes_GCJ=yes ;; darwin* | rhapsody*) if test "$GXX" = yes ; then archive_cmds_need_lc_GCJ=no case "$host_os" in rhapsody* | darwin1.[012]) allow_undefined_flag_GCJ='-undefined suppress' ;; *) # Darwin 1.3 on if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' else case ${MACOSX_DEPLOYMENT_TARGET} in 10.[012]) allow_undefined_flag_GCJ='-flat_namespace -undefined suppress' ;; 10.*) allow_undefined_flag_GCJ='-undefined dynamic_lookup' ;; esac fi ;; esac lt_int_apple_cc_single_mod=no output_verbose_link_cmd='echo' if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then lt_int_apple_cc_single_mod=yes fi if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_cmds_GCJ='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' else archive_cmds_GCJ='$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' fi module_cmds_GCJ='$CC ${wl}-bind_at_load $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's if test "X$lt_int_apple_cc_single_mod" = Xyes ; then archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' else archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' fi module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' hardcode_direct_GCJ=no hardcode_automatic_GCJ=yes hardcode_shlibpath_var_GCJ=unsupported whole_archive_flag_spec_GCJ='-all_load $convenience' link_all_deplibs_GCJ=yes else ld_shlibs_GCJ=no fi ;; dgux*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; freebsd1*) ld_shlibs_GCJ=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | kfreebsd*-gnu) archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' ;; hpux10* | hpux11*) if test "$GCC" = yes -a "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case "$host_cpu" in hppa*64*|ia64*) archive_cmds_GCJ='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' ;; *) archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; esac fi if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_flag_spec_ld_GCJ='+b $libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no ;; ia64*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=no hardcode_shlibpath_var_GCJ=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; *) hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_direct_GCJ=yes export_dynamic_flag_spec_GCJ='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L_GCJ=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: link_all_deplibs_GCJ=yes ;; netbsd*) if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; newsos6) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: hardcode_shlibpath_var_GCJ=no ;; openbsd*) hardcode_direct_GCJ=yes hardcode_shlibpath_var_GCJ=no if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' export_dynamic_flag_spec_GCJ='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-R$libdir' ;; *) archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_minus_L_GCJ=yes allow_undefined_flag_GCJ=unsupported archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' fi hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_GCJ=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir' else allow_undefined_flag_GCJ=' -expect_unresolved \*' archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec_GCJ='-rpath $libdir' fi hardcode_libdir_separator_GCJ=: ;; sco3.2v5*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='${wl}-Bexport' runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ;; solaris*) no_undefined_flag_GCJ=' -z text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' else archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' fi hardcode_libdir_flag_spec_GCJ='-R$libdir' hardcode_shlibpath_var_GCJ=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_GCJ=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=yes hardcode_shlibpath_var_GCJ=no ;; sysv4) case $host_vendor in sni) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds_GCJ='$CC -r -o $output$reload_objs' hardcode_direct_GCJ=no ;; motorola) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv4.3*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no export_dynamic_flag_spec_GCJ='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var_GCJ=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs_GCJ=yes fi ;; sysv4.2uw2*) archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags' hardcode_direct_GCJ=yes hardcode_minus_L_GCJ=no hardcode_shlibpath_var_GCJ=no hardcode_runpath_var=yes runpath_var=LD_RUN_PATH ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) no_undefined_flag_GCJ='${wl}-z ${wl}text' if test "$GCC" = yes; then archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds_GCJ='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' fi runpath_var='LD_RUN_PATH' hardcode_shlibpath_var_GCJ=no ;; sysv5*) no_undefined_flag_GCJ=' -z text' # $CC -shared without GNU ld will not create a library from C++ # object files and a static libstdc++, better avoid it by now archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' hardcode_libdir_flag_spec_GCJ= hardcode_shlibpath_var_GCJ=no runpath_var='LD_RUN_PATH' ;; uts4*) archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec_GCJ='-L$libdir' hardcode_shlibpath_var_GCJ=no ;; *) ld_shlibs_GCJ=no ;; esac fi echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 echo "${ECHO_T}$ld_shlibs_GCJ" >&6 test "$ld_shlibs_GCJ" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_GCJ" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_GCJ=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_GCJ in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_GCJ compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } then archive_cmds_need_lc_GCJ=no else archive_cmds_need_lc_GCJ=yes fi allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $rm conftest* echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 ;; esac fi ;; esac echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix4* | aix5*) version_type=linux need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi4*) version_type=linux need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$host_os in yes,cygwin* | yes,mingw* | yes,pw32*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $rm \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" ;; mingw*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH printed by # mingw gcc, but we are running on Cygwin. Gcc prints its search # path with ; separators, and with drive letters. We can handle the # drive letters (cygwin fileutils understands them), so leave them, # especially as we might pass files found there to a mingw objdump, # which wouldn't understand a cygwinified path. Ahh. sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/./-/g'`${versuffix}${shared_ext}' ;; esac ;; *) library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' ;; esac dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='$(test .$module = .yes && echo .so || echo .dylib)' # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. if test "$GCC" = yes; then sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` else sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' fi sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd1*) dynamic_linker=no ;; kfreebsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; freebsd*) objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2*) shlibpath_overrides_runpath=yes ;; freebsd3.01* | freebsdelf3.01*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; *) # from 3.2 on shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case "$host_cpu" in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555. postinstall_cmds='chmod 555 $lib' ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be Linux ELF. linux*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes libsuff= if test "$lt_cv_cc_lib64_suffix" = "yes"; then libsuff=64 fi # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`$SED -e 's/:,\t/ /g;s/=^=*$//;s/=^= * / /g' /etc/ld.so.conf | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} $lt_ld_extra" sys_lib_search_path_spec="/lib${libsuff} /usr/lib${libsuff} /usr/X11R6/lib${libsuff} /usr/local/lib${libsuff} $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; knetbsd*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='GNU ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; nto-qnx*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; openbsd*) version_type=sunos need_lib_prefix=no need_version=yes library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; sco3.2v5*) version_type=osf soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH ;; solaris*) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no export_dynamic_flag_spec='${wl}-Blargedynsym' runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; uts4*) version_type=linux library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac echo "$as_me:$LINENO: result: $dynamic_linker" >&5 echo "${ECHO_T}$dynamic_linker" >&6 test "$dynamic_linker" = no && can_build_shared=no echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var GCJ" || \ test "X$hardcode_automatic_GCJ"="Xyes" ; then # We can hardcode non-existant directories. if test "$hardcode_direct_GCJ" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no && test "$hardcode_minus_L_GCJ" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_GCJ=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_GCJ=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_GCJ=unsupported fi echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 echo "${ECHO_T}$hardcode_action_GCJ" >&6 if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi striplib= old_striplib= echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" 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 fi ;; *) echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 ;; esac fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+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. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) echo "$as_me:$LINENO: checking for shl_load" >&5 echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 if test "${ac_cv_func_shl_load+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 shl_load to an innocuous variant, in case declares shl_load. For example, HP-UX 11i declares gettimeofday. */ #define shl_load innocuous_shl_load /* System header to define __stub macros and hopefully few prototypes, which can conflict with char shl_load (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef shl_load /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); /* 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_shl_load) || defined (__stub___shl_load) choke me #else char (*f) () = shl_load; #endif #ifdef __cplusplus } #endif int main () { return f != shl_load; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 echo "${ECHO_T}$ac_cv_func_shl_load" >&6 if test $ac_cv_func_shl_load = yes; then lt_cv_dlopen="shl_load" else echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_shl_load+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char shl_load (); int main () { shl_load (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_shl_load=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_shl_load=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 if test $ac_cv_lib_dld_shl_load = yes; then lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else echo "$as_me:$LINENO: checking for dlopen" >&5 echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 if test "${ac_cv_func_dlopen+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 dlopen to an innocuous variant, in case declares dlopen. For example, HP-UX 11i declares gettimeofday. */ #define dlopen innocuous_dlopen /* System header to define __stub macros and hopefully few prototypes, which can conflict with char dlopen (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef dlopen /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); /* 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_dlopen) || defined (__stub___dlopen) choke me #else char (*f) () = dlopen; #endif #ifdef __cplusplus } #endif int main () { return f != dlopen; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_func_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_func_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 echo "${ECHO_T}$ac_cv_func_dlopen" >&6 if test $ac_cv_func_dlopen = yes; then lt_cv_dlopen="dlopen" else echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 if test "${ac_cv_lib_dl_dlopen+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. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dl_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dl_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 if test $ac_cv_lib_dl_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 if test "${ac_cv_lib_svld_dlopen+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dlopen (); int main () { dlopen (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_svld_dlopen=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_svld_dlopen=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 if test $ac_cv_lib_svld_dlopen = yes; then lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 if test "${ac_cv_lib_dld_dld_link+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $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 gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char dld_link (); int main () { dld_link (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_dld_dld_link=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_dld_dld_link=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 if test $ac_cv_lib_dld_dld_link = yes; then lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 echo "${ECHO_T}$lt_cv_dlopen_self" >&6 if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 if test "${lt_cv_dlopen_self_static+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif #ifdef __cplusplus extern "C" void exit (int); #endif void fnord() { int i=42;} int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; /* dlclose (self); */ } exit (status); } EOF if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_GCJ \ CC_GCJ \ LD_GCJ \ lt_prog_compiler_wl_GCJ \ lt_prog_compiler_pic_GCJ \ lt_prog_compiler_static_GCJ \ lt_prog_compiler_no_builtin_flag_GCJ \ export_dynamic_flag_spec_GCJ \ thread_safe_flag_spec_GCJ \ whole_archive_flag_spec_GCJ \ enable_shared_with_static_runtimes_GCJ \ old_archive_cmds_GCJ \ old_archive_from_new_cmds_GCJ \ predep_objects_GCJ \ postdep_objects_GCJ \ predeps_GCJ \ postdeps_GCJ \ compiler_lib_search_path_GCJ \ archive_cmds_GCJ \ archive_expsym_cmds_GCJ \ postinstall_cmds_GCJ \ postuninstall_cmds_GCJ \ old_archive_from_expsyms_cmds_GCJ \ allow_undefined_flag_GCJ \ no_undefined_flag_GCJ \ export_symbols_cmds_GCJ \ hardcode_libdir_flag_spec_GCJ \ hardcode_libdir_flag_spec_ld_GCJ \ hardcode_libdir_separator_GCJ \ hardcode_automatic_GCJ \ module_cmds_GCJ \ module_expsym_cmds_GCJ \ lt_cv_prog_compiler_c_o_GCJ \ exclude_expsyms_GCJ \ include_expsyms_GCJ; do case $var in old_archive_cmds_GCJ | \ old_archive_from_new_cmds_GCJ | \ archive_cmds_GCJ | \ archive_expsym_cmds_GCJ | \ module_cmds_GCJ | \ module_expsym_cmds_GCJ | \ old_archive_from_expsyms_cmds_GCJ | \ export_symbols_cmds_GCJ | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_GCJ # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_GCJ # Is the compiler the GNU C compiler? with_gcc=$GCC_GCJ # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_GCJ # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_GCJ # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_GCJ pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_GCJ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_GCJ old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_GCJ archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_GCJ module_expsym_cmds=$lt_module_expsym_cmds_GCJ # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_GCJ # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_GCJ # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_GCJ # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_GCJ # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_GCJ # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_GCJ # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_GCJ # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_GCJ # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_GCJ # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_GCJ # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_GCJ" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_GCJ # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_GCJ # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_GCJ # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_GCJ # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi 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 CC="$lt_save_CC" else tagname="" fi ;; RC) # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o objext_RC=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC # Allow CC to be a program name with arguments. lt_save_CC="$CC" CC=${RC-"windres"} compiler=$CC compiler_RC=$CC lt_cv_prog_compiler_c_o_RC=yes # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh # with your package, and you will get complaints that there are # no rules to generate ltmain.sh. if test -f "$ltmain"; then # See if we are running on zsh, and set the options which allow our commands through # without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi # Now quote all the things that may contain metacharacters while being # careful not to overquote the AC_SUBSTed values. We take copies of the # variables and quote the copies for generation of the libtool script. for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ SED SHELL STRIP \ libname_spec library_names_spec soname_spec extract_expsyms_cmds \ old_striplib striplib file_magic_cmd finish_cmds finish_eval \ deplibs_check_method reload_flag reload_cmds need_locks \ lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ old_postinstall_cmds old_postuninstall_cmds \ compiler_RC \ CC_RC \ LD_RC \ lt_prog_compiler_wl_RC \ lt_prog_compiler_pic_RC \ lt_prog_compiler_static_RC \ lt_prog_compiler_no_builtin_flag_RC \ export_dynamic_flag_spec_RC \ thread_safe_flag_spec_RC \ whole_archive_flag_spec_RC \ enable_shared_with_static_runtimes_RC \ old_archive_cmds_RC \ old_archive_from_new_cmds_RC \ predep_objects_RC \ postdep_objects_RC \ predeps_RC \ postdeps_RC \ compiler_lib_search_path_RC \ archive_cmds_RC \ archive_expsym_cmds_RC \ postinstall_cmds_RC \ postuninstall_cmds_RC \ old_archive_from_expsyms_cmds_RC \ allow_undefined_flag_RC \ no_undefined_flag_RC \ export_symbols_cmds_RC \ hardcode_libdir_flag_spec_RC \ hardcode_libdir_flag_spec_ld_RC \ hardcode_libdir_separator_RC \ hardcode_automatic_RC \ module_cmds_RC \ module_expsym_cmds_RC \ lt_cv_prog_compiler_c_o_RC \ exclude_expsyms_RC \ include_expsyms_RC; do case $var in old_archive_cmds_RC | \ old_archive_from_new_cmds_RC | \ archive_cmds_RC | \ archive_expsym_cmds_RC | \ module_cmds_RC | \ module_expsym_cmds_RC | \ old_archive_from_expsyms_cmds_RC | \ export_symbols_cmds_RC | \ extract_expsyms_cmds | reload_cmds | finish_cmds | \ postinstall_cmds | postuninstall_cmds | \ old_postinstall_cmds | old_postuninstall_cmds | \ sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) # Double-quote double-evaled strings. eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" ;; *) eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" ;; esac done case $lt_echo in *'\$0 --fallback-echo"') lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` ;; esac cfgfile="$ofile" cat <<__EOF__ >> "$cfgfile" # ### BEGIN LIBTOOL TAG CONFIG: $tagname # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_RC # Whether or not to disallow shared libs when runtime libs are static allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # The host system. host_alias=$host_alias host=$host # An echo program that does not interpret backslashes. echo=$lt_echo # The archiver. AR=$lt_AR AR_FLAGS=$lt_AR_FLAGS # A C compiler. LTCC=$lt_LTCC # A language-specific compiler. CC=$lt_compiler_RC # Is the compiler the GNU C compiler? with_gcc=$GCC_RC # An ERE matcher. EGREP=$lt_EGREP # The linker used to build libraries. LD=$lt_LD_RC # Whether we need hard or soft links. LN_S=$lt_LN_S # A BSD-compatible nm program. NM=$lt_NM # A symbol stripping program STRIP=$lt_STRIP # Used to examine libraries when file_magic_cmd begins "file" MAGIC_CMD=$MAGIC_CMD # Used on cygwin: DLL creation program. DLLTOOL="$DLLTOOL" # Used on cygwin: object dumper. OBJDUMP="$OBJDUMP" # Used on cygwin: assembler. AS="$AS" # The name of the directory that contains temporary libtool files. objdir=$objdir # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_RC # Object file suffix (normally "o"). objext="$ac_objext" # Old archive suffix (normally "a"). libext="$libext" # Shared library suffix (normally ".so"). shrext_cmds='$shrext_cmds' # Executable file suffix (normally ""). exeext="$exeext" # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_RC pic_mode=$pic_mode # What is the maximum length of a command? max_cmd_len=$lt_cv_sys_max_cmd_len # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC # Must we lock files when doing compilation ? need_locks=$lt_need_locks # Do we need the lib prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_RC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC # Compiler flag to generate thread-safe objects. thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC # Library versioning type. version_type=$version_type # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME. library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Commands used to build and install an old-style archive. RANLIB=$lt_RANLIB old_archive_cmds=$lt_old_archive_cmds_RC old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC # Commands used to build and install a shared archive. archive_cmds=$lt_archive_cmds_RC archive_expsym_cmds=$lt_archive_expsym_cmds_RC postinstall_cmds=$lt_postinstall_cmds postuninstall_cmds=$lt_postuninstall_cmds # Commands used to build a loadable module (assumed same as above if empty) module_cmds=$lt_module_cmds_RC module_expsym_cmds=$lt_module_expsym_cmds_RC # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # Dependencies to place before the objects being linked to create a # shared library. predep_objects=$lt_predep_objects_RC # Dependencies to place after the objects being linked to create a # shared library. postdep_objects=$lt_postdep_objects_RC # Dependencies to place before the objects being linked to create a # shared library. predeps=$lt_predeps_RC # Dependencies to place after the objects being linked to create a # shared library. postdeps=$lt_postdeps_RC # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_RC # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method == file_magic. file_magic_cmd=$lt_file_magic_cmd # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_RC # Flag that forces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_RC # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # Same as above, but a single script fragment to be evaled but not shown. finish_eval=$lt_finish_eval # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # This is the shared library runtime path variable. runpath_var=$runpath_var # This is the shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_RC # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC # If ld is used when linking, flag to hardcode \$libdir into # a binary during linking. This must work even if \$libdir does # not exist. hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the # resulting binary. hardcode_direct=$hardcode_direct_RC # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L=$hardcode_minus_L_RC # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into # the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_RC # Set to yes if building a shared library automatically hardcodes DIR into the library # and all subsequent libraries and executables linked against it. hardcode_automatic=$hardcode_automatic_RC # Variables whose values should be saved in libtool wrapper scripts and # restored at relink time. variables_saved_for_relink="$variables_saved_for_relink" # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_RC # Compile-time system search path for libraries sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Fix the shell variable \$srcfile for the compiler. fix_srcfile_path="$fix_srcfile_path_RC" # Set to yes if exported symbols are required. always_export_symbols=$always_export_symbols_RC # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_RC # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_RC # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_RC # ### END LIBTOOL TAG CONFIG: $tagname __EOF__ else # If there is no Makefile yet, we rely on a make rule to execute # `config.status --recheck' to rerun these tests and create the # libtool script then. ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` if test -f "$ltmain_in"; then test -f Makefile && make "$ltmain" fi 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 CC="$lt_save_CC" ;; *) { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 echo "$as_me: error: Unsupported tag name: $tagname" >&2;} { (exit 1); exit 1; }; } ;; esac # Append the new tag name to the list of available tags. if test -n "$tagname" ; then available_tags="$available_tags $tagname" fi fi done IFS="$lt_save_ifs" # Now substitute the updated list of available tags. if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then mv "${ofile}T" "$ofile" chmod +x "$ofile" else rm -f "${ofile}T" { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 echo "$as_me: error: unable to update list of available tagged configurations." >&2;} { (exit 1); exit 1; }; } fi fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' # Prevent multiple expansion # Check whether --enable-swap-count or --disable-swap-count was given. if test "${enable_swap_count+set}" = set; then enableval="$enable_swap_count" fi; case $enable_swap_count in yes) cat >>confdefs.h <<\_ACEOF #define SWAPCOUNT 1 _ACEOF ;; esac # Check whether --enable-cache-stats or --disable-cache-stats was given. if test "${enable_cache_stats+set}" = set; then enableval="$enable_cache_stats" fi; case $enable_cache_stats in yes) cat >>confdefs.h <<\_ACEOF #define CACHESTATS 1 _ACEOF ;; esac ac_config_headers="$ac_config_headers config.h" ac_config_files="$ac_config_files Makefile src/Makefile doc/Makefile examples/Makefile examples/adder/Makefile examples/bddcalc/Makefile examples/bddtest/Makefile examples/cmilner/Makefile examples/fdd/Makefile examples/milner/Makefile examples/money/Makefile examples/queen/Makefile examples/solitare/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, don't put newlines in cache variables' values. # 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. { (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *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 \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!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 "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" 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}' # 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 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_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${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 Bourne compatible 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+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH 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 fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; 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'` # PATH needs CR, and LINENO needs CR and PATH. # 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 as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. 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 ;; 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_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') 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=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # 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 before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, 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 # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 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 sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi 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$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # 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'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by buddy $as_me 2.4, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi 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, 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 Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ buddy config.status 2.4 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." 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 ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 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 0 ;; --debug | --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;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 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" ;; 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 $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "examples/adder/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/adder/Makefile" ;; "examples/bddcalc/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/bddcalc/Makefile" ;; "examples/bddtest/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/bddtest/Makefile" ;; "examples/cmilner/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/cmilner/Makefile" ;; "examples/fdd/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/fdd/Makefile" ;; "examples/milner/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/milner/Makefile" ;; "examples/money/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/money/Makefile" ;; "examples/queen/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/queen/Makefile" ;; "examples/solitare/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/solitare/Makefile" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { 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 test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $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 -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # 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 # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@AMTAR@,$AMTAR,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@LEX@,$LEX,;t t s,@LEXLIB@,$LEXLIB,;t t s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t s,@YACC@,$YACC,;t t s,@CXX@,$CXX,;t t s,@CXXFLAGS@,$CXXFLAGS,;t t s,@ac_ct_CXX@,$ac_ct_CXX,;t t s,@CXXDEPMODE@,$CXXDEPMODE,;t t s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@EGREP@,$EGREP,;t t s,@LN_S@,$LN_S,;t t s,@ECHO@,$ECHO,;t t s,@AR@,$AR,;t t s,@ac_ct_AR@,$ac_ct_AR,;t t s,@RANLIB@,$RANLIB,;t t s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t s,@CPP@,$CPP,;t t s,@CXXCPP@,$CXXCPP,;t t s,@F77@,$F77,;t t s,@FFLAGS@,$FFLAGS,;t t s,@ac_ct_F77@,$ac_ct_F77,;t t s,@LIBTOOL@,$LIBTOOL,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $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'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $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'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi # 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. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } _ACEOF 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,@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,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #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. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # 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. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then 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 ac_dir=`(dirname "$ac_file") 2>/dev/null || $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'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $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'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $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'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $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'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue # Extract the definition of DEP_FILES from the Makefile without # running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" # We invoke sed twice because it is the simplest approach to # changing $(DEPDIR) to its actual value in the expansion. for file in `sed -n ' /^DEP_FILES = .*\\\\$/ { s/^DEP_FILES = // :loop s/\\\\$// p n /\\\\$/ b loop p } /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $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'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (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 buddy-2.4/AUTHORS0000644000076500001440000000030610071134212007206 Jorn Lind-Nielsen - Original Developer Alan Mishchenko Gerd Behrmann Henrik Hulgaard Henrik Reif Andersen Jacob Lichtenberg Ken Larsen Nicola Soranzo Nikolaj Bjorner Alexandre Duret-Lutz Haim Cohen buddy-2.4/ChangeLog0000644000076500001440000002232510100054351007713 2004-07-22 haimcohen * NEWS 1.2, ChangeLog 1.4: *** empty log message *** * examples/solitare/Makefile.am 1.3, examples/solitare/expected 1.2, examples/solitare/runtest 1.2: Solitare will not be included in the regression since it takes too much time to run 2004-07-21 haimcohen * ChangeLog 1.3, examples/bddcalc/expected 1.2: *** empty log message *** * src/depend.inf 1.2: we do not need this file anymore since autotools are being used * examples/solitare/Makefile.am 1.2: readme was added to distribution * doc/Makefile.am 1.2: buddy.ps and tech.txt were added to distribution 2004-07-14 haimcohen * ChangeLog 1.2, tools/.cvsignore 1.1: *** empty log message *** * examples/solitare/expected 1.1: This file is empty in purpose. The solitare test takes too much memory than I can afford. Until I generate this file somehow, the solitare test should not be run. * examples/milner/expected 1.1: *** empty log message *** * examples/queen/expected 1.1, examples/bddcalc/expected 1.1, examples/bddtest/expected 1.1, examples/cmilner/expected 1.1, examples/fdd/expected 1.1, examples/money/expected 1.1, examples/adder/expected 1.1: These files are part of the new regression suite. Each file contains the expected result of a test. * examples/cmilner/Makefile.am 1.1, examples/fdd/Makefile.am 1.1, examples/milner/Makefile.am 1.1, examples/money/Makefile.am 1.1, examples/queen/Makefile.am 1.1, examples/solitare/Makefile.am 1.1: Added to support autotools * examples/fdd/makefile 1.2, examples/milner/makefile 1.2, examples/money/makefile 1.2, examples/queen/makefile 1.2, examples/solitare/makefile 1.2, examples/adder/makefile 1.2, examples/bddtest/makefile 1.2, examples/cmilner/makefile 1.2: We don't need the makefles anymore since we are using autotools now, thanks to Alexandre's contribution. * examples/bddcalc/lexer.lxx 1.1, examples/bddcalc/parser.yxx 1.1, examples/bddcalc/parser_.h 1.1, examples/bddcalc/lexer.l 1.2, examples/bddcalc/makefile 1.3, examples/bddcalc/parser.h 1.2, examples/bddcalc/parser.y 1.3: *** empty log message *** * examples/runregression 1.1: 2004-07-13 haimcohen * examples/fdd/runtest 1.1, examples/money/runtest 1.1, examples/queen/runtest 1.1, examples/solitare/runtest 1.1: A simple script to run a regression test and generate output * examples/milner/runtest 1.1: *** empty log message *** * examples/adder/runtest 1.1, examples/bddcalc/runtest 1.1, examples/bddtest/runtest 1.1, examples/cmilner/runtest 1.1: A simple script to run a regression test and generate output * examples/Makefile.am 1.1, examples/Makefile.def 1.1, examples/adder/Makefile.am 1.1, examples/bddcalc/Makefile.am 1.1, examples/bddtest/Makefile.am 1.1: Support for autotools * examples/solitare/.cvsignore 1.1, examples/.cvsignore 1.1, examples/adder/.cvsignore 1.1, examples/bddcalc/.cvsignore 1.1, examples/bddtest/.cvsignore 1.1, examples/cmilner/.cvsignore 1.1, examples/fdd/.cvsignore 1.1, examples/milner/.cvsignore 1.1, examples/money/.cvsignore 1.1, examples/queen/.cvsignore 1.1: *** empty log message *** * src/kernel.c 1.2: Changed the returned BuDDy version format. * src/kernel.h 1.2: The default value DEFAULT_CLOCK is now defined in the file instead of in the makefile. It can be changed using parameter to configure. By Alexandre. * src/.cvsignore 1.1, src/Makefile.am 1.1, src/makefile 1.2: for autoconf support 2004-07-12 haimcohen * doc/makefile 1.2, doc/.cvsignore 1.1: *** empty log message *** * doc/tech.txt 1.1: From the original BuDDy distribution * doc/Makefile.am 1.1: Added to enable autoconf * m4/debug.m4 1.1: *** empty log message *** * README 1.3: Modified to exaplin how to use configure. By Alexandre. * config 1.2, makefile 1.2, .cvsignore 1.1: *** empty log message *** * CHANGES 1.2: Empty file - autoconf require CHANGES file. Changes will appear in the NEWS file, and changes for developers will be in the ChangeLog. * AUTHORS 1.1, ChangeLog 1.1, Makefile.am 1.1, NEWS 1.1, README.CVS 1.1, configure.ac 1.1: Added for configure support 2004-07-02 haimcohen * examples/bddcalc/makefile 1.2: tokens.h was added to the 'clean' target as it is generated by yacc * examples/bddcalc/parser.y 1.2: Tokens were separated by spaces instead of commas to comply with POSIX standard. Patch was supplied by Alexandre Duret-Lutz 2004-07-01 haimcohen * examples/bddcalc/parser.hxx 1.2, examples/bddcalc/tokens.h 1.2: File removed since it did not have to be in CVS from the beginning - this file is generated by yacc. 2004-06-25 haimcohen * README 1.2: Change Haim Cohen´s Email to the one in Source Forge * src/depend.inf 1.1.1.1, src/makefile 1.1.1.1, src/tree.c 1.1.1.1: Initial import * src/depend.inf 1.1, src/makefile 1.1, src/tree.c 1.1: New file. * src/reorder.c 1.1.1.1: Initial import * src/reorder.c 1.1: New file. * src/prime.h 1.1.1.1: Initial import * src/prime.h 1.1: New file. * src/prime.c 1.1.1.1: Initial import * src/prime.c 1.1: New file. * src/kernel.c 1.1.1.1, src/kernel.h 1.1.1.1, src/pairs.c 1.1.1.1: Initial import * src/kernel.c 1.1, src/kernel.h 1.1, src/pairs.c 1.1: New file. * src/imatrix.c 1.1.1.1, src/imatrix.h 1.1.1.1: Initial import * src/imatrix.c 1.1, src/imatrix.h 1.1: New file. * src/fdd.c 1.1.1.1, src/fdd.h 1.1.1.1: Initial import * src/fdd.c 1.1, src/fdd.h 1.1: New file. * src/cppext.cxx 1.1.1.1: Initial import * src/cppext.cxx 1.1: New file. * src/bvec.c 1.1.1.1, src/bvec.h 1.1.1.1, src/cache.c 1.1.1.1, src/cache.h 1.1.1.1: Initial import * src/bvec.c 1.1, src/bvec.h 1.1, src/cache.c 1.1, src/cache.h 1.1: New file. * src/bddtest.cxx 1.1.1.1, src/bddtree.h 1.1.1.1: Initial import * src/bddtest.cxx 1.1, src/bddtree.h 1.1: New file. * src/bddop.c 1.1.1.1: Initial import * src/bddop.c 1.1: New file. * src/bddio.c 1.1.1.1: Initial import * src/bddio.c 1.1: New file. * src/bdd.h 1.1.1.1: Initial import * src/bdd.h 1.1: New file. * examples/bddcalc/examples/c3540.cal 1.1.1.1, examples/bddcalc/examples/c432.cal 1.1.1.1: Initial import * examples/bddcalc/examples/c3540.cal 1.1, examples/bddcalc/examples/c432.cal 1.1: New file. * examples/bddcalc/examples/c1355.cal 1.1.1.1, examples/bddcalc/examples/c499.cal 1.1.1.1: Initial import * examples/bddcalc/examples/c1355.cal 1.1, examples/bddcalc/examples/c499.cal 1.1: New file. * examples/bddcalc/examples/c1908.cal 1.1.1.1, examples/bddcalc/examples/c2670.cal 1.1.1.1, examples/bddcalc/examples/readme 1.1.1.1: Initial import * examples/bddcalc/examples/c1908.cal 1.1, examples/bddcalc/examples/c2670.cal 1.1, examples/bddcalc/examples/readme 1.1: New file. * examples/bddcalc/parser.hxx 1.1.1.1, examples/bddcalc/slist.h 1.1.1.1, examples/bddcalc/tokens.h 1.1.1.1: Initial import * examples/bddcalc/parser.hxx 1.1, examples/bddcalc/slist.h 1.1, examples/bddcalc/tokens.h 1.1: New file. * examples/bddcalc/parser.y 1.1.1.1, examples/bddcalc/readme 1.1.1.1: Initial import * examples/bddcalc/parser.y 1.1, examples/bddcalc/readme 1.1: New file. * examples/bddcalc/parser.h 1.1.1.1: Initial import * examples/bddcalc/parser.h 1.1: New file. * examples/adder/adder.cxx 1.1.1.1, examples/adder/makefile 1.1.1.1, examples/bddcalc/example.cal 1.1.1.1, examples/bddcalc/hashtbl.cxx 1.1.1.1, examples/bddcalc/hashtbl.h 1.1.1.1, examples/bddcalc/lexer.l 1.1.1.1, examples/bddcalc/makefile 1.1.1.1, examples/bddtest/bddtest.cxx 1.1.1.1, examples/bddtest/makefile 1.1.1.1, examples/cmilner/cmilner.c 1.1.1.1, examples/fdd/fdd.cxx 1.1.1.1, examples/fdd/makefile 1.1.1.1, examples/money/makefile 1.1.1.1, examples/money/money.cxx 1.1.1.1, examples/queen/makefile 1.1.1.1, examples/queen/queen.cxx 1.1.1.1, examples/solitare/makefile 1.1.1.1, examples/solitare/readme 1.1.1.1, examples/solitare/solitare.cxx 1.1.1.1: Initial import * examples/adder/adder.cxx 1.1, examples/adder/makefile 1.1, examples/bddcalc/example.cal 1.1, examples/bddcalc/hashtbl.cxx 1.1, examples/bddcalc/hashtbl.h 1.1, examples/bddcalc/lexer.l 1.1, examples/bddcalc/makefile 1.1, examples/bddtest/bddtest.cxx 1.1, examples/bddtest/makefile 1.1, examples/cmilner/cmilner.c 1.1, examples/fdd/fdd.cxx 1.1, examples/fdd/makefile 1.1, examples/money/makefile 1.1, examples/money/money.cxx 1.1, examples/queen/makefile 1.1, examples/queen/queen.cxx 1.1, examples/solitare/makefile 1.1, examples/solitare/readme 1.1, examples/solitare/solitare.cxx 1.1: New file. * doc/bddnotes.ps 1.1.1.1, doc/makefile 1.1.1.1, examples/cmilner/makefile 1.1.1.1, examples/cmilner/readme 1.1.1.1, examples/milner/makefile 1.1.1.1, examples/milner/milner.cxx 1.1.1.1, examples/milner/readme 1.1.1.1: Initial import * doc/bddnotes.ps 1.1, doc/makefile 1.1, examples/cmilner/makefile 1.1, examples/cmilner/readme 1.1, examples/milner/makefile 1.1, examples/milner/milner.cxx 1.1, examples/milner/readme 1.1: New file. * doc/buddy.ps 1.1.1.1: Initial import * doc/buddy.ps 1.1: New file. * CHANGES 1.1.1.1, README 1.1.1.1, config 1.1.1.1, makefile 1.1.1.1: Initial import * CHANGES 1.1, README 1.1, config 1.1, makefile 1.1: New file. buddy-2.4/NEWS0000644000076500001440000001740410100054264006645 ---------------------------------------------------------------------------- User visible changes to BuDDy ---------------------------------------------------------------------------- + means added code x means bugfix or changed code - means removed code VER 2.4 (July 2004) ------------------- + Using configure script for the build process. + Adding runregression script which runs examples and compare to expected results. VER 2.3 (June 2004) ------------------- + Nothing :-( This is just the first version in SourceForge, so it deserved its own number. VER 2.2 (november 2002) ----------------------- + Added bvec_ite() for calculating an if-then-else operation on a boolean vector. x Fixed some garbage collection problems introduced in version 2.1. VER 2.1 (march 2002) -------------------- + Added bdd_allsat() for calculating all possible variable assignments to a bdd. x Fixed some wrong garbage collection #defines in kernel.h. If you haven't experinced any problems using BuDDy, then this should not be an issue. No bug reports reported for this one - found by code inspection thanx to Nicola Soranzo. x Fixed some copy paste errors in the prime number calculation. This should not be an issue. No bug reports reported for this one - found by code inspection thanx to Nicola Soranzo. VER 2.0 (march 2001) -------------------- x Change the copyright notice to a more acceptable form. x Speedup changes in bdd_support() x Rewrote all the prime number calculations in order to get the copyright right. VER 1.9 (august 2000) --------------------- + Added bdd_pathcount + Added bdd_anodecount + Added bdd_buildcube, bdd_ibuildcube x Bugfix in bdd_satcountset and bdd_satcountlnset. This corrects a bug introduced in version 1.8. x bug fixes in bdd_constraint and bdd_simplify. Both did calculate a correct cofactor, but not necessarily a minimal one. Changed the name of bdd_constraint to bdd_constrain at the same time. x bug fix in memory allocation for bdd_addvarblock x Changed functions in bddop.c in order to avoid some compiler warnings. x Makefile also installs "fdd.h" and "bvec.h". x Small #include fix in N-Queen example. x Minor changes in the documentation. VER 1.8 (may 2000) ------------------ + Bugfix in the kernel: canonicity was not unfortunately not guaranteed on certain compilers (at least the microsoft visual C compiler) due to a signed/unsigned bug in kernel.c (and actually not microsofts fault). + Speedups in the reordering code. + Added the use of an interaction matrix for variable swapping. + Added bdd_satoneset + Added bdd_getallocnum + Added bdd_setvarorder + Added bdd_unique, bdd_appuni. + Added bvec_shlfixed, bvec_shrfixed and changed the prototype for bvec_shl and bvec_shr. + Added bvec_mulfixed, bdd_divfixed, bdd_div and changed the prototype for bvec_mul. + Added bdd_printstat + Added new examples: solitare and money + Forces cache tables to prime-number size. + Added bdd_clear_error() if anybody needs that. + Added reorder method WIN3 and WIN3ITE x Small change in queen.cxx - with a huge impact on runtime! x Bugfix in reordering. In some cases reordering would go on forever; first reroder, then retry, then reorder again without resize etc. always reordering in the same operation. Now at most one reordering is allowed for each bdd operation. x Bugfix in C++ printing in Dot format. Wrote zero for one and vice versa. x Bugfix in the garbage collector. If bdd_setmaxincrease was used, then BuDDy would call bdd_error prematurely. Not a major bug, but annoying. x Bugfix in bdd_load. x Speedup in bdd_satcountset and bdd_satcountlnset x Updates to the docs. x Updates to the makefiles VER 1.7 (september 1999) ------------------------ + Added support for boolean vector operations used in integer arithmetics + Split "bdd.h" into "bdd.h", "fdd.h" and "bvec.h" + Added bdd_cachestats + Added bdd_and, bdd_or, bdd_xor, bdd_impl, bdd_biimpl (wrappers for bdd_apply). + Added a BDD calculator for combinatorial circuits as an example. + Added an example showing the use of the FDD interface. + Added bdd_autoreorder_times, bdd_getreorder_method, bdd_getreorder_times, bdd_reorder_probe, bdd_enable_reorder, bdd_disable_reorder, bdd_var2level, bdd_level2var, bdd_reorder_gain, bdd_swapvar + Added bdd_file_hook, bdd_strm_hook, fdd_file_hook, fdd_strm_hook + Added support for dynamic resizing of the operator caches with the function bdd_setcacheratio. + Added more documentation. x Bugfix in reordering code. This would appear when recursive variable blocks were defined (blocks with sub-blocks). x Speedup changes in the variable reordering code x The automatic reordering threshhold function has been changed x Automatic reordering is now interrupting and restarts bdd operations x Prototype for bdd_reorder_hook changed. x Printing of reorder information (verbose level > 0) is changed. x The threshold for stopping of the iterative reordering methods has been changed. The reordering now continues until no progress is done at all (before it would stop when less than 5% where gained). x Added a few sanity checks to many of the functions. x Bugfix (parameter checking) in fdd_ithvar. - bdd_varlevel removed (use bdd_var2level and bdd_level2var). VER 1.6 (november 1998) ----------------------- + Added bdd_resetpair + Added bdd_satcountset, bdd_satcountlnset + Added macro bdd_relprod + Added fdd_overlapdomain + Added fdd_domain x Fixed a bug in bdd_setvarnum and bdd_extvarnum. x Fixed a bug in bdd_newpair() which would give problems with reordering. x Speedup changes in bdd_exist, bdd_forall, bdd_appex, bdd_appall x Speedup changes in bdd_restrict x Changed bdd_gbc_hook to include both pre and post garbage collection. VER 1.5 (september 1998) ------------------------ + Added bdd_cofactor + Added and fixed some error checks in fdd.c x Fixed a bug in bdd_setvarnum(). VER 1.4 (july 1998) ------------------- The package just got a name: BuDDy + Added functions bdd_compose, bdd_veccompose, bdd_ite. + Added functions bdd_setbddpair, bdd_setbddpairs. + Added functions bdd_var, bdd_low, bdd_high. + Added technical documentation in docs/tech.txt x Overloaded C++ functions are not used any more. This mainly changes the name of the printing functions in C++. x Changed datatype names (You'll hate me for this one): BddPair -> bddPair BddStat -> bddStat BddGbcStat -> bddGbcStat x Added slightly more documentation. x Some internal changes to the code - should not be visible to users. VER 1.3 (june 1998) ------------------- x Fixed a few serious bugs in the reordering code VER 1.2 (june 1998) ------------------- + Added support for dynamic variable reordering + Added reordering handler (bdd_reorder_hook) + More added to the docs x Changed the event handlers (bdd_xxx_hook) VER 1.1 (april 1998) -------------------- + Added bdd_varprofile + Added fdd_scanset + Mucho better documentation. + Added Henrik Reif Andersen's BDD notes to the documentation. + Added BDD_REORDER_RANDOM for test purposes (usefull for others?) x Fixed a bug in bdd_appex and bdd_appall. x Fixed a bug in bdd_simplify. x Speed fixup to fdd_extdomain x Lots of small (insignificant?) bug fixes in fdd.c. x bdd_load/save updated to take reordering into account. x Generalized bdd_restrict to use a BDD variable set. x Fixed the identifiers for the operator caches. x The math functions log1p and pow2 has been removed as they didn't exist on some systems. The same applies to M_LN2. x New file structure and makefiles. - Removed bdd_break, bdd_restart1 buddy-2.4/CHANGES0000644000076500001440000000000010074025500007122 buddy-2.4/src/0000777000076500001440000000000010100060506007007 5buddy-2.4/src/bdd.h0000664000076500001440000006616610067023401007653 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/bdd.h,v 1.1.1.1 2004/06/25 13:22:09 haimcohen Exp $ FILE: bdd.h DESCR: C,C++ User interface for the BDD package AUTH: Jorn Lind DATE: (C) feb 1997 *************************************************************************/ #ifndef _BDD_H #define _BDD_H /* Allow this headerfile to define C++ constructs if requested */ #ifdef __cplusplus #define CPLUSPLUS #endif #include /*=== Defined operators for apply calls ================================*/ #define bddop_and 0 #define bddop_xor 1 #define bddop_or 2 #define bddop_nand 3 #define bddop_nor 4 #define bddop_imp 5 #define bddop_biimp 6 #define bddop_diff 7 #define bddop_less 8 #define bddop_invimp 9 /* Should *not* be used in bdd_apply calls !!! */ #define bddop_not 10 #define bddop_simplify 11 /*=== User BDD types ===================================================*/ typedef int BDD; #ifndef CPLUSPLUS typedef BDD bdd; #endif /* CPLUSPLUS */ typedef struct s_bddPair { BDD *result; int last; int id; struct s_bddPair *next; } bddPair; /*=== Status information ===============================================*/ /* NAME {* bddStat *} SECTION {* kernel *} SHORT {* Status information about the bdd package *} PROTO {* typedef struct s_bddStat { long int produced; int nodenum; int maxnodenum; int freenodes; int minfreenodes; int varnum; int cachesize; int gbcnum; } bddStat; *} DESCR {* The fields are \\[\baselineskip] \begin{tabular}{lp{10cm}} {\tt produced} & total number of new nodes ever produced \\ {\tt nodenum} & currently allocated number of bdd nodes \\ {\tt maxnodenum} & user defined maximum number of bdd nodes \\ {\tt freenodes} & number of currently free nodes \\ {\tt minfreenodes} & minimum number of nodes that should be left after a garbage collection. \\ {\tt varnum} & number of defined bdd variables \\ {\tt cachesize} & number of entries in the internal caches \\ {\tt gbcnum} & number of garbage collections done until now \end{tabular} *} ALSO {* bdd\_stats *} */ typedef struct s_bddStat { long int produced; int nodenum; int maxnodenum; int freenodes; int minfreenodes; int varnum; int cachesize; int gbcnum; } bddStat; /* NAME {* bddGbcStat *} SECTION {* kernel *} SHORT {* Status information about garbage collections *} PROTO {* typedef struct s_bddGbcStat { int nodes; int freenodes; long time; long sumtime; int num; } bddGbcStat; *} DESCR {* The fields are \\[\baselineskip] \begin{tabular}{ll} {\tt nodes} & Total number of allocated nodes in the nodetable \\ {\tt freenodes} & Number of free nodes in the nodetable \\ {\tt time} & Time used for garbage collection this time \\ {\tt sumtime} & Total time used for garbage collection \\ {\tt num} & number of garbage collections done until now \end{tabular} *} ALSO {* bdd\_gbc\_hook *} */ typedef struct s_bddGbcStat { int nodes; int freenodes; long time; long sumtime; int num; } bddGbcStat; /* NAME {* bddCacheStat *} SECTION {* kernel *} SHORT {* Status information about cache usage *} PROTO {* typedef struct s_bddCacheStat { long unsigned int uniqueAccess; long unsigned int uniqueChain; long unsigned int uniqueHit; long unsigned int uniqueMiss; long unsigned int opHit; long unsigned int opMiss; long unsigned int swapCount; } bddCacheStat; *} DESCR {* The fields are \\[\baselineskip] \begin{tabular}{ll} {\bf Name} & {\bf Number of } \\ uniqueAccess & accesses to the unique node table \\ uniqueChain & iterations through the cache chains in the unique node table\\ uniqueHit & entries actually found in the the unique node table \\ uniqueMiss & entries not found in the the unique node table \\ opHit & entries found in the operator caches \\ opMiss & entries not found in the operator caches \\ swapCount & number of variable swaps in reordering \\ \end{tabular} *} ALSO {* bdd\_cachestats *} */ typedef struct s_bddCacheStat { long unsigned int uniqueAccess; long unsigned int uniqueChain; long unsigned int uniqueHit; long unsigned int uniqueMiss; long unsigned int opHit; long unsigned int opMiss; long unsigned int swapCount; } bddCacheStat; /*=== BDD interface prototypes =========================================*/ /* NAME {* bdd\_relprod *} SECTION {* operator *} SHORT {* relational product *} PROTO {* #define bdd_relprod(a,b,var) bdd_appex(a,b,bddop_and,var) *} DESCR {* Calculates the relational product of {\tt a} and {\tt b} as {\tt a AND b} with the variables in {\tt var} quantified out afterwards. *} RETURN {* The relational product or {\tt bddfalse} on errors. *} ALSO {* bdd\_appex *} */ #define bdd_relprod(a,b,var) bdd_appex((a),(b),bddop_and,(var)) /* In file "kernel.c" */ #ifdef CPLUSPLUS extern "C" { #endif typedef void (*bddinthandler)(int); typedef void (*bddgbchandler)(int,bddGbcStat*); typedef void (*bdd2inthandler)(int,int); typedef int (*bddsizehandler)(void); typedef void (*bddfilehandler)(FILE *, int); typedef void (*bddallsathandler)(char*, int); extern bddinthandler bdd_error_hook(bddinthandler); extern bddgbchandler bdd_gbc_hook(bddgbchandler); extern bdd2inthandler bdd_resize_hook(bdd2inthandler); extern bddinthandler bdd_reorder_hook(bddinthandler); extern bddfilehandler bdd_file_hook(bddfilehandler); extern int bdd_init(int, int); extern void bdd_done(void); extern int bdd_setvarnum(int); extern int bdd_extvarnum(int); extern int bdd_isrunning(void); extern int bdd_setmaxnodenum(int); extern int bdd_setmaxincrease(int); extern int bdd_setminfreenodes(int); extern int bdd_getnodenum(void); extern int bdd_getallocnum(void); extern char* bdd_versionstr(void); extern int bdd_versionnum(void); extern void bdd_stats(bddStat *); extern void bdd_cachestats(bddCacheStat *); extern void bdd_fprintstat(FILE *); extern void bdd_printstat(void); extern void bdd_default_gbchandler(int, bddGbcStat *); extern void bdd_default_errhandler(int); extern const char *bdd_errstring(int); extern void bdd_clear_error(void); #ifndef CPLUSPLUS extern BDD bdd_true(void); extern BDD bdd_false(void); #endif extern int bdd_varnum(void); extern BDD bdd_ithvar(int); extern BDD bdd_nithvar(int); extern int bdd_var(BDD); extern BDD bdd_low(BDD); extern BDD bdd_high(BDD); extern int bdd_varlevel(int); extern BDD bdd_addref(BDD); extern BDD bdd_delref(BDD); extern void bdd_gbc(void); extern int bdd_scanset(BDD, int**, int*); extern BDD bdd_makeset(int *, int); extern bddPair* bdd_newpair(void); extern int bdd_setpair(bddPair*, int, int); extern int bdd_setpairs(bddPair*, int*, int*, int); extern int bdd_setbddpair(bddPair*, int, BDD); extern int bdd_setbddpairs(bddPair*, int*, BDD*, int); extern void bdd_resetpair(bddPair *); extern void bdd_freepair(bddPair*); /* In bddop.c */ extern int bdd_setcacheratio(int); extern BDD bdd_buildcube(int, int, BDD *); extern BDD bdd_ibuildcube(int, int, int *); extern BDD bdd_not(BDD); extern BDD bdd_apply(BDD, BDD, int); extern BDD bdd_and(BDD, BDD); extern BDD bdd_or(BDD, BDD); extern BDD bdd_xor(BDD, BDD); extern BDD bdd_imp(BDD, BDD); extern BDD bdd_biimp(BDD, BDD); extern BDD bdd_ite(BDD, BDD, BDD); extern BDD bdd_restrict(BDD, BDD); extern BDD bdd_constrain(BDD, BDD); extern BDD bdd_replace(BDD, bddPair*); extern BDD bdd_compose(BDD, BDD, BDD); extern BDD bdd_veccompose(BDD, bddPair*); extern BDD bdd_simplify(BDD, BDD); extern BDD bdd_exist(BDD, BDD); extern BDD bdd_forall(BDD, BDD); extern BDD bdd_unique(BDD, BDD); extern BDD bdd_appex(BDD, BDD, int, BDD); extern BDD bdd_appall(BDD, BDD, int, BDD); extern BDD bdd_appuni(BDD, BDD, int, BDD); extern BDD bdd_support(BDD); extern BDD bdd_satone(BDD); extern BDD bdd_satoneset(BDD, BDD, BDD); extern BDD bdd_fullsatone(BDD); extern void bdd_allsat(BDD r, bddallsathandler handler); extern double bdd_satcount(BDD); extern double bdd_satcountset(BDD, BDD); extern double bdd_satcountln(BDD); extern double bdd_satcountlnset(BDD, BDD); extern int bdd_nodecount(BDD); extern int bdd_anodecount(BDD *, int); extern int* bdd_varprofile(BDD); extern double bdd_pathcount(BDD); /* In file "bddio.c" */ extern void bdd_printall(void); extern void bdd_fprintall(FILE *); extern void bdd_fprinttable(FILE *, BDD); extern void bdd_printtable(BDD); extern void bdd_fprintset(FILE *, BDD); extern void bdd_printset(BDD); extern int bdd_fnprintdot(char *, BDD); extern void bdd_fprintdot(FILE *, BDD); extern void bdd_printdot(BDD); extern int bdd_fnsave(char *, BDD); extern int bdd_save(FILE *, BDD); extern int bdd_fnload(char *, BDD *); extern int bdd_load(FILE *ifile, BDD *); /* In file reorder.c */ extern int bdd_swapvar(int v1, int v2); extern void bdd_default_reohandler(int); extern void bdd_reorder(int); extern int bdd_reorder_gain(void); extern bddsizehandler bdd_reorder_probe(bddsizehandler); extern void bdd_clrvarblocks(void); extern int bdd_addvarblock(BDD, int); extern int bdd_intaddvarblock(int, int, int); extern void bdd_varblockall(void); extern bddfilehandler bdd_blockfile_hook(bddfilehandler); extern int bdd_autoreorder(int); extern int bdd_autoreorder_times(int, int); extern int bdd_var2level(int); extern int bdd_level2var(int); extern int bdd_getreorder_times(void); extern int bdd_getreorder_method(void); extern void bdd_enable_reorder(void); extern void bdd_disable_reorder(void); extern int bdd_reorder_verbose(int); extern void bdd_setvarorder(int *); extern void bdd_printorder(void); extern void bdd_fprintorder(FILE *); #ifdef CPLUSPLUS } #endif /*=== BDD constants ====================================================*/ #ifndef CPLUSPLUS extern const BDD bddfalse; extern const BDD bddtrue; #endif /* CPLUSPLUS */ /*=== Reordering algorithms ============================================*/ #define BDD_REORDER_NONE 0 #define BDD_REORDER_WIN2 1 #define BDD_REORDER_WIN2ITE 2 #define BDD_REORDER_SIFT 3 #define BDD_REORDER_SIFTITE 4 #define BDD_REORDER_WIN3 5 #define BDD_REORDER_WIN3ITE 6 #define BDD_REORDER_RANDOM 7 #define BDD_REORDER_FREE 0 #define BDD_REORDER_FIXED 1 /*=== Error codes ======================================================*/ #define BDD_MEMORY (-1) /* Out of memory */ #define BDD_VAR (-2) /* Unknown variable */ #define BDD_RANGE (-3) /* Variable value out of range (not in domain) */ #define BDD_DEREF (-4) /* Removing external reference to unknown node */ #define BDD_RUNNING (-5) /* Called bdd_init() twice whithout bdd_done() */ #define BDD_FILE (-6) /* Some file operation failed */ #define BDD_FORMAT (-7) /* Incorrect file format */ #define BDD_ORDER (-8) /* Vars. not in order for vector based functions */ #define BDD_BREAK (-9) /* User called break */ #define BDD_VARNUM (-10) /* Different number of vars. for vector pair */ #define BDD_NODES (-11) /* Tried to set max. number of nodes to be fewer */ /* than there already has been allocated */ #define BDD_OP (-12) /* Unknown operator */ #define BDD_VARSET (-13) /* Illegal variable set */ #define BDD_VARBLK (-14) /* Bad variable block operation */ #define BDD_DECVNUM (-15) /* Trying to decrease the number of variables */ #define BDD_REPLACE (-16) /* Replacing to already existing variables */ #define BDD_NODENUM (-17) /* Number of nodes reached user defined maximum */ #define BDD_ILLBDD (-18) /* Illegal bdd argument */ #define BDD_SIZE (-19) /* Illegal size argument */ #define BVEC_SIZE (-20) /* Mismatch in bitvector size */ #define BVEC_SHIFT (-21) /* Illegal shift-left/right parameter */ #define BVEC_DIVZERO (-22) /* Division by zero */ #define BDD_ERRNUM 24 /************************************************************************* If this file is included from a C++ compiler then the following classes, wrappers and hacks are supplied. *************************************************************************/ #ifdef CPLUSPLUS #include /*=== User BDD class ===================================================*/ class bvec; class bdd { public: bdd(void) { root=0; } bdd(const bdd &r) { bdd_addref(root=r.root); } ~bdd(void) { bdd_delref(root); } int id(void) const; bdd operator=(const bdd &r); bdd operator&(const bdd &r) const; bdd operator&=(const bdd &r); bdd operator^(const bdd &r) const; bdd operator^=(const bdd &r); bdd operator|(const bdd &r) const; bdd operator|=(const bdd &r); bdd operator!(void) const; bdd operator>>(const bdd &r) const; bdd operator>>=(const bdd &r); bdd operator-(const bdd &r) const; bdd operator-=(const bdd &r); bdd operator>(const bdd &r) const; bdd operator<(const bdd &r) const; bdd operator<<(const bdd &r) const; bdd operator<<=(const bdd &r); int operator==(const bdd &r) const; int operator!=(const bdd &r) const; private: BDD root; bdd(BDD r) { bdd_addref(root=r); } bdd operator=(BDD r); friend int bdd_init(int, int); friend int bdd_setvarnum(int); friend bdd bdd_true(void); friend bdd bdd_false(void); friend bdd bdd_ithvarpp(int); friend bdd bdd_nithvarpp(int); friend int bdd_var(const bdd &); friend bdd bdd_low(const bdd &); friend bdd bdd_high(const bdd &); friend int bdd_scanset(const bdd &, int *&, int &); friend bdd bdd_makesetpp(int *, int); friend int bdd_setbddpair(bddPair*, int, const bdd &); friend int bdd_setbddpairs(bddPair*, int*, const bdd *, int); friend bdd bdd_buildcube(int, int, const bdd *); friend bdd bdd_ibuildcubepp(int, int, int *); friend bdd bdd_not(const bdd &); friend bdd bdd_simplify(const bdd &, const bdd &); friend bdd bdd_apply(const bdd &, const bdd &, int); friend bdd bdd_and(const bdd &, const bdd &); friend bdd bdd_or(const bdd &, const bdd &); friend bdd bdd_xor(const bdd &, const bdd &); friend bdd bdd_imp(const bdd &, const bdd &); friend bdd bdd_biimp(const bdd &, const bdd &); friend bdd bdd_ite(const bdd &, const bdd &, const bdd &); friend bdd bdd_restrict(const bdd &, const bdd &); friend bdd bdd_constrain(const bdd &, const bdd &); friend bdd bdd_exist(const bdd &, const bdd &); friend bdd bdd_forall(const bdd &, const bdd &); friend bdd bdd_unique(const bdd &, const bdd &); friend bdd bdd_appex(const bdd &, const bdd &, int, const bdd &); friend bdd bdd_appall(const bdd &, const bdd &, int, const bdd &); friend bdd bdd_appuni(const bdd &, const bdd &, int, const bdd &); friend bdd bdd_replace(const bdd &, bddPair*); friend bdd bdd_compose(const bdd &, const bdd &, int); friend bdd bdd_veccompose(const bdd &, bddPair*); friend bdd bdd_support(const bdd &); friend bdd bdd_satone(const bdd &); friend bdd bdd_satoneset(const bdd &, const bdd &, const bdd &); friend bdd bdd_fullsatone(const bdd &); friend void bdd_allsat(const bdd &r, bddallsathandler handler); friend double bdd_satcount(const bdd &); friend double bdd_satcountset(const bdd &, const bdd &); friend double bdd_satcountln(const bdd &); friend double bdd_satcountlnset(const bdd &, const bdd &); friend int bdd_nodecount(const bdd &); friend int bdd_anodecountpp(const bdd *, int); friend int* bdd_varprofile(const bdd &); friend double bdd_pathcount(const bdd &); friend void bdd_fprinttable(FILE *, const bdd &); friend void bdd_printtable(const bdd &); friend void bdd_fprintset(FILE *, const bdd &); friend void bdd_printset(const bdd &); friend void bdd_printdot(const bdd &); friend int bdd_fnprintdot(char*, const bdd &); friend void bdd_fprintdot(FILE*, const bdd &); friend std::ostream &operator<<(std::ostream &, const bdd &); friend int bdd_fnsave(char*, const bdd &); friend int bdd_save(FILE*, const bdd &); friend int bdd_fnload(char*, bdd &); friend int bdd_load(FILE*, bdd &); friend bdd fdd_ithvarpp(int, int); friend bdd fdd_ithsetpp(int); friend bdd fdd_domainpp(int); friend int fdd_scanvar(const bdd &, int); friend int* fdd_scanallvar(const bdd &); friend bdd fdd_equalspp(int, int); friend void fdd_printset(const bdd &); friend void fdd_fprintset(FILE*, const bdd &); friend bdd fdd_makesetpp(int*, int); friend int fdd_scanset(const bdd &, int *&, int &); friend int bdd_addvarblock(const bdd &, int); friend class bvec; friend bvec bvec_ite(const bdd& a, const bvec& b, const bvec& c); friend bvec bvec_shlfixed(const bvec &e, int pos, const bdd &c); friend bvec bvec_shl(const bvec &left, const bvec &right, const bdd &c); friend bvec bvec_shrfixed(const bvec &e, int pos, const bdd &c); friend bvec bvec_shr(const bvec &left, const bvec &right, const bdd &c); friend bdd bvec_lth(const bvec &left, const bvec &right); friend bdd bvec_lte(const bvec &left, const bvec &right); friend bdd bvec_gth(const bvec &left, const bvec &right); friend bdd bvec_gte(const bvec &left, const bvec &right); friend bdd bvec_equ(const bvec &left, const bvec &right); friend bdd bvec_neq(const bvec &left, const bvec &right); }; /*=== BDD constants ====================================================*/ extern const bdd bddfalsepp; extern const bdd bddtruepp; #define bddtrue bddtruepp #define bddfalse bddfalsepp /*=== C++ interface ====================================================*/ extern int bdd_cpp_init(int, int); inline void bdd_stats(bddStat& s) { bdd_stats(&s); } inline bdd bdd_ithvarpp(int v) { return bdd_ithvar(v); } inline bdd bdd_nithvarpp(int v) { return bdd_nithvar(v); } inline int bdd_var(const bdd &r) { return bdd_var(r.root); } inline bdd bdd_low(const bdd &r) { return bdd_low(r.root); } inline bdd bdd_high(const bdd &r) { return bdd_high(r.root); } inline int bdd_scanset(const bdd &r, int *&v, int &n) { return bdd_scanset(r.root, &v, &n); } inline bdd bdd_makesetpp(int *v, int n) { return bdd(bdd_makeset(v,n)); } inline int bdd_setbddpair(bddPair *p, int ov, const bdd &nv) { return bdd_setbddpair(p,ov,nv.root); } /* In bddop.c */ inline bdd bdd_replace(const bdd &r, bddPair *p) { return bdd_replace(r.root, p); } inline bdd bdd_compose(const bdd &f, const bdd &g, int v) { return bdd_compose(f.root, g.root, v); } inline bdd bdd_veccompose(const bdd &f, bddPair *p) { return bdd_veccompose(f.root, p); } inline bdd bdd_restrict(const bdd &r, const bdd &var) { return bdd_restrict(r.root, var.root); } inline bdd bdd_constrain(const bdd &f, const bdd &c) { return bdd_constrain(f.root, c.root); } inline bdd bdd_simplify(const bdd &d, const bdd &b) { return bdd_simplify(d.root, b.root); } inline bdd bdd_ibuildcubepp(int v, int w, int *a) { return bdd_ibuildcube(v,w,a); } inline bdd bdd_not(const bdd &r) { return bdd_not(r.root); } inline bdd bdd_apply(const bdd &l, const bdd &r, int op) { return bdd_apply(l.root, r.root, op); } inline bdd bdd_and(const bdd &l, const bdd &r) { return bdd_apply(l.root, r.root, bddop_and); } inline bdd bdd_or(const bdd &l, const bdd &r) { return bdd_apply(l.root, r.root, bddop_or); } inline bdd bdd_xor(const bdd &l, const bdd &r) { return bdd_apply(l.root, r.root, bddop_xor); } inline bdd bdd_imp(const bdd &l, const bdd &r) { return bdd_apply(l.root, r.root, bddop_imp); } inline bdd bdd_biimp(const bdd &l, const bdd &r) { return bdd_apply(l.root, r.root, bddop_biimp); } inline bdd bdd_ite(const bdd &f, const bdd &g, const bdd &h) { return bdd_ite(f.root, g.root, h.root); } inline bdd bdd_exist(const bdd &r, const bdd &var) { return bdd_exist(r.root, var.root); } inline bdd bdd_forall(const bdd &r, const bdd &var) { return bdd_forall(r.root, var.root); } inline bdd bdd_unique(const bdd &r, const bdd &var) { return bdd_unique(r.root, var.root); } inline bdd bdd_appex(const bdd &l, const bdd &r, int op, const bdd &var) { return bdd_appex(l.root, r.root, op, var.root); } inline bdd bdd_appall(const bdd &l, const bdd &r, int op, const bdd &var) { return bdd_appall(l.root, r.root, op, var.root); } inline bdd bdd_appuni(const bdd &l, const bdd &r, int op, const bdd &var) { return bdd_appuni(l.root, r.root, op, var.root); } inline bdd bdd_support(const bdd &r) { return bdd_support(r.root); } inline bdd bdd_satone(const bdd &r) { return bdd_satone(r.root); } inline bdd bdd_satoneset(const bdd &r, const bdd &var, const bdd &pol) { return bdd_satoneset(r.root, var.root, pol.root); } inline bdd bdd_fullsatone(const bdd &r) { return bdd_fullsatone(r.root); } inline void bdd_allsat(const bdd &r, bddallsathandler handler) { bdd_allsat(r.root, handler); } inline double bdd_satcount(const bdd &r) { return bdd_satcount(r.root); } inline double bdd_satcountset(const bdd &r, const bdd &varset) { return bdd_satcountset(r.root, varset.root); } inline double bdd_satcountln(const bdd &r) { return bdd_satcountln(r.root); } inline double bdd_satcountlnset(const bdd &r, const bdd &varset) { return bdd_satcountlnset(r.root, varset.root); } inline int bdd_nodecount(const bdd &r) { return bdd_nodecount(r.root); } inline int* bdd_varprofile(const bdd &r) { return bdd_varprofile(r.root); } inline double bdd_pathcount(const bdd &r) { return bdd_pathcount(r.root); } /* I/O extensions */ inline void bdd_fprinttable(FILE *file, const bdd &r) { bdd_fprinttable(file, r.root); } inline void bdd_printtable(const bdd &r) { bdd_printtable(r.root); } inline void bdd_fprintset(FILE *file, const bdd &r) { bdd_fprintset(file, r.root); } inline void bdd_printset(const bdd &r) { bdd_printset(r.root); } inline void bdd_printdot(const bdd &r) { bdd_printdot(r.root); } inline void bdd_fprintdot(FILE* ofile, const bdd &r) { bdd_fprintdot(ofile, r.root); } inline int bdd_fnprintdot(char* fname, const bdd &r) { return bdd_fnprintdot(fname, r.root); } inline int bdd_fnsave(char *fname, const bdd &r) { return bdd_fnsave(fname, r.root); } inline int bdd_save(FILE *ofile, const bdd &r) { return bdd_save(ofile, r.root); } inline int bdd_fnload(char *fname, bdd &r) { int lr,e; e=bdd_fnload(fname, &lr); r=bdd(lr); return e; } inline int bdd_load(FILE *ifile, bdd &r) { int lr,e; e=bdd_load(ifile, &lr); r=bdd(lr); return e; } inline int bdd_addvarblock(const bdd &v, int f) { return bdd_addvarblock(v.root, f); } /* Hack to allow for overloading */ #define bdd_init bdd_cpp_init #define bdd_ithvar bdd_ithvarpp #define bdd_nithvar bdd_nithvarpp #define bdd_makeset bdd_makesetpp #define bdd_ibuildcube bdd_ibuildcubepp #define bdd_anodecount bdd_anodecountpp /*=== Inline C++ functions =============================================*/ inline int bdd::id(void) const { return root; } inline bdd bdd::operator&(const bdd &r) const { return bdd_apply(*this,r,bddop_and); } inline bdd bdd::operator&=(const bdd &r) { return (*this=bdd_apply(*this,r,bddop_and)); } inline bdd bdd::operator^(const bdd &r) const { return bdd_apply(*this,r,bddop_xor); } inline bdd bdd::operator^=(const bdd &r) { return (*this=bdd_apply(*this,r,bddop_xor)); } inline bdd bdd::operator|(const bdd &r) const { return bdd_apply(*this,r,bddop_or); } inline bdd bdd::operator|=(const bdd &r) { return (*this=bdd_apply(*this,r,bddop_or)); } inline bdd bdd::operator!(void) const { return bdd_not(*this);} inline bdd bdd::operator>>(const bdd &r) const { return bdd_apply(*this,r,bddop_imp); } inline bdd bdd::operator>>=(const bdd &r) { return (*this=bdd_apply(*this,r,bddop_imp)); } inline bdd bdd::operator-(const bdd &r) const { return bdd_apply(*this,r,bddop_diff); } inline bdd bdd::operator-=(const bdd &r) { return (*this=bdd_apply(*this,r,bddop_diff)); } inline bdd bdd::operator>(const bdd &r) const { return bdd_apply(*this,r,bddop_diff); } inline bdd bdd::operator<(const bdd &r) const { return bdd_apply(*this,r,bddop_less); } inline bdd bdd::operator<<(const bdd &r) const { return bdd_apply(*this,r,bddop_invimp); } inline bdd bdd::operator<<=(const bdd &r) { return (*this=bdd_apply(*this,r,bddop_invimp)); } inline int bdd::operator==(const bdd &r) const { return r.root==root; } inline int bdd::operator!=(const bdd &r) const { return r.root!=root; } inline bdd bdd_true(void) { return 1; } inline bdd bdd_false(void) { return 0; } /*=== Iostream printing ================================================*/ class bdd_ioformat { public: bdd_ioformat(int f) { format=f; } private: bdd_ioformat(void) { } int format; static int curformat; friend std::ostream &operator<<(std::ostream &, const bdd_ioformat &); friend std::ostream &operator<<(std::ostream &, const bdd &); }; std::ostream &operator<<(std::ostream &, const bdd &); std::ostream &operator<<(std::ostream &, const bdd_ioformat &); extern bdd_ioformat bddset; extern bdd_ioformat bddtable; extern bdd_ioformat bdddot; extern bdd_ioformat bddall; extern bdd_ioformat fddset; typedef void (*bddstrmhandler)(std::ostream &, int); extern bddstrmhandler bdd_strm_hook(bddstrmhandler); #endif /* CPLUSPLUS */ #endif /* _BDD_H */ /* EOF */ buddy-2.4/src/fdd.h0000664000076500001440000001327710067023440007655 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/fdd.h,v 1.1.1.1 2004/06/25 13:22:40 haimcohen Exp $ FILE: fdd.h DESCR: Finite domain data with BDDs AUTH: Jorn Lind DATE: (C) february 1999 *************************************************************************/ #ifndef _FDD_H #define _FDD_H #include "bdd.h" #ifdef CPLUSPLUS extern "C" { #endif /* In file fdd.c */ extern int fdd_extdomain(int*, int); extern int fdd_overlapdomain(int, int); extern void fdd_clearall(void); extern int fdd_domainnum(void); extern int fdd_domainsize(int); extern int fdd_varnum(int); extern int* fdd_vars(int); extern BDD fdd_ithvar(int, int); extern int fdd_scanvar(BDD, int); extern int* fdd_scanallvar(BDD); extern BDD fdd_ithset(int); extern BDD fdd_domain(int); extern BDD fdd_equals(int, int); extern bddfilehandler fdd_file_hook(bddfilehandler); #ifdef CPLUSPLUS extern bddstrmhandler fdd_strm_hook(bddstrmhandler); #endif extern void fdd_printset(BDD); extern void fdd_fprintset(FILE*, BDD); extern int fdd_scanset(BDD, int**, int*); extern BDD fdd_makeset(int*, int); extern int fdd_intaddvarblock(int, int, int); extern int fdd_setpair(bddPair*, int, int); extern int fdd_setpairs(bddPair*, int*, int*, int); #ifdef CPLUSPLUS } #endif /************************************************************************* If this file is included from a C++ compiler then the following classes, wrappers and hacks are supplied. *************************************************************************/ #ifdef CPLUSPLUS /* FDD extensions */ inline bdd fdd_ithvarpp(int var, int val) { return fdd_ithvar(var, val); } inline bdd fdd_ithsetpp(int var) { return fdd_ithset(var); } inline bdd fdd_domainpp(int var) { return fdd_domain(var); } inline int fdd_scanvar(const bdd &r, int var) { return fdd_scanvar(r.root, var); } inline int* fdd_scanallvar(const bdd &r) { return fdd_scanallvar(r.root); } inline bdd fdd_equalspp(int left, int right) { return fdd_equals(left, right); } inline void fdd_printset(const bdd &r) { fdd_printset(r.root); } inline void fdd_fprintset(FILE* ofile, const bdd &r) { fdd_fprintset(ofile, r.root); } inline int fdd_scanset(const bdd &r, int *&v, int &n) { return fdd_scanset(r.root, &v, &n); } inline bdd fdd_makesetpp(int *v, int n) { return fdd_makeset(v,n); } #if 0 inline bdd* fdd_conpp(int bitnum, int var) { return fdd_transfer( bitnum, fdd_con(bitnum, var) ); } inline bdd* fdd_varpp(int bitnum, int var) { return fdd_transfer( bitnum, fdd_var(bitnum, var) ); } extern int fdd_isconst(int bitnum, bdd *e); extern int fdd_val(int bitnum, bdd *e); inline bdd* fdd_add(int bitnum, bdd *left, bdd *right) { return fdd_termopr(bitnum, left, right,bdd::fddAdd); } inline bdd* fdd_sub(int bitnum, bdd *left, bdd *right) { return fdd_termopr(bitnum, left, right,bdd::fddSub); } inline bdd* fdd_shl(int bitnum, bdd *expr, bdd c) { return fdd_shift(bitnum, expr, c, bdd::fddShl); } inline bdd* fdd_shr(int bitnum, bdd *expr, bdd c) { return fdd_shift(bitnum, expr, c, bdd::fddShr); } inline bdd fdd_lth(int bitnum, bdd *left, bdd *right) { return fdd_relopr(bitnum, left, right, bdd::fddLth); } inline bdd fdd_lte(int bitnum, bdd *left, bdd *right) { return fdd_relopr(bitnum, left, right, bdd::fddLte); } inline bdd fdd_gth(int bitnum, bdd *left, bdd *right) { return fdd_relopr(bitnum, left, right, bdd::fddGth); } inline bdd fdd_gte(int bitnum, bdd *left, bdd *right) { return fdd_relopr(bitnum, left, right, bdd::fddGte); } inline bdd fdd_equ(int bitnum, bdd *left, bdd *right) { return fdd_relopr(bitnum, left, right, bdd::fddEqu); } inline bdd fdd_neq(int bitnum, bdd *left, bdd *right) { return fdd_relopr(bitnum, left, right, bdd::fddNeq); } #endif /* Hacks to allow for overloading of return-types only */ #define fdd_ithvar fdd_ithvarpp #define fdd_ithset fdd_ithsetpp #define fdd_domain fdd_domainpp #define fdd_equals fdd_equalspp #define fdd_makeset fdd_makesetpp #define fdd_con fdd_conpp #define fdd_var fdd_varpp #endif /* CPLUSPLUS */ #endif /* _FDD_H */ /* EOF */ buddy-2.4/src/bvec.h0000664000076500001440000002653710067023432010043 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/bvec.h,v 1.1.1.1 2004/06/25 13:22:34 haimcohen Exp $ FILE: bvec.h DESCR: Boolean (BDD) vector handling AUTH: Jorn Lind DATE: (C) may 1999 *************************************************************************/ #ifndef _BVEC_H #define _BVEC_H #include "fdd.h" /* Boolean (BDD) vector */ /* NAME {* bvec *} SECTION {* bvec *} SHORT {* A boolean vector *} PROTO {* typedef struct s_bvec { int bitnum; BDD *bitvec; } BVEC; typedef BVEC bvec; *} DESCR {* This data structure is used to store boolean vectors. The field {\tt bitnum} is the number of elements in the vector and the field {\tt bitvec} contains the actual BDDs in the vector. The C++ version of {\tt bvec} is documented at the beginning of this document *} */ typedef struct s_bvec { int bitnum; BDD *bitvec; } BVEC; #ifndef CPLUSPLUS typedef BVEC bvec; #endif #ifdef CPLUSPLUS extern "C" { #endif /* Prototypes for bvec.c */ extern BVEC bvec_copy(BVEC v); extern BVEC bvec_true(int bitnum); extern BVEC bvec_false(int bitnum); extern BVEC bvec_con(int bitnum, int val); extern BVEC bvec_var(int bitnum, int offset, int step); extern BVEC bvec_varfdd(int var); extern BVEC bvec_varvec(int bitnum, int *var); extern BVEC bvec_coerce(int bitnum, BVEC v); extern int bvec_isconst(BVEC e); extern int bvec_val(BVEC e); extern void bvec_free(BVEC v); extern BVEC bvec_addref(BVEC v); extern BVEC bvec_delref(BVEC v); extern BVEC bvec_map1(BVEC a, BDD (*fun)(BDD)); extern BVEC bvec_map2(BVEC a, BVEC b, BDD (*fun)(BDD,BDD)); extern BVEC bvec_map3(BVEC a, BVEC b, BVEC c, BDD (*fun)(BDD,BDD,BDD)); extern BVEC bvec_add(BVEC left, BVEC right); extern BVEC bvec_sub(BVEC left, BVEC right); extern BVEC bvec_mulfixed(BVEC e, int c); extern BVEC bvec_mul(BVEC left, BVEC right); extern int bvec_divfixed(BVEC e, int c, BVEC *res, BVEC *rem); extern int bvec_div(BVEC left, BVEC right, BVEC *res, BVEC *rem); extern BVEC bvec_ite(BDD a, BVEC b, BVEC c); extern BVEC bvec_shlfixed(BVEC e, int pos, BDD c); extern BVEC bvec_shl(BVEC l, BVEC r, BDD c); extern BVEC bvec_shrfixed(BVEC e, int pos, BDD c); extern BVEC bvec_shr(BVEC l, BVEC r, BDD c); extern BDD bvec_lth(BVEC left, BVEC right); extern BDD bvec_lte(BVEC left, BVEC right); extern BDD bvec_gth(BVEC left, BVEC right); extern BDD bvec_gte(BVEC left, BVEC right); extern BDD bvec_equ(BVEC left, BVEC right); extern BDD bvec_neq(BVEC left, BVEC right); #ifdef CPLUSPLUS } #endif /************************************************************************* If this file is included from a C++ compiler then the following classes, wrappers and hacks are supplied. *************************************************************************/ #ifdef CPLUSPLUS /*=== User BVEC class ==================================================*/ class bvec { public: bvec(void) { roots.bitvec=NULL; roots.bitnum=0; } bvec(int bitnum) { roots=bvec_false(bitnum); } bvec(int bitnum, int val) { roots=bvec_con(bitnum,val); } bvec(const bvec &v) { roots=bvec_copy(v.roots); } ~bvec(void) { bvec_free(roots); } void set(int i, const bdd &b); bdd operator[](int i) const { return roots.bitvec[i]; } int bitnum(void) const { return roots.bitnum; } int empty(void) const { return roots.bitnum==0; } bvec operator=(const bvec &src); private: BVEC roots; bvec(const BVEC &v) { roots=v; } /* NOTE: Must be a shallow copy! */ friend bvec bvec_truepp(int bitnum); friend bvec bvec_falsepp(int bitnum); friend bvec bvec_conpp(int bitnum, int val); friend bvec bvec_varpp(int bitnum, int offset, int step); friend bvec bvec_varfddpp(int var); friend bvec bvec_varvecpp(int bitnum, int *var); friend bvec bvec_coerce(int bitnum, const bvec &v); friend int bvec_isconst(const bvec &e); friend int bvec_val(const bvec &e); friend bvec bvec_copy(const bvec &v); friend bvec bvec_map1(const bvec &a, bdd (*fun)(const bdd &)); friend bvec bvec_map2(const bvec &a, const bvec &b, bdd (*fun)(const bdd &, const bdd &)); friend bvec bvec_map3(const bvec &a, const bvec &b, const bvec &c, bdd (*fun)(const bdd &, const bdd &, const bdd &)); friend bvec bvec_add(const bvec &left, const bvec &right); friend bvec bvec_sub(const bvec &left, const bvec &right); friend bvec bvec_mulfixed(const bvec &e, int c); friend bvec bvec_mul(const bvec &left, const bvec &right); friend int bvec_divfixed(const bvec &e, int c, bvec &res, bvec &rem); friend int bvec_div(const bvec &l, const bvec &r, bvec &res, bvec &rem); friend bvec bvec_ite(const bdd& a, const bvec& b, const bvec& c); friend bvec bvec_shlfixed(const bvec &e, int pos, const bdd &c); friend bvec bvec_shl(const bvec &left, const bvec &right, const bdd &c); friend bvec bvec_shrfixed(const bvec &e, int pos, const bdd &c); friend bvec bvec_shr(const bvec &left, const bvec &right, const bdd &c); friend bdd bvec_lth(const bvec &left, const bvec &right); friend bdd bvec_lte(const bvec &left, const bvec &right); friend bdd bvec_gth(const bvec &left, const bvec &right); friend bdd bvec_gte(const bvec &left, const bvec &right); friend bdd bvec_equ(const bvec &left, const bvec &right); friend bdd bvec_neq(const bvec &left, const bvec &right); public: bvec operator&(const bvec &a) const { return bvec_map2(*this, a, bdd_and); } bvec operator^(const bvec &a) const { return bvec_map2(*this, a, bdd_xor); } bvec operator|(const bvec &a) const { return bvec_map2(*this, a, bdd_or); } bvec operator!(void) const { return bvec_map1(*this, bdd_not); } bvec operator<<(int a) const { return bvec_shlfixed(*this,a,bddfalse); } bvec operator<<(const bvec &a) const { return bvec_shl(*this,a,bddfalse); } bvec operator>>(int a) const { return bvec_shrfixed(*this,a,bddfalse); } bvec operator>>(const bvec &a) const { return bvec_shr(*this,a,bddfalse); } bvec operator+(const bvec &a) const { return bvec_add(*this, a); } bvec operator-(const bvec &a) const { return bvec_sub(*this, a); } bvec operator*(int a) const { return bvec_mulfixed(*this, a); } bvec operator*(const bvec a) const { return bvec_mul(*this, a); } bdd operator<(const bvec &a) const { return bvec_lth(*this, a); } bdd operator<=(const bvec &a) const { return bvec_lte(*this, a); } bdd operator>(const bvec &a) const { return bvec_gth(*this, a); } bdd operator>=(const bvec &a) const { return bvec_gte(*this, a); } bdd operator==(const bvec &a) const { return bvec_equ(*this, a); } bdd operator!=(const bvec &a) const { return bvec_neq(*this, a); } }; std::ostream &operator<<(std::ostream &, const bvec &); inline bvec bvec_truepp(int bitnum) { return bvec_true(bitnum); } inline bvec bvec_falsepp(int bitnum) { return bvec_false(bitnum); } inline bvec bvec_conpp(int bitnum, int val) { return bvec_con(bitnum, val); } inline bvec bvec_varpp(int bitnum, int offset, int step) { return bvec_var(bitnum, offset, step); } inline bvec bvec_varfddpp(int var) { return bvec_varfdd(var); } inline bvec bvec_varvecpp(int bitnum, int *var) { return bvec_varvec(bitnum, var); } inline bvec bvec_coerce(int bitnum, const bvec &v) { return bvec_coerce(bitnum, v.roots); } inline int bvec_isconst(const bvec &e) { return bvec_isconst(e.roots); } inline int bvec_val(const bvec &e) { return bvec_val(e.roots); } inline bvec bvec_copy(const bvec &v) { return bvec_copy(v.roots); } inline bvec bvec_add(const bvec &left, const bvec &right) { return bvec_add(left.roots, right.roots); } inline bvec bvec_sub(const bvec &left, const bvec &right) { return bvec_sub(left.roots, right.roots); } inline bvec bvec_mulfixed(const bvec &e, int c) { return bvec_mulfixed(e.roots, c); } inline bvec bvec_mul(const bvec &left, const bvec &right) { return bvec_mul(left.roots, right.roots); } inline int bvec_divfixed(const bvec &e, int c, bvec &res, bvec &rem) { return bvec_divfixed(e.roots, c, &res.roots, &rem.roots); } inline int bvec_div(const bvec &l, const bvec &r, bvec &res, bvec &rem) { return bvec_div(l.roots, r.roots, &res.roots, &rem.roots); } inline bvec bvec_ite(const bdd& a, const bvec& b, const bvec& c) { return bvec_ite(a.root, b.roots, c.roots); } inline bvec bvec_shlfixed(const bvec &e, int pos, const bdd &c) { return bvec_shlfixed(e.roots, pos, c.root); } inline bvec bvec_shl(const bvec &left, const bvec &right, const bdd &c) { return bvec_shl(left.roots, right.roots, c.root); } inline bvec bvec_shrfixed(const bvec &e, int pos, const bdd &c) { return bvec_shrfixed(e.roots, pos, c.root); } inline bvec bvec_shr(const bvec &left, const bvec &right, const bdd &c) { return bvec_shr(left.roots, right.roots, c.root); } inline bdd bvec_lth(const bvec &left, const bvec &right) { return bvec_lth(left.roots, right.roots); } inline bdd bvec_lte(const bvec &left, const bvec &right) { return bvec_lte(left.roots, right.roots); } inline bdd bvec_gth(const bvec &left, const bvec &right) { return bvec_gth(left.roots, right.roots); } inline bdd bvec_gte(const bvec &left, const bvec &right) { return bvec_gte(left.roots, right.roots); } inline bdd bvec_equ(const bvec &left, const bvec &right) { return bvec_equ(left.roots, right.roots); } inline bdd bvec_neq(const bvec &left, const bvec &right) { return bvec_neq(left.roots, right.roots); } /* Hack to allow for overloading */ #define bvec_var(a,b,c) bvec_varpp(a,b,c) #define bvec_varfdd(a) bvec_varfddpp(a) #define bvec_varvec(a,b) bvec_varvecpp(a,b) #define bvec_true(a) bvec_truepp(a) #define bvec_false(a) bvec_falsepp(a) #define bvec_con(a,b) bvec_conpp((a),(b)) #endif /* CPLUSPLUS */ #endif /* _BVEC_H */ /* EOF */ buddy-2.4/src/Makefile.am0000644000076500001440000000101510074021567010772 AM_CPPFLAGS = -I$(top_builddir) include_HEADERS = bdd.h fdd.h bvec.h lib_LTLIBRARIES = libbdd.la libbdd_la_SOURCES = \ bddio.c \ bddop.c \ bddtree.h \ bvec.c \ cache.c \ cache.h \ cppext.cxx \ fdd.c \ imatrix.c \ imatrix.h \ kernel.c \ kernel.h \ pairs.c \ prime.c \ prime.h \ reorder.c \ tree.c # See the `Updating version info' node of the Libtool manual before # changing this. libbdd_la_LDFLAGS = -version-info 0:0:0 check_PROGRAMS = bddtest bddtest_SOURCES = bddtest.cxx bddtest_LDADD = ./libbdd.la buddy-2.4/src/Makefile.in0000644000076500001440000004607210100042072010777 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(libbdd_la_SOURCES) $(bddtest_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ check_PROGRAMS = bddtest$(EXEEXT) subdir = src DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) libbdd_la_LIBADD = am_libbdd_la_OBJECTS = bddio.lo bddop.lo bvec.lo cache.lo cppext.lo \ fdd.lo imatrix.lo kernel.lo pairs.lo prime.lo reorder.lo \ tree.lo libbdd_la_OBJECTS = $(am_libbdd_la_OBJECTS) am_bddtest_OBJECTS = bddtest.$(OBJEXT) bddtest_OBJECTS = $(am_bddtest_OBJECTS) bddtest_DEPENDENCIES = ./libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bddio.Plo ./$(DEPDIR)/bddop.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/bddtest.Po ./$(DEPDIR)/bvec.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/cache.Plo ./$(DEPDIR)/cppext.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/fdd.Plo ./$(DEPDIR)/imatrix.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/kernel.Plo ./$(DEPDIR)/pairs.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/prime.Plo ./$(DEPDIR)/reorder.Plo \ @AMDEP_TRUE@ ./$(DEPDIR)/tree.Plo COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libbdd_la_SOURCES) $(bddtest_SOURCES) DIST_SOURCES = $(libbdd_la_SOURCES) $(bddtest_SOURCES) includeHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(include_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_builddir) include_HEADERS = bdd.h fdd.h bvec.h lib_LTLIBRARIES = libbdd.la libbdd_la_SOURCES = \ bddio.c \ bddop.c \ bddtree.h \ bvec.c \ cache.c \ cache.h \ cppext.cxx \ fdd.c \ imatrix.c \ imatrix.h \ kernel.c \ kernel.h \ pairs.c \ prime.c \ prime.h \ reorder.c \ tree.c # See the `Updating version info' node of the Libtool manual before # changing this. libbdd_la_LDFLAGS = -version-info 0:0:0 bddtest_SOURCES = bddtest.cxx bddtest_LDADD = ./libbdd.la all: all-am .SUFFIXES: .SUFFIXES: .c .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ else :; fi; \ done uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ p="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done libbdd.la: $(libbdd_la_OBJECTS) $(libbdd_la_DEPENDENCIES) $(CXXLINK) -rpath $(libdir) $(libbdd_la_LDFLAGS) $(libbdd_la_OBJECTS) $(libbdd_la_LIBADD) $(LIBS) clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done bddtest$(EXEEXT): $(bddtest_OBJECTS) $(bddtest_DEPENDENCIES) @rm -f bddtest$(EXEEXT) $(CXXLINK) $(bddtest_LDFLAGS) $(bddtest_OBJECTS) $(bddtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bddio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bddop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bddtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bvec.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cppext.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imatrix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pairs.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prime.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reorder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)" @list='$(include_HEADERS)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \ $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; for p in $$list; do \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \ rm -f "$(DESTDIR)$(includedir)/$$f"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-includeHEADERS install-exec-am: install-libLTLIBRARIES install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-info-am \ uninstall-libLTLIBRARIES .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-exec install-exec-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-includeHEADERS \ uninstall-info-am uninstall-libLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/src/bddio.c0000664000076500001440000003610310067023406010167 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/bddio.c,v 1.1.1.1 2004/06/25 13:22:14 haimcohen Exp $ FILE: bddio.c DESCR: File I/O routines for BDD package AUTH: Jorn Lind DATE: (C) june 1997 *************************************************************************/ #include #include #include #include #include #include "kernel.h" static void bdd_printset_rec(FILE *, int, int *); static void bdd_fprintdot_rec(FILE*, BDD); static int bdd_save_rec(FILE*, int); static int bdd_loaddata(FILE *); static int loadhash_get(int); static void loadhash_add(int, int); static bddfilehandler filehandler; typedef struct s_LoadHash { int key; int data; int first; int next; } LoadHash; static LoadHash *lh_table; static int lh_freepos; static int lh_nodenum; static int *loadvar2level; /*=== PRINTING ========================================================*/ /* NAME {* bdd\_file\_hook *} SECTION {* kernel *} SHORT {* Specifies a printing callback handler *} PROTO {* bddfilehandler bdd_file_hook(bddfilehandler handler) *} DESCR {* A printing callback handler for use with BDDs is used to convert the BDD variable number into something readable by the end user. Typically the handler will print a string name instead of the number. A handler could look like this: \begin{verbatim} void printhandler(FILE *o, int var) { extern char **names; fprintf(o, "%s", names[var]); } \end{verbatim} \noindent The handler can then be passed to BuDDy like this: {\tt bdd\_file\_hook(printhandler)}. No default handler is supplied. The argument {\tt handler} may be NULL if no handler is needed. *} RETURN {* The old handler *} ALSO {* bdd\_printset, bdd\_strm\_hook, fdd\_file\_hook *} */ bddfilehandler bdd_file_hook(bddfilehandler handler) { bddfilehandler old = filehandler; filehandler = handler; return old; } /* NAME {* bdd\_printall *} EXTRA {* bdd\_fprintall *} SECTION {* fileio *} SHORT {* prints all used entries in the node table *} PROTO {* void bdd_printall(void) void bdd_fprintall(FILE* ofile) *} DESCR {* Prints to either stdout or the file {\tt ofile} all the used entries in the main node table. The format is: \begin{Ill} {\tt [Nodenum] Var/level Low High} \end{Ill} Where {\tt Nodenum} is the position in the node table and level is the position in the current variable order. *} ALSO {* bdd\_printtable, bdd\_printset, bdd\_printdot *} */ void bdd_printall(void) { bdd_fprintall(stdout); } void bdd_fprintall(FILE *ofile) { int n; for (n=0 ; n\\ < $x_{2,1}:c_{2,1},\ldots,x_{2,n_2}:c_{2,n_2}$ >\\ $\ldots$ \\ < $x_{N,1}:c_{N,1},\ldots,x_{N,n_3}:c_{N,n_3}$ > } \end{Ill} Where the $x$'s are variable numbers (and the position in the current order) and the $c$'s are the possible assignments to these. Each set of brackets designates one possible assignment to the set of variables that make up the BDD. All variables not shown are don't cares. It is possible to specify a callback handler for printing of the variables using {\tt bdd\_file\_hook} or {\tt bdd\_strm\_hook}. *} ALSO {* bdd\_printall, bdd\_printtable, bdd\_printdot, bdd\_file\_hook, bdd\_strm\_hook *} */ void bdd_printset(BDD r) { bdd_fprintset(stdout, r); } void bdd_fprintset(FILE *ofile, BDD r) { int *set; if (r < 2) { fprintf(ofile, "%s", r == 0 ? "F" : "T"); return; } if ((set=(int *)malloc(sizeof(int)*bddvarnum)) == NULL) { bdd_error(BDD_MEMORY); return; } memset(set, 0, sizeof(int) * bddvarnum); bdd_printset_rec(ofile, r, set); free(set); } static void bdd_printset_rec(FILE *ofile, int r, int *set) { int n; int first; if (r == 0) return; else if (r == 1) { fprintf(ofile, "<"); first = 1; for (n=0 ; n 0) { if (!first) fprintf(ofile, ", "); first = 0; if (filehandler) filehandler(ofile, bddlevel2var[n]); else fprintf(ofile, "%d", bddlevel2var[n]); fprintf(ofile, ":%d", (set[n]==2 ? 1 : 0)); } } fprintf(ofile, ">"); } else { set[LEVEL(r)] = 1; bdd_printset_rec(ofile, LOW(r), set); set[LEVEL(r)] = 2; bdd_printset_rec(ofile, HIGH(r), set); set[LEVEL(r)] = 0; } } /* NAME {* bdd\_printdot *} EXTRA {* bdd\_fprintdot *} SECTION {* fileio *} SHORT {* prints a description of a BDD in DOT format *} PROTO {* void bdd_printdot(BDD r) int bdd_fnprintdot(char* fname, BDD r) void bdd_fprintdot(FILE* ofile, BDD r) *} DESCR {* Prints a BDD in a format suitable for use with the graph drawing program DOT to either stdout, a designated file {\tt ofile} or the file named by {\tt fname}. In the last case the file will be opened for writing, any previous contents destroyed and then closed again. *} ALSO {* bdd\_printall, bdd\_printtable, bdd\_printset *} */ void bdd_printdot(BDD r) { bdd_fprintdot(stdout, r); } int bdd_fnprintdot(char *fname, BDD r) { FILE *ofile = fopen(fname, "w"); if (ofile == NULL) return bdd_error(BDD_FILE); bdd_fprintdot(ofile, r); fclose(ofile); return 0; } void bdd_fprintdot(FILE* ofile, BDD r) { fprintf(ofile, "digraph G {\n"); fprintf(ofile, "0 [shape=box, label=\"0\", style=filled, shape=box, height=0.3, width=0.3];\n"); fprintf(ofile, "1 [shape=box, label=\"1\", style=filled, shape=box, height=0.3, width=0.3];\n"); bdd_fprintdot_rec(ofile, r); fprintf(ofile, "}\n"); bdd_unmark(r); } static void bdd_fprintdot_rec(FILE* ofile, BDD r) { if (ISCONST(r) || MARKED(r)) return; fprintf(ofile, "%d [label=\"", r); if (filehandler) filehandler(ofile, bddlevel2var[LEVEL(r)]); else fprintf(ofile, "%d", bddlevel2var[LEVEL(r)]); fprintf(ofile, "\"];\n"); fprintf(ofile, "%d -> %d [style=dotted];\n", r, LOW(r)); fprintf(ofile, "%d -> %d [style=filled];\n", r, HIGH(r)); SETMARK(r); bdd_fprintdot_rec(ofile, LOW(r)); bdd_fprintdot_rec(ofile, HIGH(r)); } /*=== SAVE =============================================================*/ /* NAME {* bdd\_save *} EXTRA {* bdd\_fnsave *} SECTION {* fileio *} SHORT {* saves a BDD to a file *} PROTO {* int bdd_fnsave(char *fname, BDD r) int bdd_save(FILE *ofile, BDD r) *} DESCR {* Saves the nodes used by {\tt r} to either a file {\tt ofile} which must be opened for writing or to the file named {\tt fname}. In the last case the file will be truncated and opened for writing. *} ALSO {* bdd\_load *} RETURN {* Zero on succes, otherwise an error code from {\tt bdd.h}. *} */ int bdd_fnsave(char *fname, BDD r) { FILE *ofile; int ok; if ((ofile=fopen(fname,"w")) == NULL) return bdd_error(BDD_FILE); ok = bdd_save(ofile, r); fclose(ofile); return ok; } int bdd_save(FILE *ofile, BDD r) { int err, n=0; if (r < 2) { fprintf(ofile, "0 0 %d\n", r); return 0; } bdd_markcount(r, &n); bdd_unmark(r); fprintf(ofile, "%d %d\n", n, bddvarnum); for (n=0 ; n bddvarnum) bdd_setvarnum(vnum); if ((lh_table=(LoadHash*)malloc(lh_nodenum*sizeof(LoadHash))) == NULL) return bdd_error(BDD_MEMORY); for (n=0 ; n= 2) low = loadhash_get(low); if (high >= 2) high = loadhash_get(high); if (low<0 || high<0 || var<0) return bdd_error(BDD_FORMAT); root = bdd_addref( bdd_ite(bdd_ithvar(var), high, low) ); loadhash_add(key, root); } return root; } static void loadhash_add(int key, int data) { int hash = key % lh_nodenum; int pos = lh_freepos; lh_freepos = lh_table[pos].next; lh_table[pos].next = lh_table[hash].first; lh_table[hash].first = pos; lh_table[pos].key = key; lh_table[pos].data = data; } static int loadhash_get(int key) { int hash = lh_table[key % lh_nodenum].first; while (hash != -1 && lh_table[hash].key != key) hash = lh_table[hash].next; if (hash == -1) return -1; return lh_table[hash].data; } /* EOF */ buddy-2.4/src/bddop.c0000664000076500001440000020616010067023416010201 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/bddop.c,v 1.1.1.1 2004/06/25 13:22:22 haimcohen Exp $ FILE: bddop.c DESCR: BDD operators AUTH: Jorn Lind DATE: (C) nov 1997 *************************************************************************/ #include #include #include #include #include #include "kernel.h" #include "cache.h" /* Hash value modifiers to distinguish between entries in misccache */ #define CACHEID_CONSTRAIN 0x0 #define CACHEID_RESTRICT 0x1 #define CACHEID_SATCOU 0x2 #define CACHEID_SATCOULN 0x3 #define CACHEID_PATHCOU 0x4 /* Hash value modifiers for replace/compose */ #define CACHEID_REPLACE 0x0 #define CACHEID_COMPOSE 0x1 #define CACHEID_VECCOMPOSE 0x2 /* Hash value modifiers for quantification */ #define CACHEID_EXIST 0x0 #define CACHEID_FORALL 0x1 #define CACHEID_UNIQUE 0x2 #define CACHEID_APPEX 0x3 #define CACHEID_APPAL 0x4 #define CACHEID_APPUN 0x5 /* Number of boolean operators */ #define OPERATOR_NUM 11 /* Operator results - entry = left<<1 | right (left,right in {0,1}) */ static int oprres[OPERATOR_NUM][4] = { {0,0,0,1}, /* and ( & ) */ {0,1,1,0}, /* xor ( ^ ) */ {0,1,1,1}, /* or ( | ) */ {1,1,1,0}, /* nand */ {1,0,0,0}, /* nor */ {1,1,0,1}, /* implication ( >> ) */ {1,0,0,1}, /* bi-implication */ {0,0,1,0}, /* difference /greater than ( - ) ( > ) */ {0,1,0,0}, /* less than ( < ) */ {1,0,1,1}, /* inverse implication ( << ) */ {1,1,0,0} /* not ( ! ) */ }; /* Variables needed for the operators */ static int applyop; /* Current operator for apply */ static int appexop; /* Current operator for appex */ static int appexid; /* Current cache id for appex */ static int quantid; /* Current cache id for quantifications */ static int *quantvarset; /* Current variable set for quant. */ static int quantvarsetID; /* Current id used in quantvarset */ static int quantlast; /* Current last variable to be quant. */ static int replaceid; /* Current cache id for replace */ static int *replacepair; /* Current replace pair */ static int replacelast; /* Current last var. level to replace */ static int composelevel; /* Current variable used for compose */ static int miscid; /* Current cache id for other results */ static int *varprofile; /* Current variable profile */ static int supportID; /* Current ID (true value) for support */ static int supportMin; /* Min. used level in support calc. */ static int supportMax; /* Max. used level in support calc. */ static int* supportSet; /* The found support set */ static BddCache applycache; /* Cache for apply results */ static BddCache itecache; /* Cache for ITE results */ static BddCache quantcache; /* Cache for exist/forall results */ static BddCache appexcache; /* Cache for appex/appall results */ static BddCache replacecache; /* Cache for replace results */ static BddCache misccache; /* Cache for other results */ static int cacheratio; static BDD satPolarity; static int firstReorder; /* Used instead of local variable in order to avoid compiler warning about 'first' being clobbered by setjmp */ static char* allsatProfile; /* Variable profile for bdd_allsat() */ static bddallsathandler allsatHandler; /* Callback handler for bdd_allsat() */ extern bddCacheStat bddcachestats; /* Internal prototypes */ static BDD not_rec(BDD); static BDD apply_rec(BDD, BDD); static BDD ite_rec(BDD, BDD, BDD); static int simplify_rec(BDD, BDD); static int quant_rec(int); static int appquant_rec(int, int); static int restrict_rec(int); static BDD constrain_rec(BDD, BDD); static BDD replace_rec(BDD); static BDD bdd_correctify(int, BDD, BDD); static BDD compose_rec(BDD, BDD); static BDD veccompose_rec(BDD); static void support_rec(int, int*); static BDD satone_rec(BDD); static BDD satoneset_rec(BDD, BDD); static int fullsatone_rec(int); static void allsat_rec(BDD r); static double satcount_rec(int); static double satcountln_rec(int); static void varprofile_rec(int); static double bdd_pathcount_rec(BDD); static int varset2vartable(BDD); static int varset2svartable(BDD); /* Hashvalues */ #define NOTHASH(r) (r) #define APPLYHASH(l,r,op) (TRIPLE(l,r,op)) #define ITEHASH(f,g,h) (TRIPLE(f,g,h)) #define RESTRHASH(r,var) (PAIR(r,var)) #define CONSTRAINHASH(f,c) (PAIR(f,c)) #define QUANTHASH(r) (r) #define REPLACEHASH(r) (r) #define VECCOMPOSEHASH(f) (f) #define COMPOSEHASH(f,g) (PAIR(f,g)) #define SATCOUHASH(r) (r) #define PATHCOUHASH(r) (r) #define APPEXHASH(l,r,op) (PAIR(l,r)) #ifndef M_LN2 #define M_LN2 0.69314718055994530942 #endif #define log1p(a) (log(1.0+a)) #define INVARSET(a) (quantvarset[a] == quantvarsetID) /* unsigned check */ #define INSVARSET(a) (abs(quantvarset[a]) == quantvarsetID) /* signed check */ /************************************************************************* Setup and shutdown *************************************************************************/ int bdd_operator_init(int cachesize) { if (BddCache_init(&applycache,cachesize) < 0) return bdd_error(BDD_MEMORY); if (BddCache_init(&itecache,cachesize) < 0) return bdd_error(BDD_MEMORY); if (BddCache_init(&quantcache,cachesize) < 0) return bdd_error(BDD_MEMORY); if (BddCache_init(&appexcache,cachesize) < 0) return bdd_error(BDD_MEMORY); if (BddCache_init(&replacecache,cachesize) < 0) return bdd_error(BDD_MEMORY); if (BddCache_init(&misccache,cachesize) < 0) return bdd_error(BDD_MEMORY); quantvarsetID = 0; quantvarset = NULL; cacheratio = 0; supportSet = NULL; return 0; } void bdd_operator_done(void) { if (quantvarset != NULL) free(quantvarset); BddCache_done(&applycache); BddCache_done(&itecache); BddCache_done(&quantcache); BddCache_done(&appexcache); BddCache_done(&replacecache); BddCache_done(&misccache); if (supportSet != NULL) free(supportSet); } void bdd_operator_reset(void) { BddCache_reset(&applycache); BddCache_reset(&itecache); BddCache_reset(&quantcache); BddCache_reset(&appexcache); BddCache_reset(&replacecache); BddCache_reset(&misccache); } void bdd_operator_varresize(void) { if (quantvarset != NULL) free(quantvarset); if ((quantvarset=NEW(int,bddvarnum)) == NULL) bdd_error(BDD_MEMORY); memset(quantvarset, 0, sizeof(int)*bddvarnum); quantvarsetID = 0; } static void bdd_operator_noderesize(void) { if (cacheratio > 0) { int newcachesize = bddnodesize / cacheratio; BddCache_resize(&applycache, newcachesize); BddCache_resize(&itecache, newcachesize); BddCache_resize(&quantcache, newcachesize); BddCache_resize(&appexcache, newcachesize); BddCache_resize(&replacecache, newcachesize); BddCache_resize(&misccache, newcachesize); } } /************************************************************************* Other *************************************************************************/ /* NAME {* bdd\_setcacheratio *} SECTION {* kernel *} SHORT {* Sets the cache ratio for the operator caches *} PROTO {* int bdd_setcacheratio(int r) *} DESCR {* The ratio between the number of nodes in the nodetable and the number of entries in the operator cachetables is called the cache ratio. So a cache ratio of say, four, allocates one cache entry for each four unique node entries. This value can be set with {\tt bdd\_setcacheratio} to any positive value. When this is done the caches are resized instantly to fit the new ratio. The default is a fixed cache size determined at initialization time. *} RETURN {* The previous cache ratio or a negative number on error. *} ALSO {* bdd\_init *} */ int bdd_setcacheratio(int r) { int old = cacheratio; if (r <= 0) return bdd_error(BDD_RANGE); if (bddnodesize == 0) return old; cacheratio = r; bdd_operator_noderesize(); return old; } /************************************************************************* Operators *************************************************************************/ static void checkresize(void) { if (bddresized) bdd_operator_noderesize(); bddresized = 0; } /*=== BUILD A CUBE =====================================================*/ /* NAME {* bdd\_buildcube *} EXTRA {* bdd\_ibuildcube *} SECTION {* operator *} SHORT {* build a cube from an array of variables *} PROTO {* BDD bdd_buildcube(int value, int width, BDD *var) BDD bdd_ibuildcube(int value, int width, int *var)*} DESCR {* This function builds a cube from the variables in {\tt var}. It does so by interpreting the {\tt width} low order bits of {\tt value} as a bit mask--a set bit indicates that the variable should be added in it's positive form, and a cleared bit the opposite. The most significant bits are encoded with the first variables in {\tt var}. Consider as an example the call {\tt bdd\_buildcube(0xB, 4, var)}. This corresponds to the expression: $var[0] \conj \neg var[1] \conj var[2] \conj var[3]$. The first version of the function takes an array of BDDs, whereas the second takes an array of variable numbers as used in {\tt bdd\_ithvar}. *} RETURN {* The resulting cube *} ALSO {* bdd\_ithvar, fdd\_ithvar *} */ BDD bdd_buildcube(int value, int width, BDD *variables) { BDD result = BDDONE; int z; for (z=0 ; z>=1) { BDD tmp; BDD v; if (value & 0x1) v = bdd_addref( variables[width-z-1] ); else v = bdd_addref( bdd_not(variables[width-z-1]) ); bdd_addref(result); tmp = bdd_apply(result,v,bddop_and); bdd_delref(result); bdd_delref(v); result = tmp; } return result; } BDD bdd_ibuildcube(int value, int width, int *variables) { BDD result = BDDONE; int z; for (z=0 ; z>=1) { BDD tmp; BDD v; if (value & 0x1) v = bdd_ithvar(variables[width-z-1]); else v = bdd_nithvar(variables[width-z-1]); bdd_addref(result); tmp = bdd_apply(result,v,bddop_and); bdd_delref(result); result = tmp; } return result; } /*=== NOT ==============================================================*/ /* NAME {* bdd\_not *} SECTION {* operator *} SHORT {* negates a bdd *} PROTO {* BDD bdd_not(BDD r) *} DESCR {* Negates the BDD {\tt r} by exchanging all references to the zero-terminal with references to the one-terminal and vice versa. *} RETURN {* The negated bdd. *} */ BDD bdd_not(BDD r) { BDD res; firstReorder = 1; CHECKa(r, bddfalse); again: if (setjmp(bddexception) == 0) { INITREF; if (!firstReorder) bdd_disable_reorder(); res = not_rec(r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD not_rec(BDD r) { BddCacheData *entry; BDD res; if (ISZERO(r)) return BDDONE; if (ISONE(r)) return BDDZERO; entry = BddCache_lookup(&applycache, NOTHASH(r)); if (entry->a == r && entry->c == bddop_not) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif PUSHREF( not_rec(LOW(r)) ); PUSHREF( not_rec(HIGH(r)) ); res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); POPREF(2); entry->a = r; entry->c = bddop_not; entry->r.res = res; return res; } /*=== APPLY ============================================================*/ /* NAME {* bdd\_apply *} SECTION {* operator *} SHORT {* basic bdd operations *} PROTO {* BDD bdd_apply(BDD left, BDD right, int opr) *} DESCR {* The {\tt bdd\_apply} function performs all of the basic bdd operations with two operands, such as AND, OR etc. The {\tt left} argument is the left bdd operand and {\tt right} is the right operand. The {\tt opr} argument is the requested operation and must be one of the following\\ \begin{tabular}{lllc} {\bf Identifier} & {\bf Description} & {\bf Truth table} & {\bf C++ opr.} \\ {\tt bddop\_and} & logical and ($A \wedge B$) & [0,0,0,1] & \verb%&% \\ {\tt bddop\_xor} & logical xor ($A \oplus B$) & [0,1,1,0] & \verb%^% \\ {\tt bddop\_or} & logical or ($A \vee B$) & [0,1,1,1] & \verb%|% \\ {\tt bddop\_nand} & logical not-and & [1,1,1,0] \\ {\tt bddop\_nor} & logical not-or & [1,0,0,0] \\ {\tt bddop\_imp} & implication ($A \Rightarrow B$) & [1,1,0,1] & \verb%>>% \\ {\tt bddop\_biimp} & bi-implication ($A \Leftrightarrow B$)& [1,0,0,1] \\ {\tt bddop\_diff} & set difference ($A \setminus B$) & [0,0,1,0] & \verb%-% \\ {\tt bddop\_less} & less than ($A < B$) & [0,1,0,0] & \verb%<% \\ {\tt bddop\_invimp} & reverse implication ($A \Leftarrow B$)& [1,0,1,1] & \verb%<<% \\ \end{tabular} *} RETURN {* The result of the operation. *} ALSO {* bdd\_ite *} */ BDD bdd_apply(BDD l, BDD r, int op) { BDD res; firstReorder = 1; CHECKa(l, bddfalse); CHECKa(r, bddfalse); if (op<0 || op>bddop_invimp) { bdd_error(BDD_OP); return bddfalse; } again: if (setjmp(bddexception) == 0) { INITREF; applyop = op; if (!firstReorder) bdd_disable_reorder(); res = apply_rec(l, r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD apply_rec(BDD l, BDD r) { BddCacheData *entry; BDD res; switch (applyop) { case bddop_and: if (l == r) return l; if (ISZERO(l) || ISZERO(r)) return 0; if (ISONE(l)) return r; if (ISONE(r)) return l; break; case bddop_or: if (l == r) return l; if (ISONE(l) || ISONE(r)) return 1; if (ISZERO(l)) return r; if (ISZERO(r)) return l; break; case bddop_xor: if (l == r) return 0; if (ISZERO(l)) return r; if (ISZERO(r)) return l; break; case bddop_nand: if (ISZERO(l) || ISZERO(r)) return 1; break; case bddop_nor: if (ISONE(l) || ISONE(r)) return 0; break; case bddop_imp: if (ISZERO(l)) return 1; if (ISONE(l)) return r; if (ISONE(r)) return 1; break; } if (ISCONST(l) && ISCONST(r)) res = oprres[applyop][l<<1 | r]; else { entry = BddCache_lookup(&applycache, APPLYHASH(l,r,applyop)); if (entry->a == l && entry->b == r && entry->c == applyop) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif if (LEVEL(l) == LEVEL(r)) { PUSHREF( apply_rec(LOW(l), LOW(r)) ); PUSHREF( apply_rec(HIGH(l), HIGH(r)) ); res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); } else if (LEVEL(l) < LEVEL(r)) { PUSHREF( apply_rec(LOW(l), r) ); PUSHREF( apply_rec(HIGH(l), r) ); res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); } else { PUSHREF( apply_rec(l, LOW(r)) ); PUSHREF( apply_rec(l, HIGH(r)) ); res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); } POPREF(2); entry->a = l; entry->b = r; entry->c = applyop; entry->r.res = res; } return res; } /* NAME {* bdd\_and *} SECTION {* operator *} SHORT {* The logical 'and' of two BDDs *} PROTO {* BDD bdd_and(BDD l, BDD r) *} DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_and)}. *} RETURN {* The logical 'and' of {\tt l} and {\tt r}. *} ALSO {* bdd\_apply, bdd\_or, bdd\_xor *} */ BDD bdd_and(BDD l, BDD r) { return bdd_apply(l,r,bddop_and); } /* NAME {* bdd\_or *} SECTION {* operator *} SHORT {* The logical 'or' of two BDDs *} PROTO {* BDD bdd_or(BDD l, BDD r) *} DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_or)}. *} RETURN {* The logical 'or' of {\tt l} and {\tt r}. *} ALSO {* bdd\_apply, bdd\_xor, bdd\_and *} */ BDD bdd_or(BDD l, BDD r) { return bdd_apply(l,r,bddop_or); } /* NAME {* bdd\_xor *} SECTION {* operator *} SHORT {* The logical 'xor' of two BDDs *} PROTO {* BDD bdd_xor(BDD l, BDD r) *} DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_xor)}. *} RETURN {* The logical 'xor' of {\tt l} and {\tt r}. *} ALSO {* bdd\_apply, bdd\_or, bdd\_and *} */ BDD bdd_xor(BDD l, BDD r) { return bdd_apply(l,r,bddop_xor); } /* NAME {* bdd\_imp *} SECTION {* operator *} SHORT {* The logical 'implication' between two BDDs *} PROTO {* BDD bdd_imp(BDD l, BDD r) *} DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_imp)}. *} RETURN {* The logical 'implication' of {\tt l} and {\tt r} ($l \Rightarrow r$). *} ALSO {* bdd\_apply, bdd\_biimp *} */ BDD bdd_imp(BDD l, BDD r) { return bdd_apply(l,r,bddop_imp); } /* NAME {* bdd\_biimp *} SECTION {* operator *} SHORT {* The logical 'bi-implication' between two BDDs *} PROTO {* BDD bdd_biimp(BDD l, BDD r) *} DESCR {* This a wrapper that calls {\tt bdd\_apply(l,r,bddop\_biimp)}. *} RETURN {* The logical 'bi-implication' of {\tt l} and {\tt r} ($l \Leftrightarrow r$). *} ALSO {* bdd\_apply, bdd\_imp *} */ BDD bdd_biimp(BDD l, BDD r) { return bdd_apply(l,r,bddop_biimp); } /*=== ITE ==============================================================*/ /* NAME {* bdd\_ite *} SECTION {* operator *} SHORT {* if-then-else operator *} PROTO {* BDD bdd_ite(BDD f, BDD g, BDD h) *} DESCR {* Calculates the BDD for the expression $(f \conj g) \disj (\neg f \conj h)$ more efficiently than doing the three operations separately. {\tt bdd\_ite} can also be used for conjunction, disjunction and any other boolean operator, but is not as efficient for the binary and unary operations. *} RETURN {* The BDD for $(f \conj g) \disj (\neg f \conj h)$ *} ALSO {* bdd\_apply *} */ BDD bdd_ite(BDD f, BDD g, BDD h) { BDD res; firstReorder = 1; CHECKa(f, bddfalse); CHECKa(g, bddfalse); CHECKa(h, bddfalse); again: if (setjmp(bddexception) == 0) { INITREF; if (!firstReorder) bdd_disable_reorder(); res = ite_rec(f,g,h); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD ite_rec(BDD f, BDD g, BDD h) { BddCacheData *entry; BDD res; if (ISONE(f)) return g; if (ISZERO(f)) return h; if (g == h) return g; if (ISONE(g) && ISZERO(h)) return f; if (ISZERO(g) && ISONE(h)) return not_rec(f); entry = BddCache_lookup(&itecache, ITEHASH(f,g,h)); if (entry->a == f && entry->b == g && entry->c == h) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif if (LEVEL(f) == LEVEL(g)) { if (LEVEL(f) == LEVEL(h)) { PUSHREF( ite_rec(LOW(f), LOW(g), LOW(h)) ); PUSHREF( ite_rec(HIGH(f), HIGH(g), HIGH(h)) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); } else if (LEVEL(f) < LEVEL(h)) { PUSHREF( ite_rec(LOW(f), LOW(g), h) ); PUSHREF( ite_rec(HIGH(f), HIGH(g), h) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); } else /* f > h */ { PUSHREF( ite_rec(f, g, LOW(h)) ); PUSHREF( ite_rec(f, g, HIGH(h)) ); res = bdd_makenode(LEVEL(h), READREF(2), READREF(1)); } } else if (LEVEL(f) < LEVEL(g)) { if (LEVEL(f) == LEVEL(h)) { PUSHREF( ite_rec(LOW(f), g, LOW(h)) ); PUSHREF( ite_rec(HIGH(f), g, HIGH(h)) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); } else if (LEVEL(f) < LEVEL(h)) { PUSHREF( ite_rec(LOW(f), g, h) ); PUSHREF( ite_rec(HIGH(f), g, h) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); } else /* f > h */ { PUSHREF( ite_rec(f, g, LOW(h)) ); PUSHREF( ite_rec(f, g, HIGH(h)) ); res = bdd_makenode(LEVEL(h), READREF(2), READREF(1)); } } else /* f > g */ { if (LEVEL(g) == LEVEL(h)) { PUSHREF( ite_rec(f, LOW(g), LOW(h)) ); PUSHREF( ite_rec(f, HIGH(g), HIGH(h)) ); res = bdd_makenode(LEVEL(g), READREF(2), READREF(1)); } else if (LEVEL(g) < LEVEL(h)) { PUSHREF( ite_rec(f, LOW(g), h) ); PUSHREF( ite_rec(f, HIGH(g), h) ); res = bdd_makenode(LEVEL(g), READREF(2), READREF(1)); } else /* g > h */ { PUSHREF( ite_rec(f, g, LOW(h)) ); PUSHREF( ite_rec(f, g, HIGH(h)) ); res = bdd_makenode(LEVEL(h), READREF(2), READREF(1)); } } POPREF(2); entry->a = f; entry->b = g; entry->c = h; entry->r.res = res; return res; } /*=== RESTRICT =========================================================*/ /* NAME {* bdd\_restrict *} SECTION {* operator *} SHORT {* restric a set of variables to constant values *} PROTO {* BDD bdd_restrict(BDD r, BDD var) *} DESCR {* This function restricts the variables in {\tt r} to constant true or false. How this is done depends on how the variables are included in the variable set {\tt var}. If they are included in their positive form then they are restricted to true and vice versa. Unfortunately it is not possible to insert variables in their negated form using {\tt bdd\_makeset}, so the variable set has to be build manually as a conjunction of the variables. Example: Assume variable 1 should be restricted to true and variable 3 to false. \begin{verbatim} bdd X = make_user_bdd(); bdd R1 = bdd_ithvar(1); bdd R2 = bdd_nithvar(3); bdd R = bdd_addref( bdd_apply(R1,R2, bddop_and) ); bdd RES = bdd_addref( bdd_restrict(X,R) ); \end{verbatim} *} RETURN {* The restricted bdd. *} ALSO {* bdd\_makeset, bdd\_exist, bdd\_forall *} */ BDD bdd_restrict(BDD r, BDD var) { BDD res; firstReorder = 1; CHECKa(r,bddfalse); CHECKa(var,bddfalse); if (var < 2) /* Empty set */ return r; again: if (setjmp(bddexception) == 0) { if (varset2svartable(var) < 0) return bddfalse; INITREF; miscid = (var << 3) | CACHEID_RESTRICT; if (!firstReorder) bdd_disable_reorder(); res = restrict_rec(r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static int restrict_rec(int r) { BddCacheData *entry; int res; if (ISCONST(r) || LEVEL(r) > quantlast) return r; entry = BddCache_lookup(&misccache, RESTRHASH(r,miscid)); if (entry->a == r && entry->c == miscid) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif if (INSVARSET(LEVEL(r))) { if (quantvarset[LEVEL(r)] > 0) res = restrict_rec(HIGH(r)); else res = restrict_rec(LOW(r)); } else { PUSHREF( restrict_rec(LOW(r)) ); PUSHREF( restrict_rec(HIGH(r)) ); res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); POPREF(2); } entry->a = r; entry->c = miscid; entry->r.res = res; return res; } /*=== GENERALIZED COFACTOR =============================================*/ /* NAME {* bdd\_constrain *} SECTION {* operator *} SHORT {* generalized cofactor *} PROTO {* BDD bdd_constrain(BDD f, BDD c) *} DESCR {* Computes the generalized cofactor of {\tt f} with respect to {\tt c}. *} RETURN {* The constrained BDD *} ALSO {* bdd\_restrict, bdd\_simplify *} */ BDD bdd_constrain(BDD f, BDD c) { BDD res; firstReorder = 1; CHECKa(f,bddfalse); CHECKa(c,bddfalse); again: if (setjmp(bddexception) == 0) { INITREF; miscid = CACHEID_CONSTRAIN; if (!firstReorder) bdd_disable_reorder(); res = constrain_rec(f, c); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD constrain_rec(BDD f, BDD c) { BddCacheData *entry; BDD res; if (ISONE(c)) return f; if (ISCONST(f)) return f; if (c == f) return BDDONE; if (ISZERO(c)) return BDDZERO; entry = BddCache_lookup(&misccache, CONSTRAINHASH(f,c)); if (entry->a == f && entry->b == c && entry->c == miscid) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif if (LEVEL(f) == LEVEL(c)) { if (ISZERO(LOW(c))) res = constrain_rec(HIGH(f), HIGH(c)); else if (ISZERO(HIGH(c))) res = constrain_rec(LOW(f), LOW(c)); else { PUSHREF( constrain_rec(LOW(f), LOW(c)) ); PUSHREF( constrain_rec(HIGH(f), HIGH(c)) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); POPREF(2); } } else if (LEVEL(f) < LEVEL(c)) { PUSHREF( constrain_rec(LOW(f), c) ); PUSHREF( constrain_rec(HIGH(f), c) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); POPREF(2); } else { if (ISZERO(LOW(c))) res = constrain_rec(f, HIGH(c)); else if (ISZERO(HIGH(c))) res = constrain_rec(f, LOW(c)); else { PUSHREF( constrain_rec(f, LOW(c)) ); PUSHREF( constrain_rec(f, HIGH(c)) ); res = bdd_makenode(LEVEL(c), READREF(2), READREF(1)); POPREF(2); } } entry->a = f; entry->b = c; entry->c = miscid; entry->r.res = res; return res; } /*=== REPLACE ==========================================================*/ /* NAME {* bdd\_replace *} SECTION {* operator *} SHORT {* replaces variables with other variables *} PROTO {* BDD bdd_replace(BDD r, bddPair *pair) *} DESCR {* Replaces all variables in the BDD {\tt r} with the variables defined by {\tt pair}. Each entry in {\tt pair} consists of a old and a new variable. Whenever the old variable is found in {\tt r} then a new node with the new variable is inserted instead. *} ALSO {* bdd\_newpair, bdd\_setpair, bdd\_setpairs *} RETURN {* The result of the operation. *} */ BDD bdd_replace(BDD r, bddPair *pair) { BDD res; firstReorder = 1; CHECKa(r, bddfalse); again: if (setjmp(bddexception) == 0) { INITREF; replacepair = pair->result; replacelast = pair->last; replaceid = (pair->id << 2) | CACHEID_REPLACE; if (!firstReorder) bdd_disable_reorder(); res = replace_rec(r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD replace_rec(BDD r) { BddCacheData *entry; BDD res; if (ISCONST(r) || LEVEL(r) > replacelast) return r; entry = BddCache_lookup(&replacecache, REPLACEHASH(r)); if (entry->a == r && entry->c == replaceid) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif PUSHREF( replace_rec(LOW(r)) ); PUSHREF( replace_rec(HIGH(r)) ); res = bdd_correctify(LEVEL(replacepair[LEVEL(r)]), READREF(2), READREF(1)); POPREF(2); entry->a = r; entry->c = replaceid; entry->r.res = res; return res; } static BDD bdd_correctify(int level, BDD l, BDD r) { BDD res; if (level < LEVEL(l) && level < LEVEL(r)) return bdd_makenode(level, l, r); if (level == LEVEL(l) || level == LEVEL(r)) { bdd_error(BDD_REPLACE); return 0; } if (LEVEL(l) == LEVEL(r)) { PUSHREF( bdd_correctify(level, LOW(l), LOW(r)) ); PUSHREF( bdd_correctify(level, HIGH(l), HIGH(r)) ); res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); } else if (LEVEL(l) < LEVEL(r)) { PUSHREF( bdd_correctify(level, LOW(l), r) ); PUSHREF( bdd_correctify(level, HIGH(l), r) ); res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); } else { PUSHREF( bdd_correctify(level, l, LOW(r)) ); PUSHREF( bdd_correctify(level, l, HIGH(r)) ); res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); } POPREF(2); return res; /* FIXME: cache ? */ } /*=== COMPOSE ==========================================================*/ /* NAME {* bdd\_compose *} SECTION {* operator *} SHORT {* functional composition *} PROTO {* BDD bdd_compose(BDD f, BDD g, int var) *} DESCR {* Substitutes the variable {\tt var} with the BDD {\tt g} in the BDD {\tt f}: result $= f[g/var]$. *} RETURN {* The composed BDD *} ALSO {* bdd\_veccompose, bdd\_replace, bdd\_restrict *} */ BDD bdd_compose(BDD f, BDD g, int var) { BDD res; firstReorder = 1; CHECKa(f, bddfalse); CHECKa(g, bddfalse); if (var < 0 || var >= bddvarnum) { bdd_error(BDD_VAR); return bddfalse; } again: if (setjmp(bddexception) == 0) { INITREF; composelevel = bddvar2level[var]; replaceid = (composelevel << 2) | CACHEID_COMPOSE; if (!firstReorder) bdd_disable_reorder(); res = compose_rec(f, g); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD compose_rec(BDD f, BDD g) { BddCacheData *entry; BDD res; if (LEVEL(f) > composelevel) return f; entry = BddCache_lookup(&replacecache, COMPOSEHASH(f,g)); if (entry->a == f && entry->b == g && entry->c == replaceid) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif if (LEVEL(f) < composelevel) { if (LEVEL(f) == LEVEL(g)) { PUSHREF( compose_rec(LOW(f), LOW(g)) ); PUSHREF( compose_rec(HIGH(f), HIGH(g)) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); } else if (LEVEL(f) < LEVEL(g)) { PUSHREF( compose_rec(LOW(f), g) ); PUSHREF( compose_rec(HIGH(f), g) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); } else { PUSHREF( compose_rec(f, LOW(g)) ); PUSHREF( compose_rec(f, HIGH(g)) ); res = bdd_makenode(LEVEL(g), READREF(2), READREF(1)); } POPREF(2); } else /*if (LEVEL(f) == composelevel) changed 2-nov-98 */ { res = ite_rec(g, HIGH(f), LOW(f)); } entry->a = f; entry->b = g; entry->c = replaceid; entry->r.res = res; return res; } /* NAME {* bdd\_veccompose *} SECTION {* operator *} SHORT {* simultaneous functional composition *} PROTO {* BDD bdd_veccompose(BDD f, bddPair *pair) *} DESCR {* Uses the pairs of variables and BDDs in {\tt pair} to make the simultaneous substitution: $f[g_1/V_1, \ldots, g_n/V_n]$. In this way one or more BDDs may be substituted in one step. The BDDs in {\tt pair} may depend on the variables they are substituting. {\tt bdd\_compose} may be used instead of {\tt bdd\_replace} but is not as efficient when $g_i$ is a single variable, the same applies to {\tt bdd\_restrict}. Note that simultaneous substitution is not necessarily the same as repeated substitution. Example: $(x_1 \disj x_2)[x_3/x_1,x_4/x_3] = (x_3 \disj x_2) \neq ((x_1 \disj x_2)[x_3/x_1])[x_4/x_3] = (x_4 \disj x_2)$. *} RETURN {* The composed BDD *} ALSO {* bdd\_compose, bdd\_replace, bdd\_restrict *} */ BDD bdd_veccompose(BDD f, bddPair *pair) { BDD res; firstReorder = 1; CHECKa(f, bddfalse); again: if (setjmp(bddexception) == 0) { INITREF; replacepair = pair->result; replaceid = (pair->id << 2) | CACHEID_VECCOMPOSE; replacelast = pair->last; if (!firstReorder) bdd_disable_reorder(); res = veccompose_rec(f); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD veccompose_rec(BDD f) { BddCacheData *entry; register BDD res; if (LEVEL(f) > replacelast) return f; entry = BddCache_lookup(&replacecache, VECCOMPOSEHASH(f)); if (entry->a == f && entry->c == replaceid) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif PUSHREF( veccompose_rec(LOW(f)) ); PUSHREF( veccompose_rec(HIGH(f)) ); res = ite_rec(replacepair[LEVEL(f)], READREF(1), READREF(2)); POPREF(2); entry->a = f; entry->c = replaceid; entry->r.res = res; return res; } /*=== SIMPLIFY =========================================================*/ /* NAME {* bdd\_simplify *} SECTION {* operator *} SHORT {* coudert and Madre's restrict function *} PROTO {* BDD bdd_simplify(BDD f, BDD d) *} DESCR {* Tries to simplify the BDD {\tt f} by restricting it to the domaine covered by {\tt d}. No checks are done to see if the result is actually smaller than the input. This can be done by the user with a call to {\tt bdd\_nodecount}. *} ALSO {* bdd\_restrict *} RETURN {* The simplified BDD *} */ BDD bdd_simplify(BDD f, BDD d) { BDD res; firstReorder = 1; CHECKa(f, bddfalse); CHECKa(d, bddfalse); again: if (setjmp(bddexception) == 0) { INITREF; applyop = bddop_or; if (!firstReorder) bdd_disable_reorder(); res = simplify_rec(f, d); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static BDD simplify_rec(BDD f, BDD d) { BddCacheData *entry; BDD res; if (ISONE(d) || ISCONST(f)) return f; if (d == f) return BDDONE; if (ISZERO(d)) return BDDZERO; entry = BddCache_lookup(&applycache, APPLYHASH(f,d,bddop_simplify)); if (entry->a == f && entry->b == d && entry->c == bddop_simplify) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif if (LEVEL(f) == LEVEL(d)) { if (ISZERO(LOW(d))) res = simplify_rec(HIGH(f), HIGH(d)); else if (ISZERO(HIGH(d))) res = simplify_rec(LOW(f), LOW(d)); else { PUSHREF( simplify_rec(LOW(f), LOW(d)) ); PUSHREF( simplify_rec(HIGH(f), HIGH(d)) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); POPREF(2); } } else if (LEVEL(f) < LEVEL(d)) { PUSHREF( simplify_rec(LOW(f), d) ); PUSHREF( simplify_rec(HIGH(f), d) ); res = bdd_makenode(LEVEL(f), READREF(2), READREF(1)); POPREF(2); } else /* LEVEL(d) < LEVEL(f) */ { PUSHREF( apply_rec(LOW(d), HIGH(d)) ); /* Exist quant */ res = simplify_rec(f, READREF(1)); POPREF(1); } entry->a = f; entry->b = d; entry->c = bddop_simplify; entry->r.res = res; return res; } /*=== QUANTIFICATION ===================================================*/ /* NAME {* bdd\_exist *} SECTION {* operator *} SHORT {* existential quantification of variables *} PROTO {* BDD bdd_exist(BDD r, BDD var) *} DESCR {* Removes all occurences in {\tt r} of variables in the set {\tt var} by existential quantification. *} ALSO {* bdd\_forall, bdd\_unique, bdd\_makeset *} RETURN {* The quantified BDD. *} */ BDD bdd_exist(BDD r, BDD var) { BDD res; firstReorder = 1; CHECKa(r, bddfalse); CHECKa(var, bddfalse); if (var < 2) /* Empty set */ return r; again: if (setjmp(bddexception) == 0) { if (varset2vartable(var) < 0) return bddfalse; INITREF; quantid = (var << 3) | CACHEID_EXIST; /* FIXME: range */ applyop = bddop_or; if (!firstReorder) bdd_disable_reorder(); res = quant_rec(r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } /* NAME {* bdd\_forall *} SECTION {* operator *} SHORT {* universal quantification of variables *} PROTO {* BDD bdd_forall(BDD r, BDD var) *} DESCR {* Removes all occurences in {\tt r} of variables in the set {\tt var} by universal quantification. *} ALSO {* bdd\_exist, bdd\_unique, bdd\_makeset *} RETURN {* The quantified BDD. *} */ BDD bdd_forall(BDD r, BDD var) { BDD res; firstReorder = 1; CHECKa(r, bddfalse); CHECKa(var, bddfalse); if (var < 2) /* Empty set */ return r; again: if (setjmp(bddexception) == 0) { if (varset2vartable(var) < 0) return bddfalse; INITREF; quantid = (var << 3) | CACHEID_FORALL; applyop = bddop_and; if (!firstReorder) bdd_disable_reorder(); res = quant_rec(r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } /* NAME {* bdd\_unique *} SECTION {* operator *} SHORT {* unique quantification of variables *} PROTO {* BDD bdd_unique(BDD r, BDD var) *} DESCR {* Removes all occurences in {\tt r} of variables in the set {\tt var} by unique quantification. This type of quantification uses a XOR operator instead of an OR operator as in the existential quantification, and an AND operator as in the universal quantification. *} ALSO {* bdd\_exist, bdd\_forall, bdd\_makeset *} RETURN {* The quantified BDD. *} */ BDD bdd_unique(BDD r, BDD var) { BDD res; firstReorder = 1; CHECKa(r, bddfalse); CHECKa(var, bddfalse); if (var < 2) /* Empty set */ return r; again: if (setjmp(bddexception) == 0) { if (varset2vartable(var) < 0) return bddfalse; INITREF; quantid = (var << 3) | CACHEID_UNIQUE; applyop = bddop_xor; if (!firstReorder) bdd_disable_reorder(); res = quant_rec(r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static int quant_rec(int r) { BddCacheData *entry; int res; if (r < 2 || LEVEL(r) > quantlast) return r; entry = BddCache_lookup(&quantcache, QUANTHASH(r)); if (entry->a == r && entry->c == quantid) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif PUSHREF( quant_rec(LOW(r)) ); PUSHREF( quant_rec(HIGH(r)) ); if (INVARSET(LEVEL(r))) res = apply_rec(READREF(2), READREF(1)); else res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); POPREF(2); entry->a = r; entry->c = quantid; entry->r.res = res; return res; } /*=== APPLY & QUANTIFY =================================================*/ /* NAME {* bdd\_appex *} SECTION {* operator *} SHORT {* apply operation and existential quantification *} PROTO {* BDD bdd_appex(BDD left, BDD right, int opr, BDD var) *} DESCR {* Applies the binary operator {\tt opr} to the arguments {\tt left} and {\tt right} and then performs an existential quantification of the variables from the variable set {\tt var}. This is done in a bottom up manner such that both the apply and quantification is done on the lower nodes before stepping up to the higher nodes. This makes the {\tt bdd\_appex} function much more efficient than an apply operation followed by a quantification. If the operator is a conjunction then this is similar to the relational product of the two BDDs. \index{relational product} *} ALSO {* bdd\_appall, bdd\_appuni, bdd\_apply, bdd\_exist, bdd\_forall, bdd\_unique, bdd\_makeset *} RETURN {* The result of the operation. *} */ BDD bdd_appex(BDD l, BDD r, int opr, BDD var) { BDD res; firstReorder = 1; CHECKa(l, bddfalse); CHECKa(r, bddfalse); CHECKa(var, bddfalse); if (opr<0 || opr>bddop_invimp) { bdd_error(BDD_OP); return bddfalse; } if (var < 2) /* Empty set */ return bdd_apply(l,r,opr); again: if (setjmp(bddexception) == 0) { if (varset2vartable(var) < 0) return bddfalse; INITREF; applyop = bddop_or; appexop = opr; appexid = (var << 5) | (appexop << 1); /* FIXME: range! */ quantid = (appexid << 3) | CACHEID_APPEX; if (!firstReorder) bdd_disable_reorder(); res = appquant_rec(l, r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } /* NAME {* bdd\_appall *} SECTION {* operator *} SHORT {* apply operation and universal quantification *} PROTO {* BDD bdd_appall(BDD left, BDD right, int opr, BDD var) *} DESCR {* Applies the binary operator {\tt opr} to the arguments {\tt left} and {\tt right} and then performs an universal quantification of the variables from the variable set {\tt var}. This is done in a bottom up manner such that both the apply and quantification is done on the lower nodes before stepping up to the higher nodes. This makes the {\tt bdd\_appall} function much more efficient than an apply operation followed by a quantification. *} ALSO {* bdd\_appex, bdd\_appuni, bdd\_apply, bdd\_exist, bdd\_forall, bdd\_unique, bdd\_makeset *} RETURN {* The result of the operation. *} */ BDD bdd_appall(BDD l, BDD r, int opr, BDD var) { BDD res; firstReorder = 1; CHECKa(l, bddfalse); CHECKa(r, bddfalse); CHECKa(var, bddfalse); if (opr<0 || opr>bddop_invimp) { bdd_error(BDD_OP); return bddfalse; } if (var < 2) /* Empty set */ return bdd_apply(l,r,opr); again: if (setjmp(bddexception) == 0) { if (varset2vartable(var) < 0) return bddfalse; INITREF; applyop = bddop_and; appexop = opr; appexid = (var << 5) | (appexop << 1) | 1; /* FIXME: range! */ quantid = (appexid << 3) | CACHEID_APPAL; if (!firstReorder) bdd_disable_reorder(); res = appquant_rec(l, r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } /* NAME {* bdd\_appuni *} SECTION {* operator *} SHORT {* apply operation and unique quantification *} PROTO {* BDD bdd_appuni(BDD left, BDD right, int opr, BDD var) *} DESCR {* Applies the binary operator {\tt opr} to the arguments {\tt left} and {\tt right} and then performs a unique quantification of the variables from the variable set {\tt var}. This is done in a bottom up manner such that both the apply and quantification is done on the lower nodes before stepping up to the higher nodes. This makes the {\tt bdd\_appuni} function much more efficient than an apply operation followed by a quantification. *} ALSO {* bdd\_appex, bdd\_appall, bdd\_apply, bdd\_exist, bdd\_unique, bdd\_forall, bdd\_makeset *} RETURN {* The result of the operation. *} */ BDD bdd_appuni(BDD l, BDD r, int opr, BDD var) { BDD res; firstReorder = 1; CHECKa(l, bddfalse); CHECKa(r, bddfalse); CHECKa(var, bddfalse); if (opr<0 || opr>bddop_invimp) { bdd_error(BDD_OP); return bddfalse; } if (var < 2) /* Empty set */ return bdd_apply(l,r,opr); again: if (setjmp(bddexception) == 0) { if (varset2vartable(var) < 0) return bddfalse; INITREF; applyop = bddop_xor; appexop = opr; appexid = (var << 5) | (appexop << 1) | 1; /* FIXME: range! */ quantid = (appexid << 3) | CACHEID_APPUN; if (!firstReorder) bdd_disable_reorder(); res = appquant_rec(l, r); if (!firstReorder) bdd_enable_reorder(); } else { bdd_checkreorder(); if (firstReorder-- == 1) goto again; res = BDDZERO; /* avoid warning about res being uninitialized */ } checkresize(); return res; } static int appquant_rec(int l, int r) { BddCacheData *entry; int res; switch (appexop) { case bddop_and: if (l == 0 || r == 0) return 0; if (l == r) return quant_rec(l); if (l == 1) return quant_rec(r); if (r == 1) return quant_rec(l); break; case bddop_or: if (l == 1 || r == 1) return 1; if (l == r) return quant_rec(l); if (l == 0) return quant_rec(r); if (r == 0) return quant_rec(l); break; case bddop_xor: if (l == r) return 0; if (l == 0) return quant_rec(r); if (r == 0) return quant_rec(l); break; case bddop_nand: if (l == 0 || r == 0) return 1; break; case bddop_nor: if (l == 1 || r == 1) return 0; break; } if (ISCONST(l) && ISCONST(r)) res = oprres[appexop][(l<<1) | r]; else if (LEVEL(l) > quantlast && LEVEL(r) > quantlast) { int oldop = applyop; applyop = appexop; res = apply_rec(l,r); applyop = oldop; } else { entry = BddCache_lookup(&appexcache, APPEXHASH(l,r,appexop)); if (entry->a == l && entry->b == r && entry->c == appexid) { #ifdef CACHESTATS bddcachestats.opHit++; #endif return entry->r.res; } #ifdef CACHESTATS bddcachestats.opMiss++; #endif if (LEVEL(l) == LEVEL(r)) { PUSHREF( appquant_rec(LOW(l), LOW(r)) ); PUSHREF( appquant_rec(HIGH(l), HIGH(r)) ); if (INVARSET(LEVEL(l))) res = apply_rec(READREF(2), READREF(1)); else res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); } else if (LEVEL(l) < LEVEL(r)) { PUSHREF( appquant_rec(LOW(l), r) ); PUSHREF( appquant_rec(HIGH(l), r) ); if (INVARSET(LEVEL(l))) res = apply_rec(READREF(2), READREF(1)); else res = bdd_makenode(LEVEL(l), READREF(2), READREF(1)); } else { PUSHREF( appquant_rec(l, LOW(r)) ); PUSHREF( appquant_rec(l, HIGH(r)) ); if (INVARSET(LEVEL(r))) res = apply_rec(READREF(2), READREF(1)); else res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); } POPREF(2); entry->a = l; entry->b = r; entry->c = appexid; entry->r.res = res; } return res; } /************************************************************************* Informational functions *************************************************************************/ /*=== SUPPORT ==========================================================*/ /* NAME {* bdd\_support *} SECTION {* info *} SHORT {* returns the variable support of a BDD *} PROTO {* BDD bdd_support(BDD r) *} DESCR {* Finds all the variables that {\tt r} depends on. That is the support of {\tt r}. *} ALSO {* bdd\_makeset *} RETURN {* A BDD variable set. *} */ BDD bdd_support(BDD r) { static int supportSize = 0; int n; int res=1; CHECKa(r, bddfalse); if (r < 2) return bddfalse; /* On-demand allocation of support set */ if (supportSize < bddvarnum) { if ((supportSet=(int*)malloc(bddvarnum*sizeof(int))) == NULL) { bdd_error(BDD_MEMORY); return bddfalse; } memset(supportSet, 0, bddvarnum*sizeof(int)); supportSize = bddvarnum; supportID = 0; } /* Update global variables used to speed up bdd_support() * - instead of always memsetting support to zero, we use * a change counter. * - and instead of reading the whole array afterwards, we just * look from 'min' to 'max' used BDD variables. */ if (supportID == 0x0FFFFFFF) { /* We probably don't get here -- but let's just be sure */ memset(supportSet, 0, bddvarnum*sizeof(int)); supportID = 0; } ++supportID; supportMin = LEVEL(r); supportMax = supportMin; support_rec(r, supportSet); bdd_unmark(r); bdd_disable_reorder(); for (n=supportMax ; n>=supportMin ; --n) if (supportSet[n] == supportID) { register BDD tmp; bdd_addref(res); tmp = bdd_makenode(n, 0, res); bdd_delref(res); res = tmp; } bdd_enable_reorder(); return res; } static void support_rec(int r, int* support) { BddNode *node; if (r < 2) return; node = &bddnodes[r]; if (LEVELp(node) & MARKON || LOWp(node) == -1) return; support[LEVELp(node)] = supportID; if (LEVELp(node) > supportMax) supportMax = LEVELp(node); LEVELp(node) |= MARKON; support_rec(LOWp(node), support); support_rec(HIGHp(node), support); } /*=== ONE SATISFYING VARIABLE ASSIGNMENT ===============================*/ /* NAME {* bdd\_satone *} SECTION {* operator *} SHORT {* finds one satisfying variable assignment *} PROTO {* BDD bdd_satone(BDD r) *} DESCR {* Finds a BDD with at most one variable at each level. This BDD implies {\tt r} and is not false unless {\tt r} is false. *} ALSO {* bdd\_allsat bdd\_satoneset, bdd\_fullsatone, bdd\_satcount, bdd\_satcountln *} RETURN {* The result of the operation. *} */ BDD bdd_satone(BDD r) { BDD res; CHECKa(r, bddfalse); if (r < 2) return r; bdd_disable_reorder(); INITREF; res = satone_rec(r); bdd_enable_reorder(); checkresize(); return res; } static BDD satone_rec(BDD r) { if (ISCONST(r)) return r; if (ISZERO(LOW(r))) { BDD res = satone_rec(HIGH(r)); return PUSHREF( bdd_makenode(LEVEL(r), BDDZERO, res) ); } else { BDD res = satone_rec(LOW(r)); return PUSHREF( bdd_makenode(LEVEL(r), res, BDDZERO) ); } } /* NAME {* bdd\_satoneset *} SECTION {* operator *} SHORT {* finds one satisfying variable assignment *} PROTO {* BDD bdd_satoneset(BDD r, BDD var, BDD pol) *} DESCR {* Finds a minterm in {\tt r}. The {\tt var} argument is a variable set that defines a set of variables that {\em must} be mentioned in the result. The polarity of these variables in result---in case they are undefined in {\tt r}---are defined by the {\tt pol} parameter. If {\tt pol} is the false BDD then the variables will be in negative form, and otherwise they will be in positive form. *} ALSO {* bdd\_allsat bdd\_satone, bdd\_fullsatone, bdd\_satcount, bdd\_satcountln *} RETURN {* The result of the operation. *} */ BDD bdd_satoneset(BDD r, BDD var, BDD pol) { BDD res; CHECKa(r, bddfalse); if (ISZERO(r)) return r; if (!ISCONST(pol)) { bdd_error(BDD_ILLBDD); return bddfalse; } bdd_disable_reorder(); INITREF; satPolarity = pol; res = satoneset_rec(r, var); bdd_enable_reorder(); checkresize(); return res; } static BDD satoneset_rec(BDD r, BDD var) { if (ISCONST(r) && ISCONST(var)) return r; if (LEVEL(r) < LEVEL(var)) { if (ISZERO(LOW(r))) { BDD res = satoneset_rec(HIGH(r), var); return PUSHREF( bdd_makenode(LEVEL(r), BDDZERO, res) ); } else { BDD res = satoneset_rec(LOW(r), var); return PUSHREF( bdd_makenode(LEVEL(r), res, BDDZERO) ); } } else if (LEVEL(var) < LEVEL(r)) { BDD res = satoneset_rec(r, HIGH(var)); if (satPolarity == BDDONE) return PUSHREF( bdd_makenode(LEVEL(var), BDDZERO, res) ); else return PUSHREF( bdd_makenode(LEVEL(var), res, BDDZERO) ); } else /* LEVEL(r) == LEVEL(var) */ { if (ISZERO(LOW(r))) { BDD res = satoneset_rec(HIGH(r), HIGH(var)); return PUSHREF( bdd_makenode(LEVEL(r), BDDZERO, res) ); } else { BDD res = satoneset_rec(LOW(r), HIGH(var)); return PUSHREF( bdd_makenode(LEVEL(r), res, BDDZERO) ); } } } /*=== EXACTLY ONE SATISFYING VARIABLE ASSIGNMENT =======================*/ /* NAME {* bdd\_fullsatone *} SECTION {* operator *} SHORT {* finds one satisfying variable assignment *} PROTO {* BDD bdd_fullsatone(BDD r) *} DESCR {* Finds a BDD with exactly one variable at all levels. This BDD implies {\tt r} and is not false unless {\tt r} is false. *} ALSO {* bdd\_allsat bdd\_satone, bdd\_satoneset, bdd\_satcount, bdd\_satcountln *} RETURN {* The result of the operation. *} */ BDD bdd_fullsatone(BDD r) { BDD res; int v; CHECKa(r, bddfalse); if (r == 0) return 0; bdd_disable_reorder(); INITREF; res = fullsatone_rec(r); for (v=LEVEL(r)-1 ; v>=0 ; v--) { res = PUSHREF( bdd_makenode(v, res, 0) ); } bdd_enable_reorder(); checkresize(); return res; } static int fullsatone_rec(int r) { if (r < 2) return r; if (LOW(r) != 0) { int res = fullsatone_rec(LOW(r)); int v; for (v=LEVEL(LOW(r))-1 ; v>LEVEL(r) ; v--) { res = PUSHREF( bdd_makenode(v, res, 0) ); } return PUSHREF( bdd_makenode(LEVEL(r), res, 0) ); } else { int res = fullsatone_rec(HIGH(r)); int v; for (v=LEVEL(HIGH(r))-1 ; v>LEVEL(r) ; v--) { res = PUSHREF( bdd_makenode(v, res, 0) ); } return PUSHREF( bdd_makenode(LEVEL(r), 0, res) ); } } /*=== ALL SATISFYING VARIABLE ASSIGNMENTS ==============================*/ /* NAME {* bdd\_allsat *} SECTION {* operator *} SHORT {* finds all satisfying variable assignments *} PROTO {* BDD bdd_satone(BDD r, bddallsathandler handler) *} DESCR {* Iterates through all legal variable assignments (those that make the BDD come true) for the bdd {\tt r} and calls the callback handler {\tt handler} for each of them. The array passed to {\tt handler} contains one entry for each of the globaly defined variables. Each entry is either 0 if the variable is false, 1 if it is true, and -1 if it is a don't care. The following is an example of a callback handler that prints 'X' for don't cares, '0' for zero, and '1' for one: \begin{verbatim} void allsatPrintHandler(char* varset, int size) { for (int v=0; v=0 ; --v) allsatProfile[bddlevel2var[v]] = -1; allsatHandler = handler; INITREF; allsat_rec(r); free(allsatProfile); } static void allsat_rec(BDD r) { if (ISONE(r)) { allsatHandler(allsatProfile, bddvarnum); return; } if (ISZERO(r)) return; if (!ISZERO(LOW(r))) { int v; allsatProfile[bddlevel2var[LEVEL(r)]] = 0; for (v=LEVEL(LOW(r))-1 ; v>LEVEL(r) ; --v) { allsatProfile[bddlevel2var[v]] = -1; } allsat_rec(LOW(r)); } if (!ISZERO(HIGH(r))) { int v; allsatProfile[bddlevel2var[LEVEL(r)]] = 1; for (v=LEVEL(HIGH(r))-1 ; v>LEVEL(r) ; --v) { allsatProfile[bddlevel2var[v]] = -1; } allsat_rec(HIGH(r)); } } /*=== COUNT NUMBER OF SATISFYING ASSIGNMENT ============================*/ /* NAME {* bdd\_satcount *} EXTRA {* bdd\_setcountset *} SECTION {* info *} SHORT {* calculates the number of satisfying variable assignments *} PROTO {* double bdd_satcount(BDD r) double bdd_satcountset(BDD r, BDD varset) *} DESCR {* Calculates how many possible variable assignments there exists such that {\tt r} is satisfied (true). All defined variables are considered in the first version. In the second version, only the variables in the variable set {\tt varset} are considered. This makes the function a {\em lot} slower. *} ALSO {* bdd\_satone, bdd\_fullsatone, bdd\_satcountln *} RETURN {* The number of possible assignments. *} */ double bdd_satcount(BDD r) { double size=1; CHECKa(r, 0.0); miscid = CACHEID_SATCOU; size = pow(2.0, (double)LEVEL(r)); return size * satcount_rec(r); } double bdd_satcountset(BDD r, BDD varset) { double unused = bddvarnum; BDD n; if (ISCONST(varset) || ISZERO(r)) /* empty set */ return 0.0; for (n=varset ; !ISCONST(n) ; n=HIGH(n)) unused--; unused = bdd_satcount(r) / pow(2.0,unused); return unused >= 1.0 ? unused : 1.0; } static double satcount_rec(int root) { BddCacheData *entry; BddNode *node; double size, s; if (root < 2) return root; entry = BddCache_lookup(&misccache, SATCOUHASH(root)); if (entry->a == root && entry->c == miscid) return entry->r.dres; node = &bddnodes[root]; size = 0; s = 1; s *= pow(2.0, (float)(LEVEL(LOWp(node)) - LEVELp(node) - 1)); size += s * satcount_rec(LOWp(node)); s = 1; s *= pow(2.0, (float)(LEVEL(HIGHp(node)) - LEVELp(node) - 1)); size += s * satcount_rec(HIGHp(node)); entry->a = root; entry->c = miscid; entry->r.dres = size; return size; } /* NAME {* bdd\_satcountln *} EXTRA {* bdd\_setcountlnset *} SECTION {* info *} SHORT {* calculates the log. number of satisfying variable assignments *} PROTO {* double bdd_satcountln(BDD r) double bdd_satcountlnset(BDD r, BDD varset)*} DESCR {* Calculates how many possible variable assignments there exists such that {\tt r} is satisfied (true) and returns the logarithm of this. The result is calculated in such a manner that it is practically impossible to get an overflow, which is very possible for {\tt bdd\_satcount} if the number of defined variables is too large. All defined variables are considered in the first version. In the second version, only the variables in the variable set {\tt varset} are considered. This makes the function a {\em lot} slower! *} ALSO {* bdd\_satone, bdd\_fullsatone, bdd\_satcount *} RETURN {* The logarithm of the number of possible assignments. *} */ double bdd_satcountln(BDD r) { double size; CHECKa(r, 0.0); miscid = CACHEID_SATCOULN; size = satcountln_rec(r); if (size >= 0.0) size += LEVEL(r); return size; } double bdd_satcountlnset(BDD r, BDD varset) { double unused = bddvarnum; BDD n; if (ISCONST(varset)) /* empty set */ return 0.0; for (n=varset ; !ISCONST(n) ; n=HIGH(n)) unused--; unused = bdd_satcountln(r) - unused; return unused >= 0.0 ? unused : 0.0; } static double satcountln_rec(int root) { BddCacheData *entry; BddNode *node; double size, s1,s2; if (root == 0) return -1.0; if (root == 1) return 0.0; entry = BddCache_lookup(&misccache, SATCOUHASH(root)); if (entry->a == root && entry->c == miscid) return entry->r.dres; node = &bddnodes[root]; s1 = satcountln_rec(LOWp(node)); if (s1 >= 0.0) s1 += LEVEL(LOWp(node)) - LEVELp(node) - 1; s2 = satcountln_rec(HIGHp(node)); if (s2 >= 0.0) s2 += LEVEL(HIGHp(node)) - LEVELp(node) - 1; if (s1 < 0.0) size = s2; else if (s2 < 0.0) size = s1; else if (s1 < s2) size = s2 + log1p(pow(2.0,s1-s2)) / M_LN2; else size = s1 + log1p(pow(2.0,s2-s1)) / M_LN2; entry->a = root; entry->c = miscid; entry->r.dres = size; return size; } /*=== COUNT NUMBER OF ALLOCATED NODES ==================================*/ /* NAME {* bdd\_nodecount *} SECTION {* info *} SHORT {* counts the number of nodes used for a BDD *} PROTO {* int bdd_nodecount(BDD r) *} DESCR {* Traverses the BDD and counts all distinct nodes that are used for the BDD. *} RETURN {* The number of nodes. *} ALSO {* bdd\_pathcount, bdd\_satcount, bdd\_anodecount *} */ int bdd_nodecount(BDD r) { int num=0; CHECK(r); bdd_markcount(r, &num); bdd_unmark(r); return num; } /* NAME {* bdd\_anodecount *} SECTION {* info *} SHORT {* counts the number of shared nodes in an array of BDDs *} PROTO {* int bdd_anodecount(BDD *r, int num) *} DESCR {* Traverses all of the BDDs in {\tt r} and counts all distinct nodes that are used in the BDDs--if a node is used in more than one BDD then it only counts once. The {\tt num} parameter holds the size of the array. *} RETURN {* The number of nodes *} ALSO {* bdd\_nodecount *} */ int bdd_anodecount(BDD *r, int num) { int n; int cou=0; for (n=0 ; na == r && entry->c == miscid) return entry->r.dres; size = bdd_pathcount_rec(LOW(r)) + bdd_pathcount_rec(HIGH(r)); entry->a = r; entry->c = miscid; entry->r.dres = size; return size; } /************************************************************************* Other internal functions *************************************************************************/ static int varset2vartable(BDD r) { BDD n; if (r < 2) return bdd_error(BDD_VARSET); quantvarsetID++; if (quantvarsetID == INT_MAX) { memset(quantvarset, 0, sizeof(int)*bddvarnum); quantvarsetID = 1; } for (n=r ; n > 1 ; n=HIGH(n)) { quantvarset[LEVEL(n)] = quantvarsetID; quantlast = LEVEL(n); } return 0; } static int varset2svartable(BDD r) { BDD n; if (r < 2) return bdd_error(BDD_VARSET); quantvarsetID++; if (quantvarsetID == INT_MAX/2) { memset(quantvarset, 0, sizeof(int)*bddvarnum); quantvarsetID = 1; } for (n=r ; !ISCONST(n) ; ) { if (ISZERO(LOW(n))) { quantvarset[LEVEL(n)] = quantvarsetID; n = HIGH(n); } else { quantvarset[LEVEL(n)] = -quantvarsetID; n = LOW(n); } quantlast = LEVEL(n); } return 0; } /* EOF */ buddy-2.4/src/bddtree.h0000664000076500001440000000520210067023422010516 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/bddtree.h,v 1.1.1.1 2004/06/25 13:22:26 haimcohen Exp $ FILE: tree.h DESCR: Trees for BDD variables AUTH: Jorn Lind DATE: (C) march 1998 *************************************************************************/ #ifndef _TREE_H #define _TREE_H typedef struct s_BddTree { int first, last; /* First and last variable in this block */ int pos; /* Sifting position */ int *seq; /* Sequence of first...last in the current order */ char fixed; /* Are the sub-blocks fixed or may they be reordered */ int id; /* A sequential id number given by addblock */ struct s_BddTree *next, *prev; struct s_BddTree *nextlevel; } BddTree; BddTree *bddtree_new(int); void bddtree_del(BddTree *); BddTree *bddtree_addrange(BddTree *, int, int, int, int); void bddtree_print(FILE *, BddTree *, int); #endif /* _TREE_H */ /* EOF */ buddy-2.4/src/bvec.c0000664000076500001440000010514610067023432010030 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/bvec.c,v 1.1.1.1 2004/06/25 13:22:34 haimcohen Exp $ FILE: bvec.c DESCR: Boolean vector arithmetics using BDDs AUTH: Jorn Lind DATE: (C) may 1999 *************************************************************************/ #include #include "kernel.h" #include "bvec.h" #define DEFAULT(v) { v.bitnum=0; v.bitvec=NULL; } /************************************************************************* *************************************************************************/ static bvec bvec_build(int bitnum, int isTrue) { bvec vec; int n; vec.bitvec = NEW(BDD,bitnum); vec.bitnum = bitnum; if (!vec.bitvec) { bdd_error(BDD_MEMORY); vec.bitnum = 0; return vec; } for (n=0 ; n 0) { val >>= 1; bitnum++; } return bitnum; } #endif /* NAME {* bvec\_copy *} SECTION {* bvec *} SHORT {* create a copy of a bvec *} PROTO {* bvec bvec_copy(bvec src) *} DESCR {* Returns a copy of {\tt src}. The result is reference counted. *} ALSO {* bvec\_con *} */ bvec bvec_copy(bvec src) { bvec dst; int n; if (src.bitnum == 0) { DEFAULT(dst); return dst; } dst = bvec_build(src.bitnum,0); for (n=0 ; n> 1; } return v; } /* NAME {* bvec\_var *} SECTION {* bvec *} SHORT {* build a boolean vector with BDD variables *} PROTO {* bvec bvec_var(int bitnum, int offset, int step) *} DESCR {* Builds a boolean vector with the BDD variables $v_1, \ldots, v_n$ as the elements. Each variable will be the the variabled numbered {\tt offset + N*step} where {\tt N} ranges from 0 to {\tt bitnum}-1.*} RETURN {* The boolean vector (which is already reference counted) *} ALSO {* bvec\_true, bvec\_false, bvec\_con *} */ bvec bvec_var(int bitnum, int offset, int step) { bvec v; int n; v = bvec_build(bitnum,0); for (n=0 ; n=0 ; n--) if (ISONE(e.bitvec[n])) val = (val << 1) | 1; else if (ISZERO(e.bitvec[n])) val = val << 1; else return 0; return val; } /*======================================================================*/ /* NAME {* bvec\_free *} SECTION {* bvec *} SHORT {* frees all memory used by a boolean vector *} PROTO {* void bvec_free(bvec v) *} DESCR {* Use this function to release any unused boolean vectors. The decrease of the reference counts on the BDDs in {\tt v} is done by {\tt bvec\_free}. *} */ void bvec_free(bvec v) { bvec_delref(v); free(v.bitvec); } /* NAME {* bvec\_addref *} SECTION {* bvec *} SHORT {* increase reference count of a boolean vector *} PROTO {* bvec bvec_addref(bvec v) *} DESCR {* Use this function to increase the reference count of all BDDs in a {\tt v}. Please note that all boolean vectors returned from BuDDy are reference counted from the beginning. *} RETURN {* The boolean vector {\tt v} *} ALSO {* bvec\_delref *} */ bvec bvec_addref(bvec v) { int n; for (n=0 ; n>1); if (c & 0x1) { res = bvec_add(e, rest); bvec_free(rest); } else res = rest; bvec_free(next); return res; } /* NAME {* bvec\_mul *} SECTION {* bvec *} SHORT {* builds a boolean vector for multiplication *} PROTO {* bvec bvec_mul(bvec l, bvec r) *} DESCR {* Builds a boolean vector representing the multiplication of {\tt l} and {\tt r}. *} RETURN {* The result of the multiplication (which is already reference counted) *} ALSO {* bvec\_mulfixed, bvec\_div, bvec\_add, bvec\_shl *} */ bvec bvec_mul(bvec left, bvec right) { int n; int bitnum = left.bitnum + right.bitnum; bvec res; bvec leftshifttmp; bvec leftshift; if (left.bitnum == 0 || right.bitnum == 0) { DEFAULT(res); return res; } res = bvec_false(bitnum); leftshifttmp = bvec_copy(left); leftshift = bvec_coerce(bitnum, leftshifttmp); /*bvec_delref(leftshifttmp);*/ bvec_free(leftshifttmp); for (n=0 ; n=1 ; m--) leftshift.bitvec[m] = leftshift.bitvec[m-1]; leftshift.bitvec[0] = bddfalse; /*bvec_delref(added);*/ bvec_free(added); } /*bvec_delref(leftshift);*/ bvec_free(leftshift); return res; } static void bvec_div_rec(bvec divisor, bvec *remainder, bvec *result, int step) { int n; BDD isSmaller = bdd_addref( bvec_lte(divisor, *remainder) ); bvec newResult = bvec_shlfixed( *result, 1, isSmaller ); bvec zero = bvec_build(divisor.bitnum, bddfalse); bvec newRemainder, tmp, sub = bvec_build(divisor.bitnum, bddfalse); for (n=0 ; nbitvec[divisor.bitnum-1]); if (step > 1) bvec_div_rec( divisor, &newRemainder, &newResult, step-1 ); bvec_free(tmp); bvec_free(sub); bvec_free(zero); bdd_delref(isSmaller); bvec_free(*remainder); bvec_free(*result); *result = newResult; *remainder = newRemainder; } /* NAME {* bvec\_divfixed *} SECTION {* bvec *} SHORT {* builds a boolean vector for division by a constant *} PROTO {* int bvec_div(bvec e, int c, bvec *res, bvec *rem) *} DESCR {* Builds a new boolean vector representing the integer division of {\tt e} with {\tt c}. The result of the division will be stored in {\tt res} and the remainder of the division will be stored in {\tt rem}. Both vectors should be initialized as the function will try to release the nodes used by them. If an error occurs then the nodes will {\em not} be freed. *} RETURN {* Zero on success or a negative error code on error. *} ALSO {* bvec\_div, bvec\_mul, bvec\_add, bvec\_shl *} */ int bvec_divfixed(bvec e, int c, bvec *res, bvec *rem) { if (c > 0) { bvec divisor = bvec_con(e.bitnum, c); bvec tmp = bvec_build(e.bitnum, 0); bvec tmpremainder = bvec_shlfixed(tmp, 1, e.bitvec[e.bitnum-1]); bvec result = bvec_shlfixed(e, 1, bddfalse); bvec remainder; bvec_div_rec(divisor, &tmpremainder, &result, divisor.bitnum); remainder = bvec_shrfixed(tmpremainder, 1, bddfalse); bvec_free(tmp); bvec_free(tmpremainder); bvec_free(divisor); *res = result; *rem = remainder; return 0; } return bdd_error(BVEC_DIVZERO); } #if 0 void p(bvec x) { int n; for (n=0 ; n 0) res.bitvec[right.bitnum-n] = divLteRem; /* Shift 'div' one bit right */ bdd_delref(div.bitvec[0]); for (m=0 ; m= 0) tmp1 = bdd_addref( bdd_and(rEquN, l.bitvec[m-n]) ); else tmp1 = bdd_addref( bdd_and(rEquN, c) ); tmp2 = bdd_addref( bdd_or(res.bitvec[m], tmp1) ); bdd_delref(tmp1); bdd_delref(res.bitvec[m]); res.bitvec[m] = tmp2; } bdd_delref(rEquN); /*bvec_delref(val);*/ bvec_free(val); } /* At last make sure 'c' is shiftet in for r-values > l-bitnum */ val = bvec_con(r.bitnum, l.bitnum); rEquN = bvec_gth(r, val); tmp1 = bdd_addref( bdd_and(rEquN, c) ); for (m=0 ; m l-bitnum */ val = bvec_con(r.bitnum, l.bitnum); rEquN = bvec_gth(r, val); tmp1 = bdd_addref( bdd_and(rEquN, c) ); for (m=0 ; m y$ *} PROTO {* bdd bvec_gth(bvec l, bvec r) *} DESCR {* Returns the BDD representing {\tt l > r} ({\em not} reference counted). Both vectors must have the same number of bits. *} ALSO {* bvec\_lth, bvec\_lte, bvec\_gte, bvec\_equ, bvec\_neq *} */ bdd bvec_gth(bvec l, bvec r) { BDD tmp = bdd_addref( bvec_lte(l,r) ); BDD p = bdd_not(tmp); bdd_delref(tmp); return p; } /* NAME {* bvec\_gte *} SECTION {* bvec *} SHORT {* calculates the truth value of $x \geq y$ *} PROTO {* bdd bvec_gte(bvec l, bvec r) *} DESCR {* Returns the BDD representing {\tt l}$\geq${\tt r} ({\em not} reference counted). Both vectors must have the same number of bits. *} ALSO {* bvec\_lth, bvec\_gth, bvec\_gth, bvec\_equ, bvec\_neq *} */ bdd bvec_gte(bvec l, bvec r) { BDD tmp = bdd_addref( bvec_lth(l,r) ); BDD p = bdd_not(tmp); bdd_delref(tmp); return p; } /* NAME {* bvec\_equ *} SECTION {* bvec *} SHORT {* calculates the truth value of $x = y$ *} PROTO {* bdd bvec_equ(bvec l, bvec r) *} DESCR {* Returns the BDD representing {\tt l = r} ({\em not} reference counted). Both vectors must have the same number of bits. *} ALSO {* bvec\_lth, bvec\_lte, bvec\_gth, bvec\_gte, bvec\_neq *} */ bdd bvec_equ(bvec l, bvec r) { BDD p = bddtrue; int n; if (l.bitnum == 0 || r.bitnum == 0) return bddfalse; if (l.bitnum != r.bitnum) { bdd_error(BVEC_SIZE); return p; } for (n=0 ; n #include "kernel.h" #include "cache.h" #include "prime.h" /************************************************************************* *************************************************************************/ int BddCache_init(BddCache *cache, int size) { int n; size = bdd_prime_gte(size); if ((cache->table=NEW(BddCacheData,size)) == NULL) return bdd_error(BDD_MEMORY); for (n=0 ; ntable[n].a = -1; cache->tablesize = size; return 0; } void BddCache_done(BddCache *cache) { free(cache->table); cache->table = NULL; cache->tablesize = 0; } int BddCache_resize(BddCache *cache, int newsize) { int n; free(cache->table); newsize = bdd_prime_gte(newsize); if ((cache->table=NEW(BddCacheData,newsize)) == NULL) return bdd_error(BDD_MEMORY); for (n=0 ; ntable[n].a = -1; cache->tablesize = newsize; return 0; } void BddCache_reset(BddCache *cache) { register int n; for (n=0 ; ntablesize ; n++) cache->table[n].a = -1; } /* EOF */ buddy-2.4/src/cache.h0000664000076500001440000000476510067023432010166 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/cache.h,v 1.1.1.1 2004/06/25 13:22:34 haimcohen Exp $ FILE: cache.h DESCR: Cache class for caching apply/exist etc. results AUTH: Jorn Lind DATE: (C) june 1997 *************************************************************************/ #ifndef _CACHE_H #define _CACHE_H typedef struct { union { double dres; int res; } r; int a,b,c; } BddCacheData; typedef struct { BddCacheData *table; int tablesize; } BddCache; extern int BddCache_init(BddCache *, int); extern void BddCache_done(BddCache *); extern int BddCache_resize(BddCache *, int); extern void BddCache_reset(BddCache *); #define BddCache_lookup(cache, hash) (&(cache)->table[hash % (cache)->tablesize]) #endif /* _CACHE_H */ /* EOF */ buddy-2.4/src/cppext.cxx0000664000076500001440000003500110067023437010771 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/cppext.cxx,v 1.1.1.1 2004/06/25 13:22:39 haimcohen Exp $ FILE: cppext.cxx DESCR: C++ extension of BDD package AUTH: Jorn Lind DATE: (C) august 1997 *************************************************************************/ #include #include #include #include "kernel.h" #include "bvec.h" using namespace std; /* Formatting objects for iostreams */ #define IOFORMAT_SET 0 #define IOFORMAT_TABLE 1 #define IOFORMAT_DOT 2 #define IOFORMAT_ALL 3 #define IOFORMAT_FDDSET 4 int bdd_ioformat::curformat = IOFORMAT_SET; bdd_ioformat bddset(IOFORMAT_SET); bdd_ioformat bddtable(IOFORMAT_TABLE); bdd_ioformat bdddot(IOFORMAT_DOT); bdd_ioformat bddall(IOFORMAT_ALL); bdd_ioformat fddset(IOFORMAT_FDDSET); /* Constant true and false extension */ const bdd bddtruepp = bdd_true(); const bdd bddfalsepp = bdd_false(); /* Internal prototypes */ static void bdd_printset_rec(ostream&, int, int*); static void bdd_printdot_rec(ostream&, int); static void fdd_printset_rec(ostream &, int, int *); static bddstrmhandler strmhandler_bdd; static bddstrmhandler strmhandler_fdd; // Avoid calling C++ version of anodecount #undef bdd_anodecount /************************************************************************* Setup (and shutdown) *************************************************************************/ #undef bdd_init int bdd_cpp_init(int n, int c) { int ok = bdd_init(n,c); strmhandler_bdd = NULL; strmhandler_fdd = NULL; return ok; } /************************************************************************* BDD C++ functions *************************************************************************/ bdd bdd_buildcube(int val, int width, const bdd *variables) { BDD *var = NEW(BDD,width); BDD res; int n; // No need for ref.cou. since variables[n] holds the reference for (n=0 ; n 0) { if (!first) o << ", "; first = 0; if (strmhandler_bdd) strmhandler_bdd(o,bddlevel2var[n]); else o << bddlevel2var[n]; o << ":" << (set[n]==2 ? 1 : 0); } } o << ">"; } else { set[LEVEL(r)] = 1; bdd_printset_rec(o, LOW(r), set); set[LEVEL(r)] = 2; bdd_printset_rec(o, HIGH(r), set); set[LEVEL(r)] = 0; } } static void bdd_printdot_rec(ostream& o, int r) { if (ISCONST(r) || MARKED(r)) return; o << r << "[label=\""; if (strmhandler_bdd) strmhandler_bdd(o,bddlevel2var[LEVEL(r)]); else o << bddlevel2var[LEVEL(r)]; o << "\"];\n"; o << r << " -> " << LOW(r) << "[style=dotted];\n"; o << r << " -> " << HIGH(r) << "[style=filled];\n"; SETMARK(r); bdd_printdot_rec(o, LOW(r)); bdd_printdot_rec(o, HIGH(r)); } static void fdd_printset_rec(ostream &o, int r, int *set) { int n,m,i; int used = 0; int *binval; int ok, first; if (r == 0) return; else if (r == 1) { o << "<"; first=1; int fdvarnum = fdd_domainnum(); for (n=0 ; n"; } else { set[bddlevel2var[LEVEL(r)]] = 1; fdd_printset_rec(o, LOW(r), set); set[bddlevel2var[LEVEL(r)]] = 2; fdd_printset_rec(o, HIGH(r), set); set[bddlevel2var[LEVEL(r)]] = 0; } } /*=[ FDD I/O functions ]================================================*/ /* NAME {* fdd\_strm\_hook *} SECTION {* fdd *} SHORT {* Specifies a printing callback handler *} PROTO {* bddstrmhandler fdd_strm_hook(bddstrmhandler handler) *} DESCR {* A printing callback handler for use with FDDs is used to convert the FDD integer identifier into something readable by the end user. Typically the handler will print a string name instead of the identifier. A handler could look like this: \begin{verbatim} void printhandler(ostream &o, int var) { extern char **names; o << names[var]; } \end{verbatim} \noindent The handler can then be passed to BuDDy like this: {\tt fdd\_strm\_hook(printhandler)}. No default handler is supplied. The argument {\tt handler} may be NULL if no handler is needed. *} RETURN {* The old handler *} ALSO {* fdd\_printset, bdd\_file\_hook *} */ bddstrmhandler fdd_strm_hook(bddstrmhandler handler) { bddstrmhandler old = strmhandler_fdd; strmhandler_fdd = handler; return old; } /************************************************************************* bvec functions *************************************************************************/ bvec bvec::operator=(const bvec &src) { if (&src != this) { bvec_free(roots); roots = bvec_copy(src.roots); } return *this; } void bvec::set(int bitnum, const bdd &b) { bdd_delref(roots.bitvec[bitnum]); roots.bitvec[bitnum] = b.root; bdd_addref(roots.bitvec[bitnum]); } /*======================================================================*/ bvec bvec_map1(const bvec &a, bdd (*fun)(const bdd &)) { bvec res; int n; res = bvec_false(a.bitnum()); for (n=0 ; n < a.bitnum() ; n++) res.set(n, fun(a[n])); return res; } bvec bvec_map2(const bvec &a, const bvec &b, bdd (*fun)(const bdd &, const bdd &)) { bvec res; int n; if (a.bitnum() != b.bitnum()) { bdd_error(BVEC_SIZE); return res; } res = bvec_false(a.bitnum()); for (n=0 ; n < a.bitnum() ; n++) res.set(n, fun(a[n], b[n])); return res; } bvec bvec_map3(const bvec &a, const bvec &b, const bvec &c, bdd (*fun)(const bdd &, const bdd &, const bdd &)) { bvec res; int n; if (a.bitnum() != b.bitnum() || b.bitnum() != c.bitnum()) { bdd_error(BVEC_SIZE); return res; } res = bvec_false(a.bitnum()); for (n=0 ; n < a.bitnum() ; n++) res.set(n, fun(a[n], b[n], c[n]) ); return res; } ostream &operator<<(ostream &o, const bvec &v) { for (int i=0 ; i #include #include "kernel.h" #include "fdd.h" static void fdd_printset_rec(FILE *, int, int *); /*======================================================================*/ /* NOTE: ALL FDD operations works with LSB in top of the variable order */ /* and in index zero of the domain tables */ /*======================================================================*/ typedef struct s_Domain { int realsize; /* The specified domain (0...N-1) */ int binsize; /* The number of BDD variables representing the domain */ int *ivar; /* Variable indeces for the variable set */ BDD var; /* The BDD variable set */ } Domain; static void Domain_allocate(Domain*, int); static void Domain_done(Domain*); static int firstbddvar; static int fdvaralloc; /* Number of allocated domains */ static int fdvarnum; /* Number of defined domains */ static Domain *domain; /* Table of domain sizes */ static bddfilehandler filehandler; /************************************************************************* Domain definition *************************************************************************/ void bdd_fdd_init(void) { domain = NULL; fdvarnum = fdvaralloc = 0; firstbddvar = 0; } void bdd_fdd_done(void) { int n; if (domain != NULL) { for (n=0 ; n fdvaralloc) { fdvaralloc += (num > fdvaralloc) ? num : fdvaralloc; domain = (Domain*)realloc(domain, sizeof(Domain)*fdvaralloc); if (domain == NULL) return bdd_error(BDD_MEMORY); } } /* Create bdd variable tables */ for (n=0 ; n bddvarnum) bdd_setvarnum(firstbddvar + extravars); /* Set correct variable sequence (interleaved) */ for (bn=0,more=1 ; more ; bn++) { more = 0; for (n=0 ; n= fdvarnum || v2 < 0 || v2 >= fdvarnum) return bdd_error(BDD_VAR); if (fdvarnum + 1 > fdvaralloc) { fdvaralloc += fdvaralloc; domain = (Domain*)realloc(domain, sizeof(Domain)*fdvaralloc); if (domain == NULL) return bdd_error(BDD_MEMORY); } d = &domain[fdvarnum]; d->realsize = domain[v1].realsize * domain[v2].realsize; d->binsize = domain[v1].binsize + domain[v2].binsize; d->ivar = (int *)malloc(sizeof(int)*d->binsize); for (n=0 ; nivar[n] = domain[v1].ivar[n]; for (n=0 ; nivar[domain[v1].binsize+n] = domain[v2].ivar[n]; d->var = bdd_makeset(d->ivar, d->binsize); bdd_addref(d->var); return fdvarnum++; } /* NAME {* fdd\_clearall *} SECTION {* fdd *} SHORT {* clear all allocated FDD blocks *} PROTO {* void fdd_clearall(void) *} DESCR {* Removes all defined finite domain blocks defined by {\tt fdd\_extdomain()} and {\tt fdd\_overlapdomain()} *} */ void fdd_clearall(void) { bdd_fdd_done(); bdd_fdd_init(); } /************************************************************************* FDD helpers *************************************************************************/ /* NAME {* fdd\_domainnum *} SECTION {* fdd *} SHORT {* number of defined finite domain blocks *} PROTO {* int fdd_domainnum(void) *} DESCR {* Returns the number of finite domain blocks define by calls to {\tt bdd\_extdomain}. *} RETURN {* The number of defined finite domain blocks or a negative error code *} ALSO {* fdd\_domainsize, fdd\_extdomain *} */ int fdd_domainnum(void) { if (!bddrunning) return bdd_error(BDD_RUNNING); return fdvarnum; } /* NAME {* fdd\_domainsize *} SECTION {* fdd *} SHORT {* real size of a finite domain block *} PROTO {* int fdd_domainsize(int var) *} DESCR {* Returns the size of the domain for the finite domain block {\tt var}. *} RETURN {* The size or a negative error code *} ALSO {* fdd\_domainnum *} */ int fdd_domainsize(int v) { if (!bddrunning) return bdd_error(BDD_RUNNING); if (v < 0 || v >= fdvarnum) return bdd_error(BDD_VAR); return domain[v].realsize; } /* NAME {* fdd\_varnum *} SECTION {* fdd *} SHORT {* binary size of a finite domain block *} PROTO {* int fdd_varnum(int var) *} DESCR {* Returns the number of BDD variables used for the finite domain block {\tt var}. *} RETURN {* The number of variables or a negative error code *} ALSO {* fdd\_vars *} */ int fdd_varnum(int v) { if (!bddrunning) return bdd_error(BDD_RUNNING); if (v >= fdvarnum || v < 0) return bdd_error(BDD_VAR); return domain[v].binsize; } /* NAME {* fdd\_vars *} SECTION {* fdd *} SHORT {* all BDD variables associated with a finite domain block *} PROTO {* int *fdd_vars(int var) *} DESCR {* Returns an integer array containing the BDD variables used to define the finite domain block {\tt var}. The size of the array is the number of variables used to define the finite domain block. The array will have the Least Significant Bit at pos 0. The array must {\em not} be deallocated. *} RETURN {* Integer array contaning the variable numbers or NULL if {\tt v} is an unknown block. *} ALSO {* fdd\_varnum *} */ int *fdd_vars(int v) { if (!bddrunning) { bdd_error(BDD_RUNNING); return NULL; } if (v >= fdvarnum || v < 0) { bdd_error(BDD_VAR); return NULL; } return domain[v].ivar; } /************************************************************************* FDD primitives *************************************************************************/ /* NAME {* fdd\_ithvar *} SECTION {* fdd *} SHORT {* the BDD for the i'th FDD set to a specific value *} PROTO {* BDD fdd_ithvar(int var, int val) *} DESCR {* Returns the BDD that defines the value {\tt val} for the finite domain block {\tt var}. The encoding places the Least Significant Bit at the top of the BDD tree (which means they will have the lowest variable index). The returned BDD will be $V_0 \conj V_1 \conj \ldots \conj V_N$ where each $V_i$ will be in positive or negative form depending on the value of {\tt val}. *} RETURN {* The correct BDD or the constant false BDD on error. *} ALSO {* fdd\_ithset *} */ BDD fdd_ithvar(int var, int val) { int n; int v=1, tmp; if (!bddrunning) { bdd_error(BDD_RUNNING); return bddfalse; } if (var < 0 || var >= fdvarnum) { bdd_error(BDD_VAR); return bddfalse; } if (val < 0 || val >= domain[var].realsize) { bdd_error(BDD_RANGE); return bddfalse; } for (n=0 ; n>= 1; } return v; } /* NAME {* fdd\_scanvar *} SECTION {* fdd *} SHORT {* Finds one satisfying value of a FDD variable *} PROTO {* int fdd_scanvar(BDD r, int var) *} DESCR {* Finds one satisfying assignment of the FDD variable {\tt var} in the BDD {\tt r} and returns this value. *} RETURN {* The value of a satisfying assignment of {\tt var}. If {\tt r} is the trivially false BDD, then a negative value is returned. *} ALSO {* fdd\_scanallvar *} */ int fdd_scanvar(BDD r, int var) { int *allvar; int res; CHECK(r); if (r == bddfalse) return -1; if (var < 0 || var >= fdvarnum) return bdd_error(BDD_VAR); allvar = fdd_scanallvar(r); res = allvar[var]; free(allvar); return res; } /* NAME {* fdd\_scanallvar *} SECTION {* fdd *} SHORT {* Finds one satisfying value of all FDD variables *} PROTO {* int* fdd_scanallvar(BDD r) *} DESCR {* Finds one satisfying assignment in {\tt r} of all the defined FDD variables. Each value is stored in an array which is returned. The size of this array is exactly the number of FDD variables defined. It is the user's responsibility to free this array using {\tt free()}. *} RETURN {* An array with all satisfying values. If {\tt r} is the trivially false BDD, then NULL is returned. *} ALSO {* fdd\_scanvar *} */ int* fdd_scanallvar(BDD r) { int n; char *store; int *res; BDD p = r; CHECKa(r,NULL); if (r == bddfalse) return NULL; store = NEW(char,bddvarnum); for (n=0 ; n=0 ; m--) if ( store[domain[n].ivar[m]] ) val = val*2 + 1; else val = val*2; res[n] = val; } free(store); return res; } /* NAME {* fdd\_ithset *} SECTION {* fdd *} SHORT {* the variable set for the i'th finite domain block *} PROTO {* BDD fdd_ithset(int var) *} DESCR {* Returns the variable set that contains the variables used to define the finite domain block {\tt var}. *} RETURN {* The variable set or the constant false BDD on error. *} ALSO {* fdd\_ithvar *} */ BDD fdd_ithset(int var) { if (!bddrunning) { bdd_error(BDD_RUNNING); return bddfalse; } if (var < 0 || var >= fdvarnum) { bdd_error(BDD_VAR); return bddfalse; } return domain[var].var; } /* NAME {* fdd\_domain *} SECTION {* fdd *} SHORT {* BDD encoding of the domain of a FDD variable *} PROTO {* BDD fdd_domain(int var) *} DESCR {* Returns what corresponds to a disjunction of all possible values of the variable {\tt var}. This is more efficient than doing {\tt fdd\_ithvar(var,0) OR fdd\_ithvar(var,1) ...} explicitely for all values in the domain of {\tt var}. *} RETURN {* The encoding of the domain*} */ BDD fdd_domain(int var) { int n,val; Domain *dom; BDD d; if (!bddrunning) { bdd_error(BDD_RUNNING); return bddfalse; } if (var < 0 || var >= fdvarnum) { bdd_error(BDD_VAR); return bddfalse; } /* Encode V<=X-1. V is the variables in 'var' and X is the domain size */ dom = &domain[var]; val = dom->realsize-1; d = bddtrue; for (n=0 ; nbinsize ; n++) { BDD tmp; if (val & 0x1) tmp = bdd_apply( bdd_nithvar(dom->ivar[n]), d, bddop_or ); else tmp = bdd_apply( bdd_nithvar(dom->ivar[n]), d, bddop_and ); val >>= 1; bdd_addref(tmp); bdd_delref(d); d = tmp; } return d; } /* NAME {* fdd\_equals *} SECTION {* fdd *} SHORT {* returns a BDD setting two FD. blocks equal *} PROTO {* BDD fdd_equals(int f, int g) *} DESCR {* Builds a BDD which is true for all the possible assignments to the variable blocks {\tt f} and {\tt g} that makes the blocks equal. This is more or less just a shorthand for calling {\tt fdd\_equ()}. *} RETURN {* The correct BDD or the constant false on errors. *} */ BDD fdd_equals(int left, int right) { BDD e = bddtrue, tmp1, tmp2; int n; if (!bddrunning) { bdd_error(BDD_RUNNING); return bddfalse; } if (left < 0 || left >= fdvarnum || right < 0 || right >= fdvarnum) { bdd_error(BDD_VAR); return bddfalse; } if (domain[left].realsize != domain[right].realsize) { bdd_error(BDD_RANGE); return bddfalse; } for (n=0 ; n"); } else { set[bddlevel2var[LEVEL(r)]] = 1; fdd_printset_rec(ofile, LOW(r), set); set[bddlevel2var[LEVEL(r)]] = 2; fdd_printset_rec(ofile, HIGH(r), set); set[bddlevel2var[LEVEL(r)]] = 0; } } /*======================================================================*/ /* NAME {* fdd\_scanset *} SECTION {* fdd *} SHORT {* scans a variable set *} PROTO {* int fdd_scanset(BDD r, int **varset, int *varnum) *} DESCR {* Scans the BDD {\tt r} to find all occurences of FDD variables and then stores these in {\tt varset}. {\tt varset} will be set to point to an array of size {\tt varnum} which will contain the indices of the found FDD variables. It is the users responsibility to free {\tt varset} after use. *} RETURN {* Zero on success or a negative error code on error. *} ALSO {* fdd\_makeset *} */ int fdd_scanset(BDD r, int **varset, int *varnum) { int *fv, fn; int num,n,m,i; if (!bddrunning) return bdd_error(BDD_RUNNING); if ((n=bdd_scanset(r, &fv, &fn)) < 0) return n; for (n=0,num=0 ; n= fdvarnum) { bdd_error(BDD_VAR); return bddfalse; } for (n=0 ; n last || first < 0 || last >= fdvarnum) return bdd_error(BDD_VARBLK); for (n=first ; n<=last ; n++) { bdd_addref(res); tmp = bdd_apply(domain[n].var, res, bddop_and); bdd_delref(res); res = tmp; } err = bdd_addvarblock(res, fixed); bdd_delref(res); return err; } /* NAME {* fdd\_setpair *} SECTION {* fdd *} SHORT {* defines a pair for two finite domain blocks *} PROTO {* int fdd_setpair(bddPair *pair, int p1, int p2) *} DESCR {* Defines each variable in the finite domain block {\tt p1} to be paired with the corresponding variable in {\tt p2}. The result is stored in {\tt pair} which must be allocated using {\tt bdd\_makepair}. *} RETURN {* Zero on success or a negative error code on error. *} ALSO {* fdd\_setpairs *} */ int fdd_setpair(bddPair *pair, int p1, int p2) { int n,e; if (!bddrunning) return bdd_error(BDD_RUNNING); if (p1<0 || p1>=fdvarnum || p2<0 || p2>=fdvarnum) return bdd_error(BDD_VAR); if (domain[p1].binsize != domain[p2].binsize) return bdd_error(BDD_VARNUM); for (n=0 ; n=fdvarnum || p2[n]<0 || p2[n]>=fdvarnum) return bdd_error(BDD_VAR); for (n=0 ; nivar); bdd_delref(d->var); } static void Domain_allocate(Domain* d, int range) { int calcsize = 2; if (range <= 0 || range > INT_MAX/2) { bdd_error(BDD_RANGE); return; } d->realsize = range; d->binsize = 1; while (calcsize < range) { d->binsize++; calcsize <<= 1; } d->ivar = (int *)malloc(sizeof(int)*d->binsize); d->var = bddtrue; } int *fdddec2bin(int var, int val) { int *res; int n = 0; res = (int *)malloc(sizeof(int)*domain[var].binsize); memset(res, 0, sizeof(int)*domain[var].binsize); while (val > 0) { if (val & 0x1) res[n] = 1; val >>= 1; n++; } return res; } /* EOF */ buddy-2.4/src/imatrix.c0000664000076500001440000000750310067023441010564 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* FILE: imatrix.cc DESCR: Interaction matrix AUTH: Jorn Lind DATE: (C) february 2000 *************************************************************************/ #include #include #include #include "kernel.h" #include "imatrix.h" /************************************************************************* *************************************************************************/ imatrix* imatrixNew(int size) { imatrix *mtx = NEW(imatrix,1); int n,m; if (!mtx) return NULL; if ((mtx->rows=NEW(char*,size)) == NULL) { free(mtx); return NULL; } for (n=0 ; nrows[n]=NEW(char,size/8+1)) == NULL) { for (m=0 ; mrows[m]); free(mtx); return NULL; } memset(mtx->rows[n], 0, size/8+1); } mtx->size = size; return mtx; } void imatrixDelete(imatrix *mtx) { int n; for (n=0 ; nsize ; n++) free(mtx->rows[n]); free(mtx->rows); free(mtx); } /*======================================================================*/ void imatrixFPrint(imatrix *mtx, FILE *ofile) { int x,y; fprintf(ofile, " "); for (x=0 ; xsize ; x++) fprintf(ofile, "%c", x < 26 ? (x+'a') : (x-26)+'A'); fprintf(ofile, "\n"); for (y=0 ; ysize ; y++) { fprintf(ofile, "%2d %c", y, y < 26 ? (y+'a') : (y-26)+'A'); for (x=0 ; xsize ; x++) fprintf(ofile, "%c", imatrixDepends(mtx,y,x) ? 'x' : ' '); fprintf(ofile, "\n"); } } void imatrixPrint(imatrix *mtx) { imatrixFPrint(mtx, stdout); } void imatrixSet(imatrix *mtx, int a, int b) { mtx->rows[a][b/8] |= 1<<(b%8); } void imatrixClr(imatrix *mtx, int a, int b) { mtx->rows[a][b/8] &= ~(1<<(b%8)); } int imatrixDepends(imatrix *mtx, int a, int b) { return mtx->rows[a][b/8] & (1<<(b%8)); } /*======================================================================*/ #if 0 void main(void) { imatrix *m = imatrixNew(16); imatrixSet(m,0,2); imatrixSet(m,8,8); imatrixSet(m,15,15); imatrixPrint(m); } #endif /* EOF */ buddy-2.4/src/imatrix.h0000664000076500001440000000451710067023441010573 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* FILE: imatrix.h DESCR: Interaction matrix AUTH: Jorn Lind DATE: (C) february 2000 *************************************************************************/ #ifndef _IMATRIX_H #define _IMATRIX_H typedef struct _imatrix { char **rows; int size; } imatrix; extern imatrix* imatrixNew(int); extern void imatrixDelete(imatrix*); extern void imatrixFPrint(imatrix*,FILE *); extern void imatrixPrint(imatrix*); extern void imatrixSet(imatrix*,int,int); extern void imatrixClr(imatrix*,int,int); extern int imatrixDepends(imatrix*,int,int); #endif /* _IMATRIX_H */ /* EOF */ buddy-2.4/src/kernel.c0000644000076500001440000012034210075047144010367 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/kernel.c,v 1.2 2004/07/13 21:04:36 haimcohen Exp $ FILE: kernel.c DESCR: implements the bdd kernel functions. AUTH: Jorn Lind DATE: (C) june 1997 WARNING: Do not use pointers to nodes across makenode calls, as makenode may resize/move the nodetable. *************************************************************************/ #include "config.h" #include #include #include #include #include #include "kernel.h" #include "cache.h" #include "prime.h" /************************************************************************* Various definitions and global variables *************************************************************************/ /*=== EXTERNAL VARIABLES FOR PACKAGE USERS =============================*/ /* NAME {* bddtrue *} SECTION {* kernel *} SHORT {* the constant true bdd *} PROTO {* extern const BDD bddtrue; *} DESCR {* This bdd holds the constant true value *} ALSO {* bddfalse, bdd\_true, bdd\_false *} */ const BDD bddtrue=1; /* The constant true bdd */ /* NAME {* bddfalse*} SECTION {* kernel *} SHORT {* the constant false bdd *} PROTO {* extern const BDD bddfalse; *} DESCR {* This bdd holds the constant false value *} ALSO {* bddtrue, bdd\_true, bdd\_false *} */ const BDD bddfalse=0; /* The constant false bdd */ /*=== INTERNAL DEFINITIONS =============================================*/ /* Min. number of nodes (%) that has to be left after a garbage collect unless a resize should be done. */ static int minfreenodes=20; /*=== GLOBAL KERNEL VARIABLES ==========================================*/ int bddrunning; /* Flag - package initialized */ int bdderrorcond; /* Some error condition */ int bddnodesize; /* Number of allocated nodes */ int bddmaxnodesize; /* Maximum allowed number of nodes */ int bddmaxnodeincrease; /* Max. # of nodes used to inc. table */ BddNode* bddnodes; /* All of the bdd nodes */ int bddfreepos; /* First free node */ int bddfreenum; /* Number of free nodes */ long int bddproduced; /* Number of new nodes ever produced */ int bddvarnum; /* Number of defined BDD variables */ int* bddrefstack; /* Internal node reference stack */ int* bddrefstacktop; /* Internal node reference stack top */ int* bddvar2level; /* Variable -> level table */ int* bddlevel2var; /* Level -> variable table */ jmp_buf bddexception; /* Long-jump point for interrupting calc. */ int bddresized; /* Flag indicating a resize of the nodetable */ bddCacheStat bddcachestats; /*=== PRIVATE KERNEL VARIABLES =========================================*/ static BDD* bddvarset; /* Set of defined BDD variables */ static int gbcollectnum; /* Number of garbage collections */ static int cachesize; /* Size of the operator caches */ static long int gbcclock; /* Clock ticks used in GBC */ static int usednodes_nextreorder; /* When to do reorder next time */ static bddinthandler err_handler; /* Error handler */ static bddgbchandler gbc_handler; /* Garbage collection handler */ static bdd2inthandler resize_handler; /* Node-table-resize handler */ /* Strings for all error mesages */ static char *errorstrings[BDD_ERRNUM] = { "Out of memory", "Unknown variable", "Value out of range", "Unknown BDD root dereferenced", "bdd_init() called twice", "File operation failed", "Incorrect file format", "Variables not in ascending order", "User called break", "Mismatch in size of variable sets", "Cannot allocate fewer nodes than already in use", "Unknown operator", "Illegal variable set", "Bad variable block operation", "Trying to decrease the number of variables", "Trying to replace with variables already in the bdd", "Number of nodes reached user defined maximum", "Unknown BDD - was not in node table", "Bad size argument", "Mismatch in bitvector size", "Illegal shift-left/right parameter", "Division by zero" }; /*=== OTHER INTERNAL DEFINITIONS =======================================*/ #define NODEHASH(lvl,l,h) (TRIPLE(lvl,l,h) % bddnodesize) /************************************************************************* BDD misc. user operations *************************************************************************/ /* NAME {* bdd\_init *} SECTION {* kernel *} SHORT {* initializes the BDD package *} PROTO {* int bdd_init(int nodesize, int cachesize) *} DESCR {* This function initiates the bdd package and {\em must} be called before any bdd operations are done. The argument {\tt nodesize} is the initial number of nodes in the nodetable and {\tt cachesize} is the fixed size of the internal caches. Typical values for {\tt nodesize} are 10000 nodes for small test examples and up to 1000000 nodes for large examples. A cache size of 10000 seems to work good even for large examples, but lesser values should do it for smaller examples. The number of cache entries can also be set to depend on the size of the nodetable using a call to {\tt bdd\_setcacheratio}. The initial number of nodes is not critical for any bdd operation as the table will be resized whenever there are to few nodes left after a garbage collection. But it does have some impact on the efficency of the operations. *} RETURN {* If no errors occur then 0 is returned, otherwise a negative error code. *} ALSO {* bdd\_done, bdd\_resize\_hook *} */ int bdd_init(int initnodesize, int cs) { int n, err; if (bddrunning) return bdd_error(BDD_RUNNING); bddnodesize = bdd_prime_gte(initnodesize); if ((bddnodes=(BddNode*)malloc(sizeof(BddNode)*bddnodesize)) == NULL) return bdd_error(BDD_MEMORY); bddresized = 0; for (n=0 ; n MAXVAR) { bdd_error(BDD_RANGE); return bddfalse; } if (num < bddvarnum) return bdd_error(BDD_DECVNUM); if (num == bddvarnum) return 0; if (bddvarset == NULL) { if ((bddvarset=(BDD*)malloc(sizeof(BDD)*num*2)) == NULL) return bdd_error(BDD_MEMORY); if ((bddlevel2var=(int*)malloc(sizeof(int)*(num+1))) == NULL) { free(bddvarset); return bdd_error(BDD_MEMORY); } if ((bddvar2level=(int*)malloc(sizeof(int)*(num+1))) == NULL) { free(bddvarset); free(bddlevel2var); return bdd_error(BDD_MEMORY); } } else { if ((bddvarset=(BDD*)realloc(bddvarset,sizeof(BDD)*num*2)) == NULL) return bdd_error(BDD_MEMORY); if ((bddlevel2var=(int*)realloc(bddlevel2var,sizeof(int)*(num+1))) == NULL) { free(bddvarset); return bdd_error(BDD_MEMORY); } if ((bddvar2level=(int*)realloc(bddvar2level,sizeof(int)*(num+1))) == NULL) { free(bddvarset); free(bddlevel2var); return bdd_error(BDD_MEMORY); } } if (bddrefstack != NULL) free(bddrefstack); bddrefstack = bddrefstacktop = (int*)malloc(sizeof(int)*(num*2+4)); for(bdv=bddvarnum ; bddvarnum < num; bddvarnum++) { bddvarset[bddvarnum*2] = PUSHREF( bdd_makenode(bddvarnum, 0, 1) ); bddvarset[bddvarnum*2+1] = bdd_makenode(bddvarnum, 1, 0); POPREF(1); if (bdderrorcond) { bddvarnum = bdv; return -bdderrorcond; } bddnodes[bddvarset[bddvarnum*2]].refcou = MAXREF; bddnodes[bddvarset[bddvarnum*2+1]].refcou = MAXREF; bddlevel2var[bddvarnum] = bddvarnum; bddvar2level[bddvarnum] = bddvarnum; } LEVEL(0) = num; LEVEL(1) = num; bddvar2level[num] = num; bddlevel2var[num] = num; bdd_pairs_resize(oldbddvarnum, bddvarnum); bdd_operator_varresize(); bdd_enable_reorder(); return 0; } /* NAME {* bdd\_extvarnum *} SECTION {* kernel *} SHORT {* add extra BDD variables *} PROTO {* int bdd_extvarnum(int num) *} DESCR {* Extends the current number of allocated BDD variables with {\tt num} extra variables. *} RETURN {* The old number of allocated variables or a negative error code. *} ALSO {* bdd\_setvarnum, bdd\_ithvar, bdd\_nithvar *} */ int bdd_extvarnum(int num) { int start = bddvarnum; if (num < 0 || num > 0x3FFFFFFF) return bdd_error(BDD_RANGE); bdd_setvarnum(bddvarnum+num); return start; } /* NAME {* bdd\_error\_hook *} SECTION {* kernel *} SHORT {* set a handler for error conditions *} PROTO {* bddinthandler bdd_error_hook(bddinthandler handler) *} DESCR {* Whenever an error occurs in the bdd package a test is done to see if an error handler is supplied by the user and if such exists then it will be called with an error code in the variable {\tt errcode}. The handler may then print any usefull information and return or exit afterwards. This function sets the handler to be {\tt handler}. If a {\tt NULL} argument is supplied then no calls are made when an error occurs. Possible error codes are found in {\tt bdd.h}. The default handler is {\tt bdd\_default\_errhandler} which will use {\tt exit()} to terminate the program. Any handler should be defined like this: \begin{verbatim} void my_error_handler(int errcode) { ... } \end{verbatim} *} RETURN {* The previous handler *} ALSO {* bdd\_errstring *} */ bddinthandler bdd_error_hook(bddinthandler handler) { bddinthandler tmp = err_handler; err_handler = handler; return tmp; } /* NAME {* bdd\_clear\_error *} SECTION {* kernel *} SHORT {* clears an error condition in the kernel *} PROTO {* void bdd_clear_error(void) *} DESCR {* The BuDDy kernel may at some point run out of new ROBDD nodes if a maximum limit is set with {\tt bdd\_setmaxnodenum}. In this case the current error handler is called and an internal error flag is set. Further calls to BuDDy will always return {\tt bddfalse}. From here BuDDy must either be restarted or {\tt bdd\_clear\_error} may be called after action is taken to let BuDDy continue. This may not be especially usefull since the default error handler exits the program - other needs may of course exist.*} ALSO {* bdd\_error\_hook, bdd\_setmaxnodenum *} */ void bdd_clear_error(void) { bdderrorcond = 0; bdd_operator_reset(); } /* NAME {* bdd\_gbc\_hook *} SECTION {* kernel *} SHORT {* set a handler for garbage collections *} PROTO {* bddgbchandler bdd_gbc_hook(bddgbchandler handler) *} DESCR {* Whenever a garbage collection is required, a test is done to see if a handler for this event is supplied by the user and if such exists then it is called, both before and after the garbage collection takes places. This is indicated by an integer flag {\tt pre} passed to the handler, which will be one before garbage collection and zero after garbage collection. This function sets the handler to be {\tt handler}. If a {\tt NULL} argument is supplied then no calls are made when a garbage collection takes place. The argument {\tt pre} indicates pre vs. post garbage collection and the argument {\tt stat} contains information about the garbage collection. The default handler is {\tt bdd\_default\_gbchandler}. Any handler should be defined like this: \begin{verbatim} void my_gbc_handler(int pre, bddGbcStat *stat) { ... } \end{verbatim} *} RETURN {* The previous handler *} ALSO {* bdd\_resize\_hook, bdd\_reorder\_hook *} */ bddgbchandler bdd_gbc_hook(bddgbchandler handler) { bddgbchandler tmp = gbc_handler; gbc_handler = handler; return tmp; } /* NAME {* bdd\_resize\_hook *} SECTION {* kernel *} SHORT {* set a handler for nodetable resizes *} PROTO {* bdd2inthandler bdd_resize_hook(bdd2inthandler handler) *} DESCR {* Whenever it is impossible to get enough free nodes by a garbage collection then the node table is resized and a test is done to see if a handler is supllied by the user for this event. If so then it is called with {\tt oldsize} being the old nodetable size and {\tt newsize} being the new nodetable size. This function sets the handler to be {\tt handler}. If a {\tt NULL} argument is supplied then no calls are made when a table resize is done. No default handler is supplied. Any handler should be defined like this: \begin{verbatim} void my_resize_handler(int oldsize, int newsize) { ... } \end{verbatim} *} RETURN {* The previous handler *} ALSO {* bdd\_gbc\_hook, bdd\_reorder\_hook, bdd\_setminfreenodes *} */ bdd2inthandler bdd_resize_hook(bdd2inthandler handler) { bdd2inthandler tmp = handler; resize_handler = handler; return tmp; } /* NAME {* bdd\_setmaxincrease *} SECTION {* kernel *} SHORT {* set max. number of nodes used to increase node table *} PROTO {* int bdd_setmaxincrease(int size) *} DESCR {* The node table is expanded by doubling the size of the table when no more free nodes can be found, but a maximum for the number of new nodes added can be set with {\tt bdd\_maxincrease} to {\tt size} nodes. The default is 50000 nodes (1 Mb). *} RETURN {* The old threshold on succes, otherwise a negative error code. *} ALSO {* bdd\_setmaxnodenum, bdd\_setminfreenodes *} */ int bdd_setmaxincrease(int size) { int old = bddmaxnodeincrease; if (size < 0) return bdd_error(BDD_SIZE); bddmaxnodeincrease = size; return old; } /* NAME {* bdd\_setmaxnodenum *} SECTION {* kernel *} SHORT {* set the maximum available number of bdd nodes *} PROTO {* int bdd_setmaxnodenum(int size) *} DESCR {* This function sets the maximal number of bdd nodes the package may allocate before it gives up a bdd operation. The argument {\tt size} is the absolute maximal number of nodes there may be allocated for the nodetable. Any attempt to allocate more nodes results in the constant false being returned and the error handler being called until some nodes are deallocated. A value of 0 is interpreted as an unlimited amount. It is {\em not} possible to specify fewer nodes than there has already been allocated. *} RETURN {* The old threshold on succes, otherwise a negative error code. *} ALSO {* bdd\_setmaxincrease, bdd\_setminfreenodes *} */ int bdd_setmaxnodenum(int size) { if (size > bddnodesize || size == 0) { int old = bddmaxnodesize; bddmaxnodesize = size; return old; } return bdd_error(BDD_NODES); } /* NAME {* bdd\_setminfreenodes *} SECTION {* kernel *} SHORT {* set min. no. of nodes to be reclaimed after GBC. *} PROTO {* int bdd_setminfreenodes(int n) *} DESCR {* Whenever a garbage collection is executed the number of free nodes left are checked to see if a resize of the node table is required. If $X = (\mathit{bddfreenum}*100)/\mathit{maxnum}$ is less than or equal to {\tt n} then a resize is initiated. The range of {\tt X} is of course $0\ldots 100$ and has some influence on how fast the package is. A low number means harder attempts to avoid resizing and saves space, and a high number reduces the time used in garbage collections. The default value is 20. *} RETURN {* The old threshold on succes, otherwise a negative error code. *} ALSO {* bdd\_setmaxnodenum, bdd\_setmaxincrease *} */ int bdd_setminfreenodes(int mf) { int old = minfreenodes; if (mf<0 || mf>100) return bdd_error(BDD_RANGE); minfreenodes = mf; return old; } /* NAME {* bdd\_getnodenum *} SECTION {* kernel *} SHORT {* get the number of active nodes in use *} PROTO {* int bdd_getnodenum(void) *} DESCR {* Returns the number of nodes in the nodetable that are currently in use. Note that dead nodes that have not been reclaimed yet by a garbage collection are counted as active. *} RETURN {* The number of nodes. *} ALSO {* bdd\_getallocnum, bdd\_setmaxnodenum *} */ int bdd_getnodenum(void) { return bddnodesize - bddfreenum; } /* NAME {* bdd\_getallocnum *} SECTION {* kernel *} SHORT {* get the number of allocated nodes *} PROTO {* int bdd_getallocnum(void) *} DESCR {* Returns the number of nodes currently allocated. This includes both dead and active nodes. *} RETURN {* The number of nodes. *} ALSO {* bdd\_getnodenum, bdd\_setmaxnodenum *} */ int bdd_getallocnum(void) { return bddnodesize; } /* NAME {* bdd\_isrunning *} SECTION {* kernel *} SHORT {* test whether the package is started or not *} PROTO {* void bdd_isrunning(void) *} DESCR {* This function tests the internal state of the package and returns a status. *} RETURN {* 1 (true) if the package has been started, otherwise 0. *} ALSO {* bdd\_init, bdd\_done *} */ int bdd_isrunning(void) { return bddrunning; } /* NAME {* bdd\_versionstr *} SECTION {* kernel *} SHORT {* returns a text string with version information *} PROTO {* char* bdd_versionstr(void) *} DESCR {* This function returns a text string with information about the version of the bdd package. *} ALSO {* bdd\_versionnum *} */ char *bdd_versionstr(void) { static char str[] = "BuDDy - release " PACKAGE_VERSION; return str; } /* NAME {* bdd\_versionnum *} SECTION {* kernel *} SHORT {* returns the version number of the bdd package *} PROTO {* int bdd_versionnum(void) *} DESCR {* This function returns the version number of the bdd package. The number is in the range 10-99 for version 1.0 to 9.9. *} ALSO {* bdd\_versionstr *} */ int bdd_versionnum(void) { return MAJOR_VERSION * 10 + MINOR_VERSION; } /* NAME {* bdd\_stats *} SECTION {* kernel *} SHORT {* returns some status information about the bdd package *} PROTO {* void bdd_stats(bddStat* stat) *} DESCR {* This function acquires information about the internal state of the bdd package. The status information is written into the {\tt stat} argument. *} ALSO {* bddStat *} */ void bdd_stats(bddStat *s) { s->produced = bddproduced; s->nodenum = bddnodesize; s->maxnodenum = bddmaxnodesize; s->freenodes = bddfreenum; s->minfreenodes = minfreenodes; s->varnum = bddvarnum; s->cachesize = cachesize; s->gbcnum = gbcollectnum; } /* NAME {* bdd\_cachestats *} SECTION {* kernel *} SHORT {* Fetch cache access usage *} PROTO {* void bdd_cachestats(bddCacheStat *s) *} DESCR {* Fetches cache usage information and stores it in {\tt s}. The fields of {\tt s} can be found in the documentaion for {\tt bddCacheStat}. This function may or may not be compiled into the BuDDy package - depending on the setup at compile time of BuDDy. *} ALSO {* bddCacheStat, bdd\_printstat *} */ void bdd_cachestats(bddCacheStat *s) { *s = bddcachestats; } /* NAME {* bdd\_printstat *} EXTRA {* bdd\_fprintstat *} SECTION {* kernel *} SHORT {* print cache statistics *} PROTO {* void bdd_printstat(void) void bdd_fprintstat(FILE *ofile) *} DESCR {* Prints information about the cache performance on standard output (or the supplied file). The information contains the number of accesses to the unique node table, the number of times a node was (not) found there and how many times a hash chain had to traversed. Hit and miss count is also given for the operator caches. *} ALSO {* bddCacheStat, bdd\_cachestats *} */ void bdd_fprintstat(FILE *ofile) { bddCacheStat s; bdd_cachestats(&s); fprintf(ofile, "\nCache statistics\n"); fprintf(ofile, "----------------\n"); fprintf(ofile, "Unique Access: %ld\n", s.uniqueAccess); fprintf(ofile, "Unique Chain: %ld\n", s.uniqueChain); fprintf(ofile, "Unique Hit: %ld\n", s.uniqueHit); fprintf(ofile, "Unique Miss: %ld\n", s.uniqueMiss); fprintf(ofile, "=> Hit rate = %.2f\n", (s.uniqueHit+s.uniqueMiss > 0) ? ((float)s.uniqueHit)/((float)s.uniqueHit+s.uniqueMiss) : 0); fprintf(ofile, "Operator Hits: %ld\n", s.opHit); fprintf(ofile, "Operator Miss: %ld\n", s.opMiss); fprintf(ofile, "=> Hit rate = %.2f\n", (s.opHit+s.opMiss > 0) ? ((float)s.opHit)/((float)s.opHit+s.opMiss) : 0); fprintf(ofile, "Swap count = %ld\n", s.swapCount); } void bdd_printstat(void) { bdd_fprintstat(stdout); } /************************************************************************* Error handler *************************************************************************/ /* NAME {* bdd\_errstring *} SECTION {* kernel *} SHORT {* converts an error code to a string*} PROTO {* const char *bdd_errstring(int errorcode) *} DESCR {* Converts a negative error code {\tt errorcode} to a descriptive string that can be used for error handling. *} RETURN {* An error description string if {\tt e} is known, otherwise {\tt NULL}. *} ALSO {* bdd\_err\_hook *} */ const char *bdd_errstring(int e) { e = abs(e); if (e<1 || e>BDD_ERRNUM) return NULL; return errorstrings[e-1]; } void bdd_default_errhandler(int e) { fprintf(stderr, "BDD error: %s\n", bdd_errstring(e)); exit(1); } int bdd_error(int e) { if (err_handler != NULL) err_handler(e); return e; } /************************************************************************* BDD primitives *************************************************************************/ /* NAME {* bdd\_true *} SECTION {* kernel *} SHORT {* returns the constant true bdd *} PROTO {* BDD bdd_true(void) *} DESCR {* This function returns the constant true bdd and can freely be used together with the {\tt bddtrue} and {\tt bddfalse} constants. *} RETURN {* The constant true bdd *} ALSO {* bdd\_false, bddtrue, bddfalse *} */ BDD bdd_true(void) { return 1; } /* NAME {* bdd\_false *} SECTION {* kernel *} SHORT {* returns the constant false bdd *} PROTO {* BDD bdd_false(void) *} DESCR {* This function returns the constant false bdd and can freely be used together with the {\tt bddtrue} and {\tt bddfalse} constants. *} RETURN {* The constant false bdd *} ALSO {* bdd\_true, bddtrue, bddfalse *} */ BDD bdd_false(void) { return 0; } /* NAME {* bdd\_ithvar *} SECTION {* kernel *} SHORT {* returns a bdd representing the I'th variable *} PROTO {* BDD bdd_ithvar(int var) *} DESCR {* This function is used to get a bdd representing the I'th variable (one node with the childs true and false). The requested variable must be in the range define by {\tt bdd\_setvarnum} starting with 0 being the first. For ease of use then the bdd returned from {\tt bdd\_ithvar} does not have to be referenced counted with a call to {\tt bdd\_addref}. The initial variable order is defined by the the index {\tt var} that also defines the position in the variable order -- variables with lower indecies are before those with higher indecies. *} RETURN {* The I'th variable on succes, otherwise the constant false bdd *} ALSO {* bdd\_setvarnum, bdd\_nithvar, bddtrue, bddfalse *} */ BDD bdd_ithvar(int var) { if (var < 0 || var >= bddvarnum) { bdd_error(BDD_VAR); return bddfalse; } return bddvarset[var*2]; } /* NAME {* bdd\_nithvar *} SECTION {* kernel *} SHORT {* returns a bdd representing the negation of the I'th variable *} PROTO {* BDD bdd_nithvar(int var) *} DESCR {* This function is used to get a bdd representing the negation of the I'th variable (one node with the childs false and true). The requested variable must be in the range define by {\tt bdd\_setvarnum} starting with 0 being the first. For ease of use then the bdd returned from {\tt bdd\_nithvar} does not have to be referenced counted with a call to {\tt bdd\_addref}. *} RETURN {* The negated I'th variable on succes, otherwise the constant false bdd *} ALSO {* bdd\_setvarnum, bdd\_ithvar, bddtrue, bddfalse *} */ BDD bdd_nithvar(int var) { if (var < 0 || var >= bddvarnum) { bdd_error(BDD_VAR); return bddfalse; } return bddvarset[var*2+1]; } /* NAME {* bdd\_varnum *} SECTION {* kernel *} SHORT {* returns the number of defined variables *} PROTO {* int bdd_varnum(void) *} DESCR {* This function returns the number of variables defined by a call to {\tt bdd\_setvarnum}.*} RETURN {* The number of defined variables *} ALSO {* bdd\_setvarnum, bdd\_ithvar *} */ int bdd_varnum(void) { return bddvarnum; } /* NAME {* bdd\_var *} SECTION {* info *} SHORT {* gets the variable labeling the bdd *} PROTO {* int bdd_var(BDD r) *} DESCR {* Gets the variable labeling the bdd {\tt r}. *} RETURN {* The variable number. *} */ int bdd_var(BDD root) { CHECK(root); if (root < 2) return bdd_error(BDD_ILLBDD); return (bddlevel2var[LEVEL(root)]); } /* NAME {* bdd\_low *} SECTION {* info *} SHORT {* gets the false branch of a bdd *} PROTO {* BDD bdd_low(BDD r) *} DESCR {* Gets the false branch of the bdd {\tt r}. *} RETURN {* The bdd of the false branch *} ALSO {* bdd\_high *} */ BDD bdd_low(BDD root) { CHECK(root); if (root < 2) return bdd_error(BDD_ILLBDD); return (LOW(root)); } /* NAME {* bdd\_high *} SECTION {* info *} SHORT {* gets the true branch of a bdd *} PROTO {* BDD bdd_high(BDD r) *} DESCR {* Gets the true branch of the bdd {\tt r}. *} RETURN {* The bdd of the true branch *} ALSO {* bdd\_low *} */ BDD bdd_high(BDD root) { CHECK(root); if (root < 2) return bdd_error(BDD_ILLBDD); return (HIGH(root)); } /************************************************************************* Garbage collection and node referencing *************************************************************************/ void bdd_default_gbchandler(int pre, bddGbcStat *s) { if (!pre) { printf("Garbage collection #%d: %d nodes / %d free", s->num, s->nodes, s->freenodes); printf(" / %.1fs / %.1fs total\n", (float)s->time/(float)(CLOCKS_PER_SEC), (float)s->sumtime/(float)CLOCKS_PER_SEC); } } static void bdd_gbc_rehash(void) { int n; bddfreepos = 0; bddfreenum = 0; for (n=bddnodesize-1 ; n>=2 ; n--) { register BddNode *node = &bddnodes[n]; if (LOWp(node) != -1) { register unsigned int hash; hash = NODEHASH(LEVELp(node), LOWp(node), HIGHp(node)); node->next = bddnodes[hash].hash; bddnodes[hash].hash = n; } else { node->next = bddfreepos; bddfreepos = n; bddfreenum++; } } } void bdd_gbc(void) { int *r; int n; long int c2, c1 = clock(); if (gbc_handler != NULL) { bddGbcStat s; s.nodes = bddnodesize; s.freenodes = bddfreenum; s.time = 0; s.sumtime = gbcclock; s.num = gbcollectnum; gbc_handler(1, &s); } for (r=bddrefstack ; r 0) bdd_mark(n); bddnodes[n].hash = 0; } bddfreepos = 0; bddfreenum = 0; for (n=bddnodesize-1 ; n>=2 ; n--) { register BddNode *node = &bddnodes[n]; if ((LEVELp(node) & MARKON) && LOWp(node) != -1) { register unsigned int hash; LEVELp(node) &= MARKOFF; hash = NODEHASH(LEVELp(node), LOWp(node), HIGHp(node)); node->next = bddnodes[hash].hash; bddnodes[hash].hash = n; } else { LOWp(node) = -1; node->next = bddfreepos; bddfreepos = n; bddfreenum++; } } bdd_operator_reset(); c2 = clock(); gbcclock += c2-c1; gbcollectnum++; if (gbc_handler != NULL) { bddGbcStat s; s.nodes = bddnodesize; s.freenodes = bddfreenum; s.time = c2-c1; s.sumtime = gbcclock; s.num = gbcollectnum; gbc_handler(0, &s); } } /* NAME {* bdd\_addref *} SECTION {* kernel *} SHORT {* increases the reference count on a node *} PROTO {* BDD bdd_addref(BDD r) *} DESCR {* Reference counting is done on externaly referenced nodes only and the count for a specific node {\tt r} can and must be increased using this function to avoid loosing the node in the next garbage collection. *} ALSO {* bdd\_delref *} RETURN {* The BDD node {\tt r}. *} */ BDD bdd_addref(BDD root) { if (root < 2 || !bddrunning) return root; if (root >= bddnodesize) return bdd_error(BDD_ILLBDD); if (LOW(root) == -1) return bdd_error(BDD_ILLBDD); INCREF(root); return root; } /* NAME {* bdd\_delref *} SECTION {* kernel *} SHORT {* decreases the reference count on a node *} PROTO {* BDD bdd_delref(BDD r) *} DESCR {* Reference counting is done on externaly referenced nodes only and the count for a specific node {\tt r} can and must be decreased using this function to make it possible to reclaim the node in the next garbage collection. *} ALSO {* bdd\_addref *} RETURN {* The BDD node {\tt r}. *} */ BDD bdd_delref(BDD root) { if (root < 2 || !bddrunning) return root; if (root >= bddnodesize) return bdd_error(BDD_ILLBDD); if (LOW(root) == -1) return bdd_error(BDD_ILLBDD); /* if the following line is present, fails there much earlier */ if (!HASREF(root)) bdd_error(BDD_BREAK); /* distinctive */ DECREF(root); return root; } /*=== RECURSIVE MARK / UNMARK ==========================================*/ void bdd_mark(int i) { BddNode *node; if (i < 2) return; node = &bddnodes[i]; if (LEVELp(node) & MARKON || LOWp(node) == -1) return; LEVELp(node) |= MARKON; bdd_mark(LOWp(node)); bdd_mark(HIGHp(node)); } void bdd_mark_upto(int i, int level) { BddNode *node = &bddnodes[i]; if (i < 2) return; if (LEVELp(node) & MARKON || LOWp(node) == -1) return; if (LEVELp(node) > level) return; LEVELp(node) |= MARKON; bdd_mark_upto(LOWp(node), level); bdd_mark_upto(HIGHp(node), level); } void bdd_markcount(int i, int *cou) { BddNode *node; if (i < 2) return; node = &bddnodes[i]; if (MARKEDp(node) || LOWp(node) == -1) return; SETMARKp(node); *cou += 1; bdd_markcount(LOWp(node), cou); bdd_markcount(HIGHp(node), cou); } void bdd_unmark(int i) { BddNode *node; if (i < 2) return; node = &bddnodes[i]; if (!MARKEDp(node) || LOWp(node) == -1) return; UNMARKp(node); bdd_unmark(LOWp(node)); bdd_unmark(HIGHp(node)); } void bdd_unmark_upto(int i, int level) { BddNode *node = &bddnodes[i]; if (i < 2) return; if (!(LEVELp(node) & MARKON)) return; LEVELp(node) &= MARKOFF; if (LEVELp(node) > level) return; bdd_unmark_upto(LOWp(node), level); bdd_unmark_upto(HIGHp(node), level); } /************************************************************************* Unique node table functions *************************************************************************/ int bdd_makenode(unsigned int level, int low, int high) { register BddNode *node; register unsigned int hash; register int res; #ifdef CACHESTATS bddcachestats.uniqueAccess++; #endif /* check whether childs are equal */ if (low == high) return low; /* Try to find an existing node of this kind */ hash = NODEHASH(level, low, high); res = bddnodes[hash].hash; while(res != 0) { if (LEVEL(res) == level && LOW(res) == low && HIGH(res) == high) { #ifdef CACHESTATS bddcachestats.uniqueHit++; #endif return res; } res = bddnodes[res].next; #ifdef CACHESTATS bddcachestats.uniqueChain++; #endif } /* No existing node -> build one */ #ifdef CACHESTATS bddcachestats.uniqueMiss++; #endif /* Any free nodes to use ? */ if (bddfreepos == 0) { if (bdderrorcond) return 0; /* Try to allocate more nodes */ bdd_gbc(); if ((bddnodesize-bddfreenum) >= usednodes_nextreorder && bdd_reorder_ready()) { longjmp(bddexception,1); } if ((bddfreenum*100) / bddnodesize <= minfreenodes) { bdd_noderesize(1); hash = NODEHASH(level, low, high); } /* Panic if that is not possible */ if (bddfreepos == 0) { bdd_error(BDD_NODENUM); bdderrorcond = abs(BDD_NODENUM); return 0; } } /* Build new node */ res = bddfreepos; bddfreepos = bddnodes[bddfreepos].next; bddfreenum--; bddproduced++; node = &bddnodes[res]; LEVELp(node) = level; LOWp(node) = low; HIGHp(node) = high; /* Insert node */ node->next = bddnodes[hash].hash; bddnodes[hash].hash = res; return res; } int bdd_noderesize(int doRehash) { BddNode *newnodes; int oldsize = bddnodesize; int n; if (bddnodesize >= bddmaxnodesize && bddmaxnodesize > 0) return -1; bddnodesize = bddnodesize << 1; if (bddnodesize > oldsize + bddmaxnodeincrease) bddnodesize = oldsize + bddmaxnodeincrease; if (bddnodesize > bddmaxnodesize && bddmaxnodesize > 0) bddnodesize = bddmaxnodesize; bddnodesize = bdd_prime_lte(bddnodesize); if (resize_handler != NULL) resize_handler(oldsize, bddnodesize); newnodes = (BddNode*)realloc(bddnodes, sizeof(BddNode)*bddnodesize); if (newnodes == NULL) return bdd_error(BDD_MEMORY); bddnodes = newnodes; if (doRehash) for (n=0 ; n 1 ; n=HIGH(n)) num++; if (((*varset) = (int *)malloc(sizeof(int)*num)) == NULL) return bdd_error(BDD_MEMORY); for (n=r, num=0 ; n > 1 ; n=HIGH(n)) (*varset)[num++] = bddlevel2var[LEVEL(n)]; *varnum = num; return 0; } /* NAME {* bdd\_makeset *} SECTION {* kernel *} SHORT {* builds a BDD variable set from an integer array *} PROTO {* BDD bdd_makeset(int *v, int n) *} DESCR {* Reads a set of variable numbers from the integer array {\tt v} which must hold exactly {\tt n} integers and then builds a BDD representing the variable set. The BDD variable set is represented as the conjunction of all the variables in their positive form and may just as well be made that way by the user. The user should keep a reference to the returned BDD instead of building it every time the set is needed. *} ALSO {* bdd\_scanset *} RETURN {* A BDD variable set. *} */ BDD bdd_makeset(int *varset, int varnum) { int v, res=1; for (v=varnum-1 ; v>=0 ; v--) { BDD tmp; bdd_addref(res); tmp = bdd_apply(res, bdd_ithvar(varset[v]), bddop_and); bdd_delref(res); res = tmp; } return res; } /* EOF */ buddy-2.4/src/kernel.h0000644000076500001440000001743010075045545010402 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/kernel.h,v 1.2 2004/07/13 20:51:49 haimcohen Exp $ FILE: kernel.h DESCR: Kernel specific definitions for BDD package AUTH: Jorn Lind DATE: (C) june 1997 *************************************************************************/ #ifndef _KERNEL_H #define _KERNEL_H /*=== Includes =========================================================*/ #include #include #include "bdd.h" /*=== SANITY CHECKS ====================================================*/ /* Make sure we use at least 32 bit integers */ #if (INT_MAX < 0x7FFFFFFF) #error The compiler does not support 4 byte integers! #endif /* Sanity check argument and return eventual error code */ #define CHECK(r)\ if (!bddrunning) return bdd_error(BDD_RUNNING);\ else if ((r) < 0 || (r) >= bddnodesize) return bdd_error(BDD_ILLBDD);\ else if (r >= 2 && LOW(r) == -1) return bdd_error(BDD_ILLBDD)\ /* Sanity check argument and return eventually the argument 'a' */ #define CHECKa(r,a)\ if (!bddrunning) { bdd_error(BDD_RUNNING); return (a); }\ else if ((r) < 0 || (r) >= bddnodesize)\ { bdd_error(BDD_ILLBDD); return (a); }\ else if (r >= 2 && LOW(r) == -1)\ { bdd_error(BDD_ILLBDD); return (a); } #define CHECKn(r)\ if (!bddrunning) { bdd_error(BDD_RUNNING); return; }\ else if ((r) < 0 || (r) >= bddnodesize)\ { bdd_error(BDD_ILLBDD); return; }\ else if (r >= 2 && LOW(r) == -1)\ { bdd_error(BDD_ILLBDD); return; } /*=== SEMI-INTERNAL TYPES ==============================================*/ typedef struct s_BddNode /* Node table entry */ { unsigned int refcou : 10; unsigned int level : 22; int low; int high; int hash; int next; } BddNode; /*=== KERNEL VARIABLES =================================================*/ #ifdef CPLUSPLUS extern "C" { #endif extern int bddrunning; /* Flag - package initialized */ extern int bdderrorcond; /* Some error condition was met */ extern int bddnodesize; /* Number of allocated nodes */ extern int bddmaxnodesize; /* Maximum allowed number of nodes */ extern int bddmaxnodeincrease; /* Max. # of nodes used to inc. table */ extern BddNode* bddnodes; /* All of the bdd nodes */ extern int bddvarnum; /* Number of defined BDD variables */ extern int* bddrefstack; /* Internal node reference stack */ extern int* bddrefstacktop; /* Internal node reference stack top */ extern int* bddvar2level; extern int* bddlevel2var; extern jmp_buf bddexception; extern int bddreorderdisabled; extern int bddresized; extern bddCacheStat bddcachestats; #ifdef CPLUSPLUS } #endif /*=== KERNEL DEFINITIONS ===============================================*/ #define MAXVAR 0x1FFFFF #define MAXREF 0x3FF /* Reference counting */ #define DECREF(n) if (bddnodes[n].refcou!=MAXREF && bddnodes[n].refcou>0) bddnodes[n].refcou-- #define INCREF(n) if (bddnodes[n].refcourefcou!=MAXREF && n->refcou>0) n->refcou-- #define INCREFp(n) if (n->refcourefcou++ #define HASREF(n) (bddnodes[n].refcou > 0) /* Marking BDD nodes */ #define MARKON 0x200000 /* Bit used to mark a node (1) */ #define MARKOFF 0x1FFFFF /* - unmark */ #define MARKHIDE 0x1FFFFF #define SETMARK(n) (bddnodes[n].level |= MARKON) #define UNMARK(n) (bddnodes[n].level &= MARKOFF) #define MARKED(n) (bddnodes[n].level & MARKON) #define SETMARKp(p) (node->level |= MARKON) #define UNMARKp(p) (node->level &= MARKOFF) #define MARKEDp(p) (node->level & MARKON) /* Hashfunctions */ #define PAIR(a,b) ((unsigned int)((((unsigned int)a)+((unsigned int)b))*(((unsigned int)a)+((unsigned int)b)+((unsigned int)1))/((unsigned int)2)+((unsigned int)a))) #define TRIPLE(a,b,c) ((unsigned int)(PAIR((unsigned int)c,PAIR(a,b)))) /* Inspection of BDD nodes */ #define ISCONST(a) ((a) < 2) #define ISNONCONST(a) ((a) >= 2) #define ISONE(a) ((a) == 1) #define ISZERO(a) ((a) == 0) #define LEVEL(a) (bddnodes[a].level) #define LOW(a) (bddnodes[a].low) #define HIGH(a) (bddnodes[a].high) #define LEVELp(p) ((p)->level) #define LOWp(p) ((p)->low) #define HIGHp(p) ((p)->high) /* Stacking for garbage collector */ #define INITREF bddrefstacktop = bddrefstack #define PUSHREF(a) *(bddrefstacktop++) = (a) #define READREF(a) *(bddrefstacktop-(a)) #define POPREF(a) bddrefstacktop -= (a) #define BDDONE 1 #define BDDZERO 0 #ifndef CLOCKS_PER_SEC /* Pass `CPPFLAGS=-DDEFAULT_CLOCK=1000' as an argument to ./configure to override this setting. */ # ifndef DEFAULT_CLOCK # define DEFAULT_CLOCK 60 # endif # define CLOCKS_PER_SEC DEFAULT_CLOCK #endif #define DEFAULTMAXNODEINC 50000 #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define NEW(t,n) ( (t*)malloc(sizeof(t)*(n)) ) /*=== KERNEL PROTOTYPES ================================================*/ #ifdef CPLUSPLUS extern "C" { #endif extern int bdd_error(int); extern int bdd_makenode(unsigned int, int, int); extern int bdd_noderesize(int); extern void bdd_checkreorder(void); extern void bdd_mark(int); extern void bdd_mark_upto(int, int); extern void bdd_markcount(int, int*); extern void bdd_unmark(int); extern void bdd_unmark_upto(int, int); extern void bdd_register_pair(bddPair*); extern int *fdddec2bin(int, int); extern int bdd_operator_init(int); extern void bdd_operator_done(void); extern void bdd_operator_varresize(void); extern void bdd_operator_reset(void); extern void bdd_pairs_init(void); extern void bdd_pairs_done(void); extern int bdd_pairs_resize(int,int); extern void bdd_pairs_vardown(int); extern void bdd_fdd_init(void); extern void bdd_fdd_done(void); extern void bdd_reorder_init(void); extern void bdd_reorder_done(void); extern int bdd_reorder_ready(void); extern void bdd_reorder_auto(void); extern int bdd_reorder_vardown(int); extern int bdd_reorder_varup(int); extern void bdd_cpp_init(void); #ifdef CPLUSPLUS } #endif #endif /* _KERNEL_H */ /* EOF */ buddy-2.4/src/pairs.c0000664000076500001440000002137710067023452010234 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/pairs.c,v 1.1.1.1 2004/06/25 13:22:50 haimcohen Exp $ FILE: pairs.c DESCR: Pair management for BDD package. AUTH: Jorn Lind DATE: february 1997 *************************************************************************/ #include #include #include "kernel.h" /*======================================================================*/ static int pairsid; /* Pair identifier */ static bddPair* pairs; /* List of all replacement pairs in use */ /************************************************************************* *************************************************************************/ void bdd_pairs_init(void) { pairsid = 0; pairs = NULL; } void bdd_pairs_done(void) { bddPair *p = pairs; int n; while (p != NULL) { bddPair *next = p->next; for (n=0 ; nresult[n] ); free(p->result); free(p); p = next; } } static int update_pairsid(void) { pairsid++; if (pairsid == (INT_MAX >> 2)) { bddPair *p; pairsid = 0; for (p=pairs ; p!=NULL ; p=p->next) p->id = pairsid++; bdd_operator_reset(); } return pairsid; } void bdd_register_pair(bddPair *p) { p->next = pairs; pairs = p; } void bdd_pairs_vardown(int level) { bddPair *p; for (p=pairs ; p!=NULL ; p=p->next) { int tmp; tmp = p->result[level]; p->result[level] = p->result[level+1]; p->result[level+1] = tmp; if (p->last == level) p->last++; } } int bdd_pairs_resize(int oldsize, int newsize) { bddPair *p; int n; for (p=pairs ; p!=NULL ; p=p->next) { if ((p->result=(BDD*)realloc(p->result,sizeof(BDD)*newsize)) == NULL) return bdd_error(BDD_MEMORY); for (n=oldsize ; nresult[n] = bdd_ithvar(bddlevel2var[n]); } return 0; } /* NAME {* bdd\_newpair *} SECTION {* kernel *} SHORT {* creates an empty variable pair table *} PROTO {* bddPair *bdd_newpair(void) *} DESCR {* Variable pairs of the type {\tt bddPair} are used in {\tt bdd\_replace} to define which variables to replace with other variables. This function allocates such an empty table. The table can be freed by a call to {\em bdd\_freepair}. *} RETURN {* Returns a new table of pairs. *} ALSO {* bdd\_freepair, bdd\_replace, bdd\_setpair, bdd\_setpairs *} */ bddPair *bdd_newpair(void) { int n; bddPair *p; if ((p=(bddPair*)malloc(sizeof(bddPair))) == NULL) { bdd_error(BDD_MEMORY); return NULL; } if ((p->result=(BDD*)malloc(sizeof(BDD)*bddvarnum)) == NULL) { free(p); bdd_error(BDD_MEMORY); return NULL; } for (n=0 ; nresult[n] = bdd_ithvar(bddlevel2var[n]); p->id = update_pairsid(); p->last = -1; bdd_register_pair(p); return p; } /* NAME {* bdd\_setpair *} EXTRA {* bdd\_setbddpair *} SECTION {* kernel *} SHORT {* set one variable pair *} PROTO {* int bdd_setpair(bddPair *pair, int oldvar, int newvar) int bdd_setbddpair(bddPair *pair, BDD oldvar, BDD newvar) *} DESCR {* Adds the pair {\tt (oldvar,newvar)} to the table of pairs {\tt pair}. This results in {\tt oldvar} being substituted with {\tt newvar} in a call to {\tt bdd\_replace}. In the first version {\tt newvar} is an integer representing the variable to be replaced with the old variable. In the second version {\tt oldvar} is a BDD. In this case the variable {\tt oldvar} is substituted with the BDD {\tt newvar}. The possibility to substitute with any BDD as {\tt newvar} is utilized in bdd\_compose, whereas only the topmost variable in the BDD is used in bdd\_replace. *} RETURN {* Zero on success, otherwise a negative error code. *} ALSO {* bdd\_newpair, bdd\_setpairs, bdd\_resetpair, bdd\_replace, bdd\_compose *} */ int bdd_setpair(bddPair *pair, int oldvar, int newvar) { if (pair == NULL) return 0; if (oldvar < 0 || oldvar > bddvarnum-1) return bdd_error(BDD_VAR); if (newvar < 0 || newvar > bddvarnum-1) return bdd_error(BDD_VAR); bdd_delref( pair->result[bddvar2level[oldvar]] ); pair->result[bddvar2level[oldvar]] = bdd_ithvar(newvar); pair->id = update_pairsid(); if (bddvar2level[oldvar] > pair->last) pair->last = bddvar2level[oldvar]; return 0; } int bdd_setbddpair(bddPair *pair, int oldvar, BDD newvar) { int oldlevel; if (pair == NULL) return 0; CHECK(newvar); if (oldvar < 0 || oldvar >= bddvarnum) return bdd_error(BDD_VAR); oldlevel = bddvar2level[oldvar]; bdd_delref( pair->result[oldlevel] ); pair->result[oldlevel] = bdd_addref(newvar); pair->id = update_pairsid(); if (oldlevel > pair->last) pair->last = oldlevel; return 0; } /* NAME {* bdd\_setpairs *} EXTRA {* bdd\_setbddpairs *} SECTION {* kernel *} SHORT {* defines a whole set of pairs *} PROTO {* int bdd_setpairs(bddPair *pair, int *oldvar, int *newvar, int size) int bdd_setbddpairs(bddPair *pair, int *oldvar, BDD *newvar, int size) *} DESCR {* As for {\tt bdd\_setpair} but with {\tt oldvar} and {\tt newvar} being arrays of variables (BDDs) of size {\tt size}. *} RETURN {* Zero on success, otherwise a negative error code. *} ALSO {* bdd\_newpair, bdd\_setpair, bdd\_replace, bdd\_compose *} */ int bdd_setpairs(bddPair *pair, int *oldvar, int *newvar, int size) { int n,e; if (pair == NULL) return 0; for (n=0 ; nnext != p) bp = bp->next; if (bp != NULL) bp->next = p->next; } else pairs = p->next; for (n=0 ; nresult[n] ); free(p->result); free(p); } /* NAME {* bdd\_resetpair *} SECTION {* kernel *} SHORT {* clear all variable pairs *} PROTO {* void bdd_resetpair(bddPair *pair) *} DESCR {* Resets the table of pairs {\tt pair} by setting all substitutions to their default values (that is no change). *} ALSO {* bdd\_newpair, bdd\_setpair, bdd\_freepair *} */ void bdd_resetpair(bddPair *p) { int n; for (n=0 ; nresult[n] = bdd_ithvar(n); p->last = 0; } /* EOF */ buddy-2.4/src/prime.c0000664000076500001440000001654210067023453010231 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/prime.c,v 1.1.1.1 2004/06/25 13:22:51 haimcohen Exp $ FILE: prime.c DESCR: Prime number calculations AUTH: Jorn Lind DATE: (C) feb 2001 *************************************************************************/ #include #include #include #include "prime.h" #define Random(i) ( (rand() % (i)) + 1 ) #define isEven(src) (!((src) & 0x1)) #define hasFactor(src,n) ( (((src)!=(n)) && ((src)%(n) == 0)) ) #define BitIsSet(src,b) ( ((src) & (1<<(b))) != 0 ) #define CHECKTIMES 20 #if defined(BUDDYUINT64) typedef BUDDYUINT64 UINT64; #define BUILTIN64 #elif defined(__GNUC__) || defined(__KCC) typedef long long UINT64; #define BUILTIN64 #elif defined(_MSV_VER) typedef unsigned _int64 UINT64; #define BUILTIN64 #else typedef struct __UINT64 { unsigned int hi; unsigned int lo; } UINT64; #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define GETCARRY(a,b) ( ((a)+(b)) < MAX((a),(b)) ? 1 : 0 ) #endif #ifndef BUILTIN64 /************************************************************************* 64 bit unsigned int arithmetics *************************************************************************/ static UINT64 u64_mul(unsigned int x, unsigned int y) { UINT64 res; unsigned int yh = 0; unsigned int yl = y; int i; res.lo = res.hi = 0; for (i=0 ; i<32 ; ++i) { if (x & 0x1) { unsigned int carry = GETCARRY(res.lo,yl); res.lo += yl; res.hi += yh + carry; } yh = (yh << 1) | (yl & 0x80000000 ? 1 : 0); yl = (yl << 1); x >>= 1; } return res; } static void u64_shl(UINT64* a, unsigned int *carryOut) { *carryOut = (*carryOut << 1) | (a->hi & 0x80000000 ? 0x1 : 0x0); a->hi = (a->hi << 1) | (a->lo & 0x80000000 ? 0x1 : 0x0); a->lo = (a->lo << 1); } static unsigned int u64_mod(UINT64 dividend, unsigned int divisor) { unsigned int remainder = 0; int i; u64_shl(÷nd, &remainder); for (i=0 ; i<64 ; ++i) { if (remainder >= divisor) remainder -= divisor; u64_shl(÷nd, &remainder); } return remainder >> 1; } #endif /* BUILTIN64 */ #ifdef BUILTIN64 #define u64_mulmod(a,b,c) ((unsigned int)( ((UINT64)a*(UINT64)b)%(UINT64)c )); #else #define u64_mulmod(a,b,c) u64_mod( u64_mul((a),(b)), (c) ); #endif /************************************************************************* Miller Rabin check *************************************************************************/ static unsigned int numberOfBits(unsigned int src) { unsigned int b; if (src == 0) return 0; for (b=(sizeof(unsigned int)*8)-1 ; b>0 ; --b) if (BitIsSet(src,b)) return b+1; return 1; } static int isWitness(unsigned int witness, unsigned int src) { unsigned int bitNum = numberOfBits(src-1)-1; unsigned int d = 1; int i; for (i=bitNum ; i>=0 ; --i) { unsigned int x = d; d = u64_mulmod(d,d,src); if (d == 1 && x != 1 && x != src-1) return 1; if (BitIsSet(src-1,i)) d = u64_mulmod(d,witness,src); } return d != 1; } static int isMillerRabinPrime(unsigned int src) { int n; for (n=0 ; n #include #include #include #include #include "kernel.h" #include "bddtree.h" #include "imatrix.h" #include "prime.h" /* IMPORTANT: * The semantics of the "level" field in the BddNode struct changes during * variable reordering in order to make a fast variable swap possible when * two variables are independent. Instead of refering to the level of the node * it refers to the *variable* !!! */ /* Change macros to reflect the above idea */ #define VAR(n) (bddnodes[n].level) #define VARp(p) (p->level) /* Avoid these - they are misleading! */ #undef LEVEL #undef LEVELp #define __USERESIZE /* FIXME */ /* Current auto reord. method and number of automatic reorderings left */ static int bddreordermethod; static int bddreordertimes; /* Flag for disabling reordering temporarily */ static int reorderdisabled; /* Store for the variable relationships */ static BddTree *vartree; static int blockid; /* Store for the ref.cou. of the external roots */ static int *extroots; static int extrootsize; /* Level data */ typedef struct _levelData { int start; /* Start of this sub-table (entry in "bddnodes") */ int size; /* Size of this sub-table */ int maxsize; /* Max. allowed size of sub-table */ int nodenum; /* Number of nodes in this level */ } levelData; static levelData *levels; /* Indexed by variable! */ /* Interaction matrix */ static imatrix *iactmtx; /* Reordering information for the user */ static int verbose; static bddinthandler reorder_handler; static bddfilehandler reorder_filehandler; static bddsizehandler reorder_nodenum; /* Number of live nodes before and after a reordering session */ static int usednum_before; static int usednum_after; /* Kernel variables needed for reordering */ extern int bddfreepos; extern int bddfreenum; extern int bddproduced; /* Flag telling us when a node table resize is done */ static int resizedInMakenode; /* New node hashing function for use with reordering */ #define NODEHASH(var,l,h) ((PAIR((l),(h))%levels[var].size)+levels[var].start) /* Reordering prototypes */ static void blockdown(BddTree *); static void addref_rec(int, char *); static void reorder_gbc(); static void reorder_setLevellookup(void); static int reorder_makenode(int, int, int); static int reorder_varup(int); static int reorder_vardown(int); static int reorder_init(void); static void reorder_done(void); #define random(a) (rand() % (a)) /* For sorting the blocks according to some specific size value */ typedef struct s_sizePair { int val; BddTree *block; } sizePair; /************************************************************************* Initialize and shutdown *************************************************************************/ void bdd_reorder_init(void) { reorderdisabled = 0; vartree = NULL; bdd_clrvarblocks(); bdd_reorder_hook(bdd_default_reohandler); bdd_reorder_verbose(0); bdd_autoreorder_times(BDD_REORDER_NONE, 0); reorder_nodenum = bdd_getnodenum; usednum_before = usednum_after = 0; blockid = 0; } void bdd_reorder_done(void) { bddtree_del(vartree); bdd_operator_reset(); vartree = NULL; } /************************************************************************* Reordering heuristics *************************************************************************/ /*=== Reorder using a sliding window of size 2 =========================*/ static BddTree *reorder_win2(BddTree *t) { BddTree *this=t, *first=t; if (t == NULL) return t; if (verbose > 1) printf("Win2 start: %d nodes\n", reorder_nodenum()); fflush(stdout); while (this->next != NULL) { int best = reorder_nodenum(); blockdown(this); if (best < reorder_nodenum()) { blockdown(this->prev); this = this->next; } else if (first == this) first = this->prev; if (verbose > 1) { printf("."); fflush(stdout); } } if (verbose > 1) printf("\nWin2 end: %d nodes\n", reorder_nodenum()); fflush(stdout); return first; } static BddTree *reorder_win2ite(BddTree *t) { BddTree *this, *first=t; int lastsize; int c=1; if (t == NULL) return t; if (verbose > 1) printf("Win2ite start: %d nodes\n", reorder_nodenum()); do { lastsize = reorder_nodenum(); this = t; while (this->next != NULL) { int best = reorder_nodenum(); blockdown(this); if (best < reorder_nodenum()) { blockdown(this->prev); this = this->next; } else if (first == this) first = this->prev; if (verbose > 1) { printf("."); fflush(stdout); } } if (verbose > 1) printf(" %d nodes\n", reorder_nodenum()); c++; } while (reorder_nodenum() != lastsize); return first; } /*=== Reorder using a sliding window of size 3 =========================*/ #define X(a) static BddTree *reorder_swapwin3(BddTree *this, BddTree **first) { int setfirst = (this->prev == NULL ? 1 : 0); BddTree *next = this; int best = reorder_nodenum(); if (this->next->next == NULL) /* Only two blocks left -> win2 swap */ { blockdown(this); if (best < reorder_nodenum()) { blockdown(this->prev); next = this->next; } else { next = this; if (setfirst) *first = this->prev; } } else /* Real win3 swap */ { int pos = 0; X(printf("%d: ", reorder_nodenum())); blockdown(this); /* B A* C (4) */ X(printf("A")); pos++; if (best > reorder_nodenum()) { X(printf("(%d)", reorder_nodenum())); pos = 0; best = reorder_nodenum(); } blockdown(this); /* B C A* (3) */ X(printf("B")); pos++; if (best > reorder_nodenum()) { X(printf("(%d)", reorder_nodenum())); pos = 0; best = reorder_nodenum(); } this = this->prev->prev; blockdown(this); /* C B* A (2) */ X(printf("C")); pos++; if (best > reorder_nodenum()) { X(printf("(%d)", reorder_nodenum())); pos = 0; best = reorder_nodenum(); } blockdown(this); /* C A B* (1) */ X(printf("D")); pos++; if (best > reorder_nodenum()) { X(printf("(%d)", reorder_nodenum())); pos = 0; best = reorder_nodenum(); } this = this->prev->prev; blockdown(this); /* A C* B (0)*/ X(printf("E")); pos++; if (best > reorder_nodenum()) { X(printf("(%d)", reorder_nodenum())); pos = 0; best = reorder_nodenum(); } X(printf(" -> ")); if (pos >= 1) /* A C B -> C A* B */ { this = this->prev; blockdown(this); next = this; if (setfirst) *first = this->prev; X(printf("a(%d)", reorder_nodenum())); } if (pos >= 2) /* C A B -> C B A* */ { blockdown(this); next = this->prev; if (setfirst) *first = this->prev->prev; X(printf("b(%d)", reorder_nodenum())); } if (pos >= 3) /* C B A -> B C* A */ { this = this->prev->prev; blockdown(this); next = this; if (setfirst) *first = this->prev; X(printf("c(%d)", reorder_nodenum())); } if (pos >= 4) /* B C A -> B A C* */ { blockdown(this); next = this->prev; if (setfirst) *first = this->prev->prev; X(printf("d(%d)", reorder_nodenum())); } if (pos >= 5) /* B A C -> A B* C */ { this = this->prev->prev; blockdown(this); next = this; if (setfirst) *first = this->prev; X(printf("e(%d)", reorder_nodenum())); } X(printf("\n")); } return next; } static BddTree *reorder_win3(BddTree *t) { BddTree *this=t, *first=t; if (t == NULL) return t; if (verbose > 1) printf("Win3 start: %d nodes\n", reorder_nodenum()); fflush(stdout); while (this->next != NULL) { this = reorder_swapwin3(this, &first); if (verbose > 1) { printf("."); fflush(stdout); } } if (verbose > 1) printf("\nWin3 end: %d nodes\n", reorder_nodenum()); fflush(stdout); return first; } static BddTree *reorder_win3ite(BddTree *t) { BddTree *this=t, *first=t; int lastsize; if (t == NULL) return t; if (verbose > 1) printf("Win3ite start: %d nodes\n", reorder_nodenum()); do { lastsize = reorder_nodenum(); this = first; while (this->next != NULL && this->next->next != NULL) { this = reorder_swapwin3(this, &first); if (verbose > 1) { printf("."); fflush(stdout); } } if (verbose > 1) printf(" %d nodes\n", reorder_nodenum()); } while (reorder_nodenum() != lastsize); if (verbose > 1) printf("Win3ite end: %d nodes\n", reorder_nodenum()); return first; } /*=== Reorder by sifting =============================================*/ /* Move a specific block up and down in the order and place at last in the best position */ static void reorder_sift_bestpos(BddTree *blk, int middlePos) { int best = reorder_nodenum(); int maxAllowed; int bestpos = 0; int dirIsUp = 1; int n; if (bddmaxnodesize > 0) maxAllowed = MIN(best/5+best, bddmaxnodesize-bddmaxnodeincrease-2); else maxAllowed = best/5+best; /* Determine initial direction */ if (blk->pos > middlePos) dirIsUp = 0; /* Move block back and forth */ for (n=0 ; n<2 ; n++) { int first = 1; if (dirIsUp) { while (blk->prev != NULL && (reorder_nodenum() <= maxAllowed || first)) { first = 0; blockdown(blk->prev); bestpos--; if (verbose > 1) { printf("-"); fflush(stdout); } if (reorder_nodenum() < best) { best = reorder_nodenum(); bestpos = 0; if (bddmaxnodesize > 0) maxAllowed = MIN(best/5+best, bddmaxnodesize-bddmaxnodeincrease-2); else maxAllowed = best/5+best; } } } else { while (blk->next != NULL && (reorder_nodenum() <= maxAllowed || first)) { first = 0; blockdown(blk); bestpos++; if (verbose > 1) { printf("+"); fflush(stdout); } if (reorder_nodenum() < best) { best = reorder_nodenum(); bestpos = 0; if (bddmaxnodesize > 0) maxAllowed = MIN(best/5+best, bddmaxnodesize-bddmaxnodeincrease-2); else maxAllowed = best/5+best; } } } if (reorder_nodenum() > maxAllowed && verbose > 1) { printf("!"); fflush(stdout); } dirIsUp = !dirIsUp; } /* Move to best pos */ while (bestpos < 0) { blockdown(blk); bestpos++; } while (bestpos > 0) { blockdown(blk->prev); bestpos--; } } /* Go through all blocks in a specific sequence and find best position for each of them */ static BddTree *reorder_sift_seq(BddTree *t, BddTree **seq, int num) { BddTree *this; int n; if (t == NULL) return t; for (n=0 ; n 1) { printf("Sift "); if (reorder_filehandler) reorder_filehandler(stdout, seq[n]->id); else printf("%d", seq[n]->id); printf(": "); } reorder_sift_bestpos(seq[n], num/2); if (verbose > 1) printf("\n> %d nodes", reorder_nodenum()); c2 = clock(); if (verbose > 1) printf(" (%.1f sec)\n", (float)(c2-c1)/CLOCKS_PER_SEC); } /* Find first block */ for (this=t ; this->prev != NULL ; this=this->prev) /* nil */; return this; } /* Compare function for sorting sifting sequence */ static int siftTestCmp(const void *aa, const void *bb) { const sizePair *a = (sizePair*)aa; const sizePair *b = (sizePair*)bb; if (a->val < b->val) return -1; if (a->val > b->val) return 1; return 0; } /* Find sifting sequence based on the number of nodes at each level */ static BddTree *reorder_sift(BddTree *t) { BddTree *this, **seq; sizePair *p; int n, num; for (this=t,num=0 ; this!=NULL ; this=this->next) this->pos = num++; if ((p=NEW(sizePair,num)) == NULL) return t; if ((seq=NEW(BddTree*,num)) == NULL) { free(p); return t; } for (this=t,n=0 ; this!=NULL ; this=this->next,n++) { int v; /* Accumulate number of nodes for each block */ p[n].val = 0; for (v=this->first ; v<=this->last ; v++) p[n].val -= levels[v].nodenum; p[n].block = this; } /* Sort according to the number of nodes at each level */ qsort(p, num, sizeof(sizePair), siftTestCmp); /* Create sequence */ for (n=0 ; n 1) printf("Reorder %d\n", c++); lastsize = reorder_nodenum(); first = reorder_sift(first); } while (reorder_nodenum() != lastsize); return first; } /*=== Random reordering (mostly for debugging and test ) =============*/ static BddTree *reorder_random(BddTree *t) { BddTree *this; BddTree **seq; int n, num=0; if (t == NULL) return t; for (this=t ; this!=NULL ; this=this->next) num++; seq = NEW(BddTree*,num); for (this=t,num=0 ; this!=NULL ; this=this->next) seq[num++] = this; for (n=0 ; n<4*num ; n++) { int blk = random(num); if (seq[blk]->next != NULL) blockdown(seq[blk]); } /* Find first block */ for (this=t ; this->prev != NULL ; this=this->prev) /* nil */; free(seq); if (verbose) printf("Random order: %d nodes\n", reorder_nodenum()); return this; } /************************************************************************* Swapping adjacent blocks *************************************************************************/ static void blockdown(BddTree *left) { BddTree *right = left->next; int n; int leftsize = left->last - left->first; int rightsize = right->last - right->first; int leftstart = bddvar2level[left->seq[0]]; int *lseq = left->seq; int *rseq = right->seq; /* Move left past right */ while (bddvar2level[lseq[0]] < bddvar2level[rseq[rightsize]]) { for (n=0 ; n leftstart) { for (n=rightsize ; n>0 ; n--) { if (bddvar2level[rseq[n]]-1 != bddvar2level[rseq[n-1]] && bddvar2level[rseq[n]] > leftstart) { reorder_varup(rseq[n]); } } if (bddvar2level[rseq[0]] > leftstart) reorder_varup(rseq[0]); } /* Swap left and right data in the order */ left->next = right->next; right->prev = left->prev; left->prev = right; right->next = left; if (right->prev != NULL) right->prev->next = right; if (left->next != NULL) left->next->prev = left; n = left->pos; left->pos = right->pos; right->pos = n; } /************************************************************************* Kernel reordering routines *************************************************************************/ /*=== Garbage collection for reordering ================================*/ /* Note: Node may be marked */ static void addref_rec(int r, char *dep) { if (r < 2) return; if (bddnodes[r].refcou == 0) { bddfreenum--; /* Detect variable dependencies for the interaction matrix */ dep[VAR(r) & MARKHIDE] = 1; /* Make sure the nodenum field is updated. Used in the initial GBC */ levels[VAR(r) & MARKHIDE].nodenum++; addref_rec(LOW(r), dep); addref_rec(HIGH(r), dep); } else { int n; /* Update (from previously found) variable dependencies * for the interaction matrix */ for (n=0 ; n 0) { SETMARK(n); extrootsize++; } } if ((extroots=(int*)(malloc(sizeof(int)*extrootsize))) == NULL) return bdd_error(BDD_MEMORY); iactmtx = imatrixNew(bddvarnum); for (n=2,extrootsize=0 ; nhash = 0; } bddnodes[0].hash = 0; bddnodes[1].hash = 0; free(dep); return 0; } /* Now that all nodes are recursively reference counted we must make sure that the new hashing scheme is used AND that dead nodes are removed. This is also a good time to create the interaction matrix. */ static void reorder_gbc(void) { int n; bddfreepos = 0; bddfreenum = 0; /* No need to zero all hash fields - this is done in mark_roots */ for (n=bddnodesize-1 ; n>=2 ; n--) { register BddNode *node = &bddnodes[n]; if (node->refcou > 0) { register unsigned int hash; hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); node->next = bddnodes[hash].hash; bddnodes[hash].hash = n; } else { LOWp(node) = -1; node->next = bddfreepos; bddfreepos = n; bddfreenum++; } } } static void reorder_setLevellookup(void) { int n; for (n=0 ; n= 4) levels[n].size = bdd_prime_lte(levels[n].size); #if 0 printf("L%3d: start %d, size %d, nodes %d\n", n, levels[n].start, levels[n].size, levels[n].nodenum); #endif } } static void reorder_rehashAll(void) { int n; reorder_setLevellookup(); bddfreepos = 0; for (n=bddnodesize-1 ; n>=0 ; n--) bddnodes[n].hash = 0; for (n=bddnodesize-1 ; n>=2 ; n--) { register BddNode *node = &bddnodes[n]; if (node->refcou > 0) { register unsigned int hash; hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); node->next = bddnodes[hash].hash; bddnodes[hash].hash = n; } else { node->next = bddfreepos; bddfreepos = n; } } } /*=== Unique table handling for reordering =============================*/ /* Note: rehashing must not take place during a makenode call. It is okay to resize the table, but *not* to rehash it. */ static int reorder_makenode(int var, int low, int high) { register BddNode *node; register unsigned int hash; register int res; #ifdef CACHESTATS bddcachestats.uniqueAccess++; #endif /* Note: We know that low,high has a refcou greater than zero, so there is no need to add reference *recursively* */ /* check whether childs are equal */ if (low == high) { INCREF(low); return low; } /* Try to find an existing node of this kind */ hash = NODEHASH(var, low, high); res = bddnodes[hash].hash; while(res != 0) { if (LOW(res) == low && HIGH(res) == high) { #ifdef CACHESTATS bddcachestats.uniqueHit++; #endif INCREF(res); return res; } res = bddnodes[res].next; #ifdef CACHESTATS bddcachestats.uniqueChain++; #endif } /* No existing node -> build one */ #ifdef CACHESTATS bddcachestats.uniqueMiss++; #endif /* Any free nodes to use ? */ if (bddfreepos == 0) { if (bdderrorcond) return 0; /* Try to allocate more nodes - call noderesize without * enabling rehashing. * Note: if ever rehashing is allowed here, then remember to * update local variable "hash" */ bdd_noderesize(0); resizedInMakenode = 1; /* Panic if that is not possible */ if (bddfreepos == 0) { bdd_error(BDD_NODENUM); bdderrorcond = abs(BDD_NODENUM); return 0; } } /* Build new node */ res = bddfreepos; bddfreepos = bddnodes[bddfreepos].next; levels[var].nodenum++; bddproduced++; bddfreenum--; node = &bddnodes[res]; VARp(node) = var; LOWp(node) = low; HIGHp(node) = high; /* Insert node in hash chain */ node->next = bddnodes[hash].hash; bddnodes[hash].hash = res; /* Make sure it is reference counted */ node->refcou = 1; INCREF(LOWp(node)); INCREF(HIGHp(node)); return res; } /*=== Swapping two adjacent variables ==================================*/ /* Go through var 0 nodes. Move nodes that depends on var 1 to a separate * chain (toBeProcessed) and let the rest stay in the table. */ static int reorder_downSimple(int var0) { int toBeProcessed = 0; int var1 = bddlevel2var[bddvar2level[var0]+1]; int vl0 = levels[var0].start; int size0 = levels[var0].size; int n; levels[var0].nodenum = 0; for (n=0 ; nnext; if (VAR(LOWp(node)) != var1 && VAR(HIGHp(node)) != var1) { /* Node does not depend on next var, let it stay in the chain */ node->next = bddnodes[n+vl0].hash; bddnodes[n+vl0].hash = r; levels[var0].nodenum++; } else { /* Node depends on next var - save it for later procesing */ node->next = toBeProcessed; toBeProcessed = r; #ifdef SWAPCOUNT bddcachestats.swapCount++; #endif } r = next; } } return toBeProcessed; } /* Now process all the var 0 nodes that depends on var 1. * * It is extremely important that no rehashing is done inside the makenode * calls, since this would destroy the toBeProcessed chain. */ static void reorder_swap(int toBeProcessed, int var0) { int var1 = bddlevel2var[bddvar2level[var0]+1]; while (toBeProcessed) { BddNode *node = &bddnodes[toBeProcessed]; int next = node->next; int f0 = LOWp(node); int f1 = HIGHp(node); int f00, f01, f10, f11, hash; /* Find the cofactors for the new nodes */ if (VAR(f0) == var1) { f00 = LOW(f0); f01 = HIGH(f0); } else f00 = f01 = f0; if (VAR(f1) == var1) { f10 = LOW(f1); f11 = HIGH(f1); } else f10 = f11 = f1; /* Note: makenode does refcou. */ f0 = reorder_makenode(var0, f00, f10); f1 = reorder_makenode(var0, f01, f11); node = &bddnodes[toBeProcessed]; /* Might change in makenode */ /* We know that the refcou of the grandchilds of this node * is greater than one (these are f00...f11), so there is * no need to do a recursive refcou decrease. It is also * possible for the LOWp(node)/high nodes to come alive again, * so deref. of the childs is delayed until the local GBC. */ DECREF(LOWp(node)); DECREF(HIGHp(node)); /* Update in-place */ VARp(node) = var1; LOWp(node) = f0; HIGHp(node) = f1; levels[var1].nodenum++; /* Rehash the node since it got new childs */ hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); node->next = bddnodes[hash].hash; bddnodes[hash].hash = toBeProcessed; toBeProcessed = next; } } /* Now go through the var 1 chains. The nodes live here have survived * the call to reorder_swap() and may stay in the chain. * The dead nodes are reclaimed. */ static void reorder_localGbc(int var0) { int var1 = bddlevel2var[bddvar2level[var0]+1]; int vl1 = levels[var1].start; int size1 = levels[var1].size; int n; for (n=0 ; nnext; if (node->refcou > 0) { node->next = bddnodes[hash].hash; bddnodes[hash].hash = r; } else { DECREF(LOWp(node)); DECREF(HIGHp(node)); LOWp(node) = -1; node->next = bddfreepos; bddfreepos = r; levels[var1].nodenum--; bddfreenum++; } r = next; } } } #ifdef USERESIZE static void reorder_swapResize(int toBeProcessed, int var0) { int var1 = bddlevel2var[bddvar2level[var0]+1]; while (toBeProcessed) { BddNode *node = &bddnodes[toBeProcessed]; int next = node->next; int f0 = LOWp(node); int f1 = HIGHp(node); int f00, f01, f10, f11; /* Find the cofactors for the new nodes */ if (VAR(f0) == var1) { f00 = LOW(f0); f01 = HIGH(f0); } else f00 = f01 = f0; if (VAR(f1) == var1) { f10 = LOW(f1); f11 = HIGH(f1); } else f10 = f11 = f1; /* Note: makenode does refcou. */ f0 = reorder_makenode(var0, f00, f10); f1 = reorder_makenode(var0, f01, f11); node = &bddnodes[toBeProcessed]; /* Might change in makenode */ /* We know that the refcou of the grandchilds of this node * is greater than one (these are f00...f11), so there is * no need to do a recursive refcou decrease. It is also * possible for the LOWp(node)/high nodes to come alive again, * so deref. of the childs is delayed until the local GBC. */ DECREF(LOWp(node)); DECREF(HIGHp(node)); /* Update in-place */ VARp(node) = var1; LOWp(node) = f0; HIGHp(node) = f1; levels[var1].nodenum++; /* Do not rehash yet since we are going to resize the hash table */ toBeProcessed = next; } } static void reorder_localGbcResize(int toBeProcessed, int var0) { int var1 = bddlevel2var[bddvar2level[var0]+1]; int vl1 = levels[var1].start; int size1 = levels[var1].size; int n; for (n=0 ; nnext; if (node->refcou > 0) { node->next = toBeProcessed; toBeProcessed = r; } else { DECREF(LOWp(node)); DECREF(HIGHp(node)); LOWp(node) = -1; node->next = bddfreepos; bddfreepos = r; levels[var1].nodenum--; bddfreenum++; } r = next; } } /* Resize */ if (levels[var1].nodenum < levels[var1].size) levels[var1].size = MIN(levels[var1].maxsize, levels[var1].size/2); else levels[var1].size = MIN(levels[var1].maxsize, levels[var1].size*2); if (levels[var1].size >= 4) levels[var1].size = bdd_prime_lte(levels[var1].size); /* Rehash the remaining live nodes */ while (toBeProcessed) { BddNode *node = &bddnodes[toBeProcessed]; int next = node->next; int hash = NODEHASH(VARp(node), LOWp(node), HIGHp(node)); node->next = bddnodes[hash].hash; bddnodes[hash].hash = toBeProcessed; toBeProcessed = next; } } #endif /* USERESIZE */ static int reorder_varup(int var) { if (var < 0 || var >= bddvarnum) return bdd_error(BDD_VAR); if (bddvar2level[var] == 0) return 0; return reorder_vardown( bddlevel2var[bddvar2level[var]-1]); } #if 0 static void sanitycheck(void) { int n,v,r; int cou=0; for (v=0 ; v 0) { assert(LEVEL(n) < LEVEL(LOW(n))); assert(LEVEL(n) < LEVEL(HIGH(n))); cou--; } } assert(cou == 0); } #endif static int reorder_vardown(int var) { int n, level; if (var < 0 || var >= bddvarnum) return bdd_error(BDD_VAR); if ((level=bddvar2level[var]) >= bddvarnum-1) return 0; resizedInMakenode = 0; if (imatrixDepends(iactmtx, var, bddlevel2var[level+1])) { int toBeProcessed = reorder_downSimple(var); #ifdef USERESIZE levelData *l = &levels[var]; if (l->nodenum < (l->size)/3 || l->nodenum >= (l->size*3)/2 && l->size < l->maxsize) { reorder_swapResize(toBeProcessed, var); reorder_localGbcResize(toBeProcessed, var); } else #endif { reorder_swap(toBeProcessed, var); reorder_localGbc(var); } } /* Swap the var<->level tables */ n = bddlevel2var[level]; bddlevel2var[level] = bddlevel2var[level+1]; bddlevel2var[level+1] = n; n = bddvar2level[var]; bddvar2level[var] = bddvar2level[ bddlevel2var[level] ]; bddvar2level[ bddlevel2var[level] ] = n; /* Update all rename pairs */ bdd_pairs_vardown(level); if (resizedInMakenode) reorder_rehashAll(); return 0; } /************************************************************************* User reordering interface *************************************************************************/ /* NAME {* bdd\_swapvar *} SECTION {* reorder *} SHORT {* Swap two BDD variables *} PROTO {* int bdd_swapvar(int v1, int v2) *} DESCR {* Use {\tt bdd\_swapvar} to swap the position (in the current variable order) of the two BDD variables {\tt v1} and {\tt v2}. There are no constraints on the position of the two variables before the call. This function may {\em not} be used together with user defined variable blocks. The swap is done by a series of adjacent variable swaps and requires the whole node table to be rehashed twice for each call to {\tt bdd\_swapvar}. It should therefore not be used were efficiency is a major concern. *} RETURN {* Zero on succes and a negative error code otherwise. *} ALSO {* bdd\_reorder, bdd\_addvarblock *} */ int bdd_swapvar(int v1, int v2) { int l1, l2; /* Do not swap when variable-blocks are used */ if (vartree != NULL) return bdd_error(BDD_VARBLK); /* Don't bother swapping x with x */ if (v1 == v2) return 0; /* Make sure the variable exists */ if (v1 < 0 || v1 >= bddvarnum || v2 < 0 || v2 >= bddvarnum) return bdd_error(BDD_VAR); l1 = bddvar2level[v1]; l2 = bddvar2level[v2]; /* Make sure v1 is before v2 */ if (l1 > l2) { int tmp = v1; v1 = v2; v2 = tmp; l1 = bddvar2level[v1]; l2 = bddvar2level[v2]; } reorder_init(); /* Move v1 to v2's position */ while (bddvar2level[v1] < l2) reorder_vardown(v1); /* Move v2 to v1's position */ while (bddvar2level[v2] > l1) reorder_varup(v2); reorder_done(); return 0; } void bdd_default_reohandler(int prestate) { static long c1; if (verbose > 0) { if (prestate) { printf("Start reordering\n"); c1 = clock(); } else { long c2 = clock(); printf("End reordering. Went from %d to %d nodes (%.1f sec)\n", usednum_before, usednum_after, (float)(c2-c1)/CLOCKS_PER_SEC); } } } /* NAME {* bdd\_disable\_reorder *} SECTION {* reorder *} SHORT {* Disable automatic reordering *} PROTO {* void bdd_disable_reorder(void) *} DESCR {* Disables automatic reordering until {\tt bdd\_enable\_reorder} is called. Reordering is enabled by default as soon as any variable blocks have been defined. *} ALSO {* bdd\_enable\_reorder *} */ void bdd_disable_reorder(void) { reorderdisabled = 1; } /* NAME {* bdd\_enable\_reorder *} SECTION {* reorder *} SHORT {* Enables automatic reordering *} PROTO {* void bdd_enable_reorder(void) *} DESCR {* Re-enables reordering after a call to {\tt bdd\_disable\_reorder}. *} ALSO {* bdd\_disable\_reorder *} */ void bdd_enable_reorder(void) { reorderdisabled = 0; } int bdd_reorder_ready(void) { if (bddreordermethod == BDD_REORDER_NONE || vartree == NULL || bddreordertimes == 0 || reorderdisabled) return 0; return 1; } void bdd_reorder_auto(void) { if (!bdd_reorder_ready) return; if (reorder_handler != NULL) reorder_handler(1); bdd_reorder(bddreordermethod); bddreordertimes--; if (reorder_handler != NULL) reorder_handler(0); } static int reorder_init(void) { int n; if ((levels=NEW(levelData,bddvarnum)) == NULL) return -1; for (n=0 ; n b) return 1; return 0; } static BddTree *reorder_block(BddTree *t, int method) { BddTree *this; if (t == NULL) return NULL; if (t->fixed == BDD_REORDER_FREE && t->nextlevel!=NULL) { switch(method) { case BDD_REORDER_WIN2: t->nextlevel = reorder_win2(t->nextlevel); break; case BDD_REORDER_WIN2ITE: t->nextlevel = reorder_win2ite(t->nextlevel); break; case BDD_REORDER_SIFT: t->nextlevel = reorder_sift(t->nextlevel); break; case BDD_REORDER_SIFTITE: t->nextlevel = reorder_siftite(t->nextlevel); break; case BDD_REORDER_WIN3: t->nextlevel = reorder_win3(t->nextlevel); break; case BDD_REORDER_WIN3ITE: t->nextlevel = reorder_win3ite(t->nextlevel); break; case BDD_REORDER_RANDOM: t->nextlevel = reorder_random(t->nextlevel); break; } } for (this=t->nextlevel ; this ; this=this->next) reorder_block(this, method); if (t->seq != NULL) qsort(t->seq, t->last-t->first+1, sizeof(int), varseqCmp); return t; } /* NAME {* bdd\_reorder *} SECTION {* reorder *} SHORT {* start dynamic reordering *} PROTO {* void bdd_reorder(int method) *} DESCR {* This function initiates dynamic reordering using the heuristic defined by {\tt method}, which may be one of the following \begin{description} \item {\tt BDD\_REORDER\_WIN2}\\ Reordering using a sliding window of size 2. This algorithm swaps two adjacent variable blocks and if this results in more nodes then the two blocks are swapped back again. Otherwise the result is kept in the variable order. This is then repeated for all variable blocks. \item {\tt BDD\_REORDER\_WIN2ITE}\\ The same as above but the process is repeated until no further progress is done. Usually a fast and efficient method. \item {\tt BDD\_REORDER\_WIN3}\\ The same as above but with a window size of 3. \item {\tt BDD\_REORDER\_WIN2ITE}\\ The same as above but with a window size of 3. \item {\tt BDD\_REORDER\_SIFT}\\ Reordering where each block is moved through all possible positions. The best of these is then used as the new position. Potentially a very slow but good method. \item {\tt BDD\_REORDER\_SIFTITE}\\ The same as above but the process is repeated until no further progress is done. Can be extremely slow. \item {\tt BDD\_REORDER\_RANDOM}\\ Mostly used for debugging purpose, but may be usefull for others. Selects a random position for each variable. \end{description} *} ALSO {* bdd\_autoreorder, bdd\_reorder\_verbose, bdd\_addvarblock, bdd\_clrvarblocks *} */ void bdd_reorder(int method) { BddTree *top; int savemethod = bddreordermethod; int savetimes = bddreordertimes; bddreordermethod = method; bddreordertimes = 1; if ((top=bddtree_new(-1)) == NULL) return; if (reorder_init() < 0) return; usednum_before = bddnodesize - bddfreenum; top->first = 0; top->last = bdd_varnum()-1; top->fixed = 0; top->next = NULL; top->nextlevel = vartree; reorder_block(top, method); vartree = top->nextlevel; free(top); usednum_after = bddnodesize - bddfreenum; reorder_done(); bddreordermethod = savemethod; bddreordertimes = savetimes; } /* NAME {* bdd\_reorder\_gain *} SECTION {* reorder *} SHORT {* Calculate the gain in size after a reordering *} PROTO {* int bdd_reorder_gain(void) *} DESCR {* Returns the gain in percent of the previous number of used nodes. The value returned is \[ (100 * (A - B)) / A \] Where $A$ is previous number of used nodes and $B$ is current number of used nodes. *} */ int bdd_reorder_gain(void) { if (usednum_before == 0) return 0; return (100*(usednum_before - usednum_after)) / usednum_before; } /* NAME {* bdd\_reorder\_hook *} SECTION {* reorder *} SHORT {* sets a handler for automatic reorderings *} PROTO {* bddinthandler bdd_reorder_hook(bddinthandler handler) *} DESCR {* Whenever automatic reordering is done, a check is done to see if the user has supplied a handler for that event. If so then it is called with the argument {\tt prestate} being 1 if the handler is called immediately {\em before} reordering and {\tt prestate} being 0 if it is called immediately after. The default handler is {\tt bdd\_default\_reohandler} which will print information about the reordering. A typical handler could look like this: \begin{verbatim} void reorderhandler(int prestate) { if (prestate) printf("Start reordering"); else printf("End reordering"); } \end{verbatim} *} RETURN {* The previous handler *} ALSO {* bdd\_reorder, bdd\_autoreorder, bdd\_resize\_hook *} */ bddinthandler bdd_reorder_hook(bddinthandler handler) { bddinthandler tmp = reorder_handler; reorder_handler = handler; return tmp; } /* NAME {* bdd\_blockfile\_hook *} SECTION {* reorder *} SHORT {* Specifies a printing callback handler *} PROTO {* bddfilehandler bdd_blockfile_hook(bddfilehandler handler) *} DESCR {* A printing callback handler is used to convert the variable block identifiers into something readable by the end user. Use {\tt bdd\_blockfile\_hook} to pass a handler to BuDDy. A typical handler could look like this: \begin{verbatim} void printhandler(FILE *o, int block) { extern char **blocknames; fprintf(o, "%s", blocknames[block]); } \end{verbatim} \noindent The handler is then called from {\tt bdd\_printorder} and {\tt bdd\_reorder} (depending on the verbose level) with the block numbers returned by {\tt bdd\_addvarblock} as arguments. No default handler is supplied. The argument {\tt handler} may be NULL if no handler is needed. *} RETURN {* The old handler *} ALSO {* bdd\_printorder *} */ bddfilehandler bdd_blockfile_hook(bddfilehandler handler) { bddfilehandler tmp = reorder_filehandler; reorder_filehandler = handler; return tmp; } /* NAME {* bdd\_autoreorder *} EXTRA {* bdd\_autoreorder\_times *} SECTION {* reorder *} SHORT {* enables automatic reordering *} PROTO {* int bdd_autoreorder(int method) int bdd_autoreorder_times(int method, int num) *} DESCR {* Enables automatic reordering using {\tt method} as the reordering method. If {\tt method} is {\tt BDD\_REORDER\_NONE} then automatic reordering is disabled. Automatic reordering is done every time the number of active nodes in the node table has been doubled and works by interrupting the current BDD operation, doing the reordering and the retrying the operation. In the second form the argument {\tt num} specifies the allowed number of reorderings. So if for example a "one shot" reordering is needed, then the {\tt num} argument would be set to one. Values for {\tt method} can be found under {\tt bdd\_reorder}. *} RETURN {* Returns the old value of {\tt method} *} ALSO {* bdd\_reorder *} */ int bdd_autoreorder(int method) { int tmp = bddreordermethod; bddreordermethod = method; bddreordertimes = -1; return tmp; } int bdd_autoreorder_times(int method, int num) { int tmp = bddreordermethod; bddreordermethod = method; bddreordertimes = num; return tmp; } /* NAME {* bdd\_var2level *} SECTION {* reorder *} SHORT {* Fetch the level of a specific BDD variable *} PROTO {* int bdd_var2level(int var) *} DESCR {* Returns the position of the variable {\tt var} in the current variable order. *} ALSO {* bdd\_reorder, bdd\_level2var *} */ int bdd_var2level(int var) { if (var < 0 || var >= bddvarnum) return bdd_error(BDD_VAR); return bddvar2level[var]; } /* NAME {* bdd\_level2var *} SECTION {* reorder *} SHORT {* Fetch the variable number of a specific level *} PROTO {* int bdd_level2var(int level) *} DESCR {* Returns the variable placed at position {\tt level} in the current variable order. *} ALSO {* bdd\_reorder, bdd\_var2level *} */ int bdd_level2var(int level) { if (level < 0 || level >= bddvarnum) return bdd_error(BDD_VAR); return bddlevel2var[level]; } /* NAME {* bdd\_getreorder\_times *} SECTION {* reorder *} SHORT {* Fetch the current number of allowed reorderings *} PROTO {* int bdd_getreorder_times(void) *} DESCR {* Returns the current number of allowed reorderings left. This value can be defined by {\tt bdd\_autoreorder\_times}. *} ALSO {* bdd\_reorder\_times, bdd\_getreorder\_method *} */ int bdd_getreorder_times(void) { return bddreordertimes; } /* NAME {* bdd\_getreorder\_method *} SECTION {* reorder *} SHORT {* Fetch the current reorder method *} PROTO {* int bdd_getreorder_method(void) *} DESCR {* Returns the current reorder method as defined by {\tt bdd\_autoreorder}. *} ALSO {* bdd\_reorder, bdd\_getreorder\_times *} */ int bdd_getreorder_method(void) { return bddreordermethod; } /* NAME {* bdd\_reorder\_verbose *} SECTION {* reorder *} SHORT {* enables verbose information about reorderings *} PROTO {* int bdd_reorder_verbose(int v) *} DESCR {* With {\tt bdd\_reorder\_verbose} it is possible to set the level of information which should be printed during reordering. A value of zero means no information, a value of one means some information and any greater value will result in a lot of reordering information. The default value is zero. *} RETURN {* The old verbose level *} ALSO {* bdd\_reorder *} */ int bdd_reorder_verbose(int v) { int tmp = verbose; verbose = v; return tmp; } /* NAME {* bdd\_reorder\_probe *} SECTION {* reorder *} SHORT {* Define a handler for minimization of BDDs *} PROTO {* bddsizehandler bdd_reorder_probe(bddsizehandler handler) *} DESCR {* Reordering is typically done to minimize the global number of BDD nodes in use, but it may in some cases be usefull to minimize with respect to a specific BDD. With {\tt bdd\_reorder\_probe} it is possible to define a callback function that calculates the size of a specific BDD (or anything else in fact). This handler will then be called by the reordering functions to get the current size information. A typical handle could look like this: \begin{verbatim} int sizehandler(void) { extern BDD mybdd; return bdd_nodecount(mybdd); } \end{verbatim} No default handler is supplied. The argument {\tt handler} may be NULL if no handler is needed. *} *} RETURN {* The old handler *} ALSO {* bdd\_reorder *} */ bddsizehandler bdd_reorder_probe(bddsizehandler handler) { bddsizehandler old = reorder_nodenum; if (handler == NULL) return reorder_nodenum; reorder_nodenum = handler; return old; } /* NAME {* bdd\_clrvarblocks *} SECTION {* reorder *} SHORT {* clears all variable blocks *} PROTO {* void bdd_clrvarblocks(void) *} DESCR {* Clears all the variable blocks that has been defined by calls to bdd\_addvarblock. *} ALSO {* bdd\_addvarblock *} */ void bdd_clrvarblocks(void) { bddtree_del(vartree); vartree = NULL; blockid = 0; } /* NAME {* bdd\_addvarblock *} EXTRA {* bdd\_intaddvarblock *} SECTION {* reorder *} SHORT {* adds a new variable block for reordering *} PROTO {* int bdd_addvarblock(BDD var, int fixed) int bdd_intaddvarblock(int first, int last, int fixed) *} DESCR {* Creates a new variable block with the variables in the variable set {\tt var}. The variables in {\tt var} must be contiguous. In the second form the argument {\tt first} is the first variable included in the block and {\tt last} is the last variable included in the block. This order does not depend on current variable order. The variable blocks are ordered as a tree, with the largest ranges at top and the smallest at the bottom. Example: Assume the block 0-9 is added as the first block and then the block 0-6. This yields the 0-9 block at the top, with the 0-6 block as a child. If now the block 2-4 was added, it would become a child of the 0-6 block. A block of 0-8 would be a child of the 0-9 block and have the 0-6 block as a child. Partially overlapping blocks are not allowed. The {\tt fixed} parameter sets the block to be fixed (no reordering of its child blocks is allowed) or free, using the constants {\tt BDD\_REORDER\_FIXED} and {\tt BDD\_REORDER\_FREE}. Reordering is always done on the top most blocks first and then recursively downwards. The return value is an integer that can be used to identify the block later on - with for example {\tt bdd\_blockfile\_hook}. The values returned will be in the sequence $0,1,2,3,\ldots$. *} RETURN {* A non-negative identifier on success, otherwise a negative error code. *} ALSO {* bdd\_varblockall, fdd\_intaddvarblock, bdd\_clrvarblocks *} */ int bdd_addvarblock(BDD b, int fixed) { BddTree *t; int n, *v, size; int first, last; if ((n=bdd_scanset(b, &v, &size)) < 0) return n; if (size < 1) return bdd_error(BDD_VARBLK); first = last = v[0]; for (n=0 ; n last) last = v[n]; } if ((t=bddtree_addrange(vartree, first,last, fixed,blockid)) == NULL) return bdd_error(BDD_VARBLK); vartree = t; return blockid++; } int bdd_intaddvarblock(int first, int last, int fixed) { BddTree *t; if (first < 0 || first >= bddvarnum || last < 0 || last >= bddvarnum) return bdd_error(BDD_VAR); if ((t=bddtree_addrange(vartree, first,last, fixed,blockid)) == NULL) return bdd_error(BDD_VARBLK); vartree = t; return blockid++; } /* NAME {* bdd\_varblockall *} SECTION {* reorder *} SHORT {* add a variable block for all variables *} PROTO {* void bdd_varblockall(void) *} DESCR {* Adds a variable block for all BDD variables declared so far. Each block contains one variable only. More variable blocks can be added later with the use of {\tt bdd\_addvarblock} -- in this case the tree of variable blocks will have the blocks of single variables as the leafs. *} ALSO {* bdd\_addvarblock, bdd\_intaddvarblock *} */ void bdd_varblockall(void) { int n; for (n=0 ; n level) reorder_varup(lowvar); } reorder_done(); } static void print_order_rec(FILE *o, BddTree *t, int level) { if (t == NULL) return; if (t->nextlevel) { fprintf(o, "%*s", level*3, ""); if (reorder_filehandler) reorder_filehandler(o,t->id); else fprintf(o, "%3d", t->id); fprintf(o, "{\n"); print_order_rec(o, t->nextlevel, level+1); fprintf(o, "%*s", level*3, ""); if (reorder_filehandler) reorder_filehandler(o,t->id); else fprintf(o, "%3d", t->id); fprintf(o, "}\n"); print_order_rec(o, t->next, level); } else { fprintf(o, "%*s", level*3, ""); if (reorder_filehandler) reorder_filehandler(o,t->id); else fprintf(o, "%3d", t->id); fprintf(o, "\n"); print_order_rec(o, t->next, level); } } void bdd_fprintorder(FILE *ofile) { print_order_rec(ofile, vartree, 0); } /* EOF */ buddy-2.4/src/tree.c0000664000076500001440000001402510067023464010050 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ /************************************************************************* $Header: /cvsroot/buddy/buddy/src/tree.c,v 1.1.1.1 2004/06/25 13:23:00 haimcohen Exp $ FILE: tree.c DESCR: Trees for BDD variables AUTH: Jorn Lind DATE: (C) march 1998 *************************************************************************/ #include #include #include "kernel.h" #include "bddtree.h" /************************************************************************* *************************************************************************/ BddTree *bddtree_addrange_rec(BddTree *, BddTree *, int, int, int, int); /*======================================================================*/ static void update_seq(BddTree *t) { int n; int low = t->first; for (n=t->first ; n<=t->last ; n++) if (bddvar2level[n] < bddvar2level[low]) low = n; for (n=t->first ; n<=t->last ; n++) t->seq[bddvar2level[n]-bddvar2level[low]] = n; } BddTree *bddtree_new(int id) { BddTree *t = NEW(BddTree,1); if (t == NULL) return NULL; t->first = t->last = -1; t->fixed = 1; t->next = t->prev = t->nextlevel = NULL; t->seq = NULL; t->id = id; return t; } void bddtree_del(BddTree *t) { if (t == NULL) return; bddtree_del(t->nextlevel); bddtree_del(t->next); if (t->seq != NULL) free(t->seq); free(t); } BddTree *bddtree_addrange_rec(BddTree *t, BddTree *prev, int first, int last, int fixed, int id) { if (first < 0 || last < 0 || last < first) return NULL; /* Empty tree -> build one */ if (t == NULL) { if ((t=bddtree_new(id)) == NULL) return NULL; t->first = first; t->fixed = fixed; t->seq = NEW(int,last-first+1); t->last = last; update_seq(t); t->prev = prev; return t; } /* Check for identity */ if (first == t->first && last == t->last) return t; /* Before this section -> insert */ if (last < t->first) { BddTree *tnew = bddtree_new(id); if (tnew == NULL) return NULL; tnew->first = first; tnew->last = last; tnew->fixed = fixed; tnew->seq = NEW(int,last-first+1); update_seq(tnew); tnew->next = t; tnew->prev = t->prev; t->prev = tnew; return tnew; } /* After this this section -> go to next */ if (first > t->last) { t->next = bddtree_addrange_rec(t->next, t, first, last, fixed, id); return t; } /* Inside this section -> insert in next level */ if (first >= t->first && last <= t->last) { t->nextlevel = bddtree_addrange_rec(t->nextlevel,NULL,first,last,fixed,id); return t; } /* Covering this section -> insert above this level */ if (first <= t->first) { BddTree *tnew; BddTree *this = t; while (1) { /* Partial cover ->error */ if (last >= this->first && last < this->last) return NULL; if (this->next == NULL || last < this->next->first) { tnew = bddtree_new(id); if (tnew == NULL) return NULL; tnew->first = first; tnew->last = last; tnew->fixed = fixed; tnew->seq = NEW(int,last-first+1); update_seq(tnew); tnew->nextlevel = t; tnew->next = this->next; tnew->prev = t->prev; if (this->next != NULL) this->next->prev = tnew; this->next = NULL; t->prev = NULL; return tnew; } this = this->next; } } return NULL; } BddTree *bddtree_addrange(BddTree *t, int first, int last, int fixed,int id) { return bddtree_addrange_rec(t,NULL,first,last,fixed,id); } #if 0 int main(void) { BddTree *t = NULL; t = bddtree_addrange(t, 8,10,1); printf("A\n"); bddtree_print(stdout, t, 0); t = bddtree_addrange(t, 2,99,1); printf("B\n"); bddtree_print(stdout, t, 0); t = bddtree_addrange(t, 11,50,1); printf("C\n"); bddtree_print(stdout, t, 0); t = bddtree_addrange(t, 5,7,1); printf("D\n"); bddtree_print(stdout, t, 0); t = bddtree_addrange(t, 5,10,1); printf("E\n"); bddtree_print(stdout, t, 0); t = bddtree_addrange(t, 100,150,1); printf("F\n"); bddtree_print(stdout, t, 0); t = bddtree_addrange(t, 60,65,1); printf("G\n"); bddtree_print(stdout, t, 0); t = bddtree_addrange(t, 3,200,1); printf("H\n"); bddtree_print(stdout, t, 0); bddtree_del(t); return 0; } #endif /* EOF */ buddy-2.4/src/bddtest.cxx0000664000076500001440000000663610067023422011125 /*======================================================================== Copyright (C) 1996-2002 by Jorn Lind-Nielsen All rights reserved Permission is hereby granted, without written agreement and without license or royalty fees, to use, reproduce, prepare derivative works, distribute, and display this software and its documentation for any purpose, provided that (1) the above copyright notice and the following two paragraphs appear in all copies of the source code and (2) redistributions, including without limitation binaries, reproduce these notices in the supporting documentation. Substantial modifications to this software may be copyrighted by their authors and need not follow the licensing terms described here, provided that the new terms are clearly indicated in all files where they apply. IN NO EVENT SHALL JORN LIND-NIELSEN, OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. JORN LIND-NIELSEN SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. ========================================================================*/ #include #include "bdd.h" #include "bvec.h" using namespace std; #define ERROR(msg) fail(msg, __FILE__, __LINE__) static void fail(const string msg, const char* file, int lineNum) { cout << "Error in " << file << "(" << lineNum << "): " << msg << endl; exit(1); } static void testSupport(void) { bdd even = bdd_ithvar(0) | bdd_ithvar(2) | bdd_ithvar(4); bdd odd = bdd_ithvar(1) | bdd_ithvar(3) | bdd_ithvar(5); cout << "Testing support\n"; bdd s1 = bdd_support(even); bdd s2 = bdd_support(odd); if (s1 != (bdd_ithvar(0) & bdd_ithvar(2) & bdd_ithvar(4))) ERROR("Support of 'even' failed\n"); if (s2 != (bdd_ithvar(1) & bdd_ithvar(3) & bdd_ithvar(5))) ERROR("Support of 'odd' failed\n"); /* Try many time in order check that the internal support ID * is set correctly */ for (int n=0 ; n<500 ; ++n) { s1 = bdd_support(even); s2 = bdd_support(odd); if (s1 != (bdd_ithvar(0) & bdd_ithvar(2) & bdd_ithvar(4))) ERROR("Support of 'even' failed"); if (s2 != (bdd_ithvar(1) & bdd_ithvar(3) & bdd_ithvar(5))) ERROR("Support of 'odd' failed"); } } void testBvecIte() { cout << "Testing ITE for vector\n"; bdd a = bdd_ithvar(0); bvec b = bvec_var(3, 1, 2); bvec c = bvec_var(3, 2, 2); bvec res = bvec_ite(a,b,c); bdd r0 = bdd_ite( bdd_ithvar(0), bdd_ithvar(1), bdd_ithvar(2) ); bdd r1 = bdd_ite( bdd_ithvar(0), bdd_ithvar(3), bdd_ithvar(4) ); bdd r2 = bdd_ite( bdd_ithvar(0), bdd_ithvar(5), bdd_ithvar(6) ); if (res[0] != r0) ERROR("Bit 0 failed."); if (res[1] != r1) ERROR("Bit 1 failed."); if (res[2] != r2) ERROR("Bit 2 failed."); } int main(int ac, char** av) { bdd_init(1000,1000); bdd_setvarnum(10); testSupport(); testBvecIte(); bdd_done(); return 0; } buddy-2.4/examples/0000777000076500001440000000000010100060521010033 5buddy-2.4/examples/Makefile.am0000644000076500001440000000017710074625254012034 EXTRA_DIST = runregression SUBDIRS = \ adder \ bddcalc \ bddtest \ cmilner \ fdd \ milner \ money \ queen \ solitare buddy-2.4/examples/Makefile.in0000644000076500001440000003260510100042063012023 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ subdir = examples DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ EXTRA_DIST = runregression SUBDIRS = \ adder \ bddcalc \ bddtest \ cmilner \ fdd \ milner \ money \ queen \ solitare all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || mkdir "$(distdir)/$$subdir" \ || exit 1; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="../$(top_distdir)" \ distdir="../$(distdir)/$$subdir" \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-generic clean-libtool clean-recursive ctags \ ctags-recursive distclean distclean-generic distclean-libtool \ distclean-recursive distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic maintainer-clean-recursive \ mostlyclean mostlyclean-generic mostlyclean-libtool \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/runregression0000755000076500001440000000376710071331747012641 #!/bin/tcsh -f # This scripts runs the regression suite for the BuDDy package. # # Methodology # ----------- # This script is responsible to run the tests, compare against the expected # results, and print report. Each test is run from its own directory. # Each test directory is self contained, and should contain: # # + 'runtest' script which will create a file with the results - 'result' # This result file will be used by runregression to be compared against # the expected result. # # + 'expected' - the expected result. # It is the responsibility of each runtest script to produce the result # file clean from any unnecessary text which might cause to false alarms. # Examples : garbage collection messages, time / date messages, etc... # Be careful not to filter out important data !! # # + Executable to run. This executable will be run by runtest script of # each test. set RESULT_FILE = result set EXPECTED_FILE = expected set RUNTEST = runtest @ tests_to_run = 0 @ tests_passed = 0 if ( $#argv == 0 ) then set testdirs = ( `ls` ) else set testdirs = ( $argv[1-] ) endif foreach testdir ( $testdirs ) if ( -d $testdir && -e $testdir/$RUNTEST ) then # a test dir cd $testdir @ tests_to_run ++ # Clean to make sure no matter what - no old results exist if ( -e $RESULT_FILE ) rm $RESULT_FILE # Run the test! echo echo "Running test $testdir ( $tests_to_run ) ..." ./$RUNTEST # Let's see if we have got result if ( -e $RESULT_FILE ) then # we have result, now compare to expected diff $RESULT_FILE $EXPECTED_FILE >& /dev/null if ( $status ) then # there is a diff between files echo "$testdir FAILED : diff found" else # no diff echo "$testdir PASSED" @ tests_passed++ endif else # no results - test failed echo "$testdir FAILED : no $RESULT_FILE created" endif if ( -e $RESULT_FILE ) rm $RESULT_FILE # clean what we have done cd .. endif end echo echo "Total tests to run : $tests_to_run" echo "Passed tests : $tests_passed" buddy-2.4/examples/adder/0000777000076500001440000000000010100060510011110 5buddy-2.4/examples/adder/Makefile.am0000644000076500001440000000015710074625455013114 include ../Makefile.def EXTRA_DIST = \ runtest \ expected check_PROGRAMS = adder adder_SOURCES = adder.cxx buddy-2.4/examples/adder/Makefile.in0000644000076500001440000003202410100042064013076 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(adder_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = adder$(EXEEXT) subdir = examples/adder ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_adder_OBJECTS = adder.$(OBJEXT) adder_OBJECTS = $(am_adder_OBJECTS) adder_LDADD = $(LDADD) adder_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/adder.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(adder_SOURCES) DIST_SOURCES = $(adder_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ runtest \ expected adder_SOURCES = adder.cxx all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/adder/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/adder/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done adder$(EXEEXT): $(adder_OBJECTS) $(adder_DEPENDENCIES) @rm -f adder$(EXEEXT) $(CXXLINK) $(adder_LDFLAGS) $(adder_OBJECTS) $(adder_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adder.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/adder/adder.cxx0000664000076500001440000000747210067023345012664 /************************************************************************* FILE: adder.cc DESCR: BDD implementation of an N bit adder. AUTH: Jorn Lind DATE: feb 1998 *************************************************************************/ #include #include #include "bdd.h" int N; bdd *ainp; bdd *binp; bdd *co; bdd *xout; /************************************************************************* Adder *************************************************************************/ void build_adder(void) { int n; for (n=0 ; n 0) { xout[n] = ainp[n] ^ binp[n] ^ co[n-1]; co[n] = ainp[n] & binp[n] | ainp[n] & co[n-1] | binp[n] & co[n-1]; } else { xout[n] = ainp[n] ^ binp[n]; co[n] = ainp[n] & binp[n]; } } } int main(int argc, char **argv) { using namespace std ; int method=BDD_REORDER_NONE; int n; if(argc < 2 || argc > 3) { cout << "usage: adder N R\n"; cout << " N number of bits\n"; cout << " R -> enable reordering if R is win2,win2ite,win3,win3ite,sift,siftite\n"; cout << " in this case 'adder' starts with a worst case ordering\n"; exit(1); } N = atoi(argv[1]); if (N <= 0) { cout << "The number of bits must be more than zero\n"; exit(2); } if (argc == 3) { if (strcmp(argv[2], "win2") == 0) method = BDD_REORDER_WIN2; else if (strcmp(argv[2], "win2ite") == 0) method = BDD_REORDER_WIN2ITE; else if (strcmp(argv[2], "win3") == 0) method = BDD_REORDER_WIN3; else if (strcmp(argv[2], "win3ite") == 0) method = BDD_REORDER_WIN3ITE; else if (strcmp(argv[2], "sift") == 0) method = BDD_REORDER_SIFT; else if (strcmp(argv[2], "siftite") == 0) method = BDD_REORDER_SIFTITE; else if (strcmp(argv[2], "rand") == 0) method = BDD_REORDER_RANDOM; } bdd_init(500,1000); bdd_setvarnum(2*N); ainp = new bdd[N]; binp = new bdd[N]; co = new bdd[N]; xout = new bdd[N]; for (n=0 ; n> 1; } return x; } int test_vector(bdd av, bdd bv, int a, int b) { int res = a+b; for (int n=0 ; n> 1; } return 1; } int test_adder(void) { int m = 1 << N; for (int a=0 ; a> result ./adder $N $reorder | egrep -v '^Garbage collection' >> result end end buddy-2.4/examples/adder/expected0000644000076500001440000002504310071316630012572 Running with N = 4, reordering type=win2 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 33 nodes Running with N = 4, reordering type=win2ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 33 nodes Running with N = 4, reordering type=win3 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 10 nodes Out[3]: 13 nodes Running with N = 4, reordering type=win3ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Running with N = 4, reordering type=sift Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Running with N = 4, reordering type=siftite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Running with N = 4, reordering type=adder Sizes: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Running with N = 8, reordering type=win2 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 513 nodes Running with N = 8, reordering type=win2ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 513 nodes Running with N = 8, reordering type=win3 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 130 nodes Out[7]: 133 nodes Running with N = 8, reordering type=win3ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Running with N = 8, reordering type=sift Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Running with N = 8, reordering type=siftite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Running with N = 8, reordering type=adder Sizes: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Running with N = 11, reordering type=win2 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4097 nodes Running with N = 11, reordering type=win2ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4097 nodes Running with N = 11, reordering type=win3 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 1026 nodes Out[10]: 1029 nodes Running with N = 11, reordering type=win3ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Running with N = 11, reordering type=sift Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Running with N = 11, reordering type=siftite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Running with N = 11, reordering type=adder Sizes: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Running with N = 14, reordering type=win2 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32767 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32769 nodes Running with N = 14, reordering type=win2ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32767 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32769 nodes Running with N = 14, reordering type=win3 Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32767 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 8194 nodes Out[13]: 8197 nodes Running with N = 14, reordering type=win3ite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32767 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Out[11]: 36 nodes Out[12]: 39 nodes Out[13]: 42 nodes Running with N = 14, reordering type=sift Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32767 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Out[11]: 36 nodes Out[12]: 39 nodes Out[13]: 42 nodes Running with N = 14, reordering type=siftite Sizes before reordering: Out[0]: 3 nodes Out[1]: 7 nodes Out[2]: 15 nodes Out[3]: 31 nodes Out[4]: 63 nodes Out[5]: 127 nodes Out[6]: 255 nodes Out[7]: 511 nodes Out[8]: 1023 nodes Out[9]: 2047 nodes Out[10]: 4095 nodes Out[11]: 8191 nodes Out[12]: 16383 nodes Out[13]: 32767 nodes Sizes after reordering: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Out[11]: 36 nodes Out[12]: 39 nodes Out[13]: 42 nodes Running with N = 14, reordering type=adder Sizes: Out[0]: 3 nodes Out[1]: 6 nodes Out[2]: 9 nodes Out[3]: 12 nodes Out[4]: 15 nodes Out[5]: 18 nodes Out[6]: 21 nodes Out[7]: 24 nodes Out[8]: 27 nodes Out[9]: 30 nodes Out[10]: 33 nodes Out[11]: 36 nodes Out[12]: 39 nodes Out[13]: 42 nodes buddy-2.4/examples/Makefile.def0000644000076500001440000000012410074021567012162 AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la buddy-2.4/examples/bddcalc/0000777000076500001440000000000010100060513011410 5buddy-2.4/examples/bddcalc/examples/0000777000076500001440000000000010100060513013226 5buddy-2.4/examples/bddcalc/examples/c432.cal0000664000076500001440000001176210067023375014330 /* BDD Calculator data file */ initial 10000 10000; inputs _1gat _4gat _8gat _11gat _14gat _17gat _21gat _24gat _27gat _30gat _34gat _37gat _40gat _43gat _47gat _50gat _53gat _56gat _60gat _63gat _66gat _69gat _73gat _76gat _79gat _82gat _86gat _89gat _92gat _95gat _99gat _102gat _105gat _108gat _112gat _115gat ; actions autoreorder 0 win2ite; t2 = _8gat; t3 = _89gat; t4 = not t3; t5 = _95gat; t6 = t4 nand t5; t7 = _76gat; t8 = not t7; t9 = _82gat; t10 = t8 nand t9; t11 = _63gat; t12 = not t11; t13 = _69gat; t14 = t12 nand t13; t15 = _50gat; t16 = not t15; t17 = _56gat; t18 = t16 nand t17; t19 = _37gat; t20 = not t19; t21 = _43gat; t22 = t20 nand t21; t23 = _24gat; t24 = not t23; t25 = _30gat; t26 = t24 nand t25; t27 = _1gat; t28 = not t27; t29 = _4gat; t30 = t28 nand t29; t31 = _11gat; t32 = not t31; t33 = _17gat; t34 = t32 nand t33; t35 = t30 and t34; t36 = t26 and t35; t37 = t22 and t36; t38 = t18 and t37; t39 = t14 and t38; t40 = t10 and t39; t41 = t6 and t40; t42 = _102gat; t43 = not t42; t44 = _108gat; t45 = t43 nand t44; t46 = t41 and t45; t47 = not t46; t48 = t47 xor t6; t49 = _99gat; t50 = not t5; t51 = t49 nor t50; t52 = t48 nand t51; t53 = t47 xor t10; t54 = _86gat; t55 = not t9; t56 = t54 nor t55; t57 = t53 nand t56; t58 = t47 xor t14; t59 = _73gat; t60 = not t13; t61 = t59 nor t60; t62 = t58 nand t61; t63 = t47 xor t18; t64 = _60gat; t65 = not t17; t66 = t64 nor t65; t67 = t63 nand t66; t68 = t47 xor t22; t69 = _47gat; t70 = not t21; t71 = t69 nor t70; t72 = t68 nand t71; t73 = t47 xor t26; t74 = _34gat; t75 = not t25; t76 = t74 nor t75; t77 = t73 nand t76; t78 = t47 xor t30; t79 = not t29; t80 = t2 nor t79; t81 = t78 nand t80; t82 = t47 xor t34; t83 = _21gat; t84 = not t33; t85 = t83 nor t84; t86 = t82 nand t85; t87 = t81 and t86; t88 = t77 and t87; t89 = t72 and t88; t90 = t67 and t89; t91 = t62 and t90; t92 = t57 and t91; t93 = t52 and t92; t94 = t47 xor t45; t95 = _112gat; t96 = not t44; t97 = t95 nor t96; t98 = t94 nand t97; t99 = t93 and t98; t100 = not t99; t101 = t2 nand t100; t102 = t27 nand t47; t103 = t29 and t102; t104 = t101 and t103; t105 = _14gat; t106 = t100 xor t52; t107 = _105gat; t108 = t107 nor t50; t109 = t48 nand t108; t110 = not t109; t111 = t106 nand t110; t112 = t100 xor t57; t113 = _92gat; t114 = t113 nor t55; t115 = t53 nand t114; t116 = not t115; t117 = t112 nand t116; t118 = t100 xor t62; t119 = _79gat; t120 = t119 nor t60; t121 = t58 nand t120; t122 = not t121; t123 = t118 nand t122; t124 = t100 xor t67; t125 = _66gat; t126 = t125 nor t65; t127 = t63 nand t126; t128 = not t127; t129 = t124 nand t128; t130 = t100 xor t72; t131 = _53gat; t132 = t131 nor t70; t133 = t68 nand t132; t134 = not t133; t135 = t130 nand t134; t136 = t100 xor t77; t137 = _40gat; t138 = t137 nor t75; t139 = t73 nand t138; t140 = not t139; t141 = t136 nand t140; t142 = t100 xor t81; t143 = t105 nor t79; t144 = t78 nand t143; t145 = not t144; t146 = t142 nand t145; t147 = t100 xor t86; t148 = _27gat; t149 = t148 nor t84; t150 = t82 nand t149; t151 = not t150; t152 = t147 nand t151; t153 = t146 and t152; t154 = t141 and t153; t155 = t135 and t154; t156 = t129 and t155; t157 = t123 and t156; t158 = t117 and t157; t159 = t111 and t158; t160 = t100 xor t98; t161 = _115gat; t162 = t161 nor t96; t163 = t94 nand t162; t164 = not t163; t165 = t160 nand t164; t166 = t159 and t165; t167 = not t166; t168 = t105 nand t167; t169 = t104 nand t168; t170 = not t169; t171 = t167 nand t107; t172 = t47 nand t3; t173 = t100 nand t49; t174 = t172 and t173; t175 = t171 and t174; t176 = t175 nand t5; t177 = t167 nand t113; t178 = t47 nand t7; t179 = t100 nand t54; t180 = t178 and t179; t181 = t177 and t180; t182 = t181 nand t9; t183 = t167 nand t119; t184 = t47 nand t11; t185 = t100 nand t59; t186 = t184 and t185; t187 = t183 and t186; t188 = t187 nand t13; t189 = t167 nand t125; t190 = t47 nand t15; t191 = t100 nand t64; t192 = t190 and t191; t193 = t189 and t192; t194 = t193 nand t17; t195 = t167 nand t131; t196 = t47 nand t19; t197 = t100 nand t69; t198 = t196 and t197; t199 = t195 and t198; t200 = t199 nand t21; t201 = t167 nand t148; t202 = t47 nand t31; t203 = t100 nand t83; t204 = t202 and t203; t205 = t201 and t204; t206 = t205 nand t33; t207 = t167 nand t137; t208 = t47 nand t23; t209 = t100 nand t74; t210 = t208 and t209; t211 = t207 and t210; t212 = t211 nand t25; t213 = t206 and t212; t214 = t200 and t213; t215 = t194 and t214; t216 = t188 and t215; t217 = t182 and t216; t218 = t176 and t217; t219 = t167 nand t161; t220 = t47 nand t42; t221 = t100 nand t95; t222 = t220 and t221; t223 = t219 and t222; t224 = t223 nand t44; t225 = t218 and t224; t226 = t170 nor t225; t227 = t218 and t96; t228 = t170 nor t227; t229 = t226 biimp t228; t230 = not t188; t231 = t212 and t200; t232 = t230 and t231; t233 = t232 nand t194; t234 = not t200; t235 = t212 nand t234; t236 = t206 and t235; t237 = t233 and t236; t238 = t182 and t231; t239 = not t176; t240 = t238 nand t239; t241 = t237 nand t240; t242 = t212 and t182; t243 = t242 nand t239; t244 = t237 nand t243; t245 = t241 biimp t244; tautology t229; tautology t245; buddy-2.4/examples/bddcalc/examples/c499.cal0000664000076500001440000001751010067023367014343 /* BDD Calculator data file */ initial 10000 10000; inputs id0 id1 id2 id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 ic0 ic1 ic2 ic3 ic4 ic5 ic6 ic7 r ; actions autoreorder 0 sift; t2 = id0; t3 = id4; t4 = t2 xor t3; t5 = id8; t6 = id12; t7 = t5 xor t6; t8 = t4 xor t7; t9 = ic0; t10 = r; t11 = t9 and t10; t12 = id16; t13 = id17; t14 = t12 xor t13; t15 = id18; t16 = id19; t17 = t15 xor t16; t18 = t14 xor t17; t19 = id20; t20 = id21; t21 = t19 xor t20; t22 = id22; t23 = id23; t24 = t22 xor t23; t25 = t21 xor t24; t26 = t18 xor t25; t27 = t11 xor t26; t28 = t8 xor t27; t29 = t16 xor t23; t30 = id27; t31 = id31; t32 = t30 xor t31; t33 = t29 xor t32; t34 = ic7; t35 = t34 and t10; t36 = id5; t37 = t3 xor t36; t38 = id6; t39 = id7; t40 = t38 xor t39; t41 = t37 xor t40; t42 = id13; t43 = t6 xor t42; t44 = id14; t45 = id15; t46 = t44 xor t45; t47 = t43 xor t46; t48 = t41 xor t47; t49 = t35 xor t48; t50 = t33 xor t49; t51 = not t50; t52 = t15 xor t22; t53 = id26; t54 = id30; t55 = t53 xor t54; t56 = t52 xor t55; t57 = ic6; t58 = t57 and t10; t59 = id1; t60 = t2 xor t59; t61 = id2; t62 = id3; t63 = t61 xor t62; t64 = t60 xor t63; t65 = id9; t66 = t5 xor t65; t67 = id10; t68 = id11; t69 = t67 xor t68; t70 = t66 xor t69; t71 = t64 xor t70; t72 = t58 xor t71; t73 = t56 xor t72; t74 = t12 xor t19; t75 = id24; t76 = id28; t77 = t75 xor t76; t78 = t74 xor t77; t79 = ic4; t80 = t79 and t10; t81 = t64 xor t41; t82 = t80 xor t81; t83 = t78 xor t82; t84 = t13 xor t20; t85 = id25; t86 = id29; t87 = t85 xor t86; t88 = t84 xor t87; t89 = ic5; t90 = t89 and t10; t91 = t70 xor t47; t92 = t90 xor t91; t93 = t88 xor t92; t94 = not t93; t95 = t83 and t94; t96 = t73 and t95; t97 = t51 and t96; t98 = t61 xor t38; t99 = t67 xor t44; t100 = t98 xor t99; t101 = ic2; t102 = t101 and t10; t103 = t75 xor t85; t104 = t53 xor t30; t105 = t103 xor t104; t106 = t18 xor t105; t107 = t102 xor t106; t108 = t100 xor t107; t109 = not t108; t110 = not t28; t111 = t59 xor t36; t112 = t65 xor t42; t113 = t111 xor t112; t114 = ic1; t115 = t114 and t10; t116 = t76 xor t86; t117 = t54 xor t31; t118 = t116 xor t117; t119 = t105 xor t118; t120 = t115 xor t119; t121 = t113 xor t120; t122 = t110 and t121; t123 = t109 and t122; t124 = t62 xor t39; t125 = t68 xor t45; t126 = t124 xor t125; t127 = ic3; t128 = t127 and t10; t129 = t25 xor t118; t130 = t128 xor t129; t131 = t126 xor t130; t132 = not t131; t133 = t123 and t132; t134 = not t121; t135 = t110 and t134; t136 = t109 and t135; t137 = t136 and t131; t138 = t108 and t135; t139 = t138 and t132; t140 = t137 or t139; t141 = t133 or t140; t142 = t28 and t134; t143 = t109 and t142; t144 = t143 and t132; t145 = t141 or t144; t146 = t97 and t145; t147 = t28 and t146; t148 = t2 xor t147; t149 = t110 and t109; t150 = t149 and t132; t151 = t135 and t109; t152 = t135 and t132; t153 = t151 or t152; t154 = t150 or t153; t155 = t134 and t109; t156 = t155 and t132; t157 = t154 or t156; t158 = t97 and t157; t159 = t28 and t158; t160 = t2 xor t159; t161 = t148 biimp t160; t162 = t121 and t146; t163 = t59 xor t162; t164 = t121 and t158; t165 = t59 xor t164; t166 = t163 biimp t165; t202 = not t83; t203 = t202 and t93; t204 = t73 and t203; t205 = t51 and t204; t206 = t205 and t145; t218 = t108 and t206; t219 = t67 xor t218; t209 = t205 and t157; t220 = t108 and t209; t221 = t67 xor t220; t222 = t219 biimp t221; t223 = t131 and t206; t224 = t68 xor t223; t225 = t131 and t209; t226 = t68 xor t225; t227 = t224 biimp t226; t177 = not t73; t228 = t177 and t203; t229 = t50 and t228; t230 = t229 and t145; t231 = t28 and t230; t232 = t6 xor t231; t233 = t229 and t157; t234 = t28 and t233; t235 = t6 xor t234; t236 = t232 biimp t235; t237 = t121 and t230; t238 = t42 xor t237; t239 = t121 and t233; t240 = t42 xor t239; t241 = t238 biimp t240; t242 = t108 and t230; t243 = t44 xor t242; t244 = t108 and t233; t245 = t44 xor t244; t246 = t243 biimp t245; t247 = t131 and t230; t248 = t45 xor t247; t249 = t131 and t233; t250 = t45 xor t249; t251 = t248 biimp t250; t252 = t108 and t142; t253 = t132 and t252; t254 = t228 and t51; t255 = t202 and t94; t256 = t177 and t255; t257 = t256 and t50; t258 = t73 and t255; t259 = t258 and t51; t260 = t257 or t259; t261 = t254 or t260; t178 = t177 and t95; t262 = t178 and t51; t263 = t261 or t262; t264 = t253 and t263; t265 = t83 and t264; t266 = t12 xor t265; t267 = t202 and t177; t268 = t267 and t51; t269 = t255 and t177; t270 = t255 and t51; t271 = t269 or t270; t272 = t268 or t271; t273 = t94 and t177; t274 = t273 and t51; t275 = t272 or t274; t276 = t253 and t275; t277 = t83 and t276; t278 = t12 xor t277; t279 = t266 biimp t278; t280 = t93 and t264; t281 = t13 xor t280; t282 = t93 and t276; t283 = t13 xor t282; t284 = t281 biimp t283; t285 = t73 and t264; t286 = t15 xor t285; t287 = t73 and t276; t288 = t15 xor t287; t289 = t286 biimp t288; t290 = t50 and t264; t291 = t16 xor t290; t292 = t50 and t276; t293 = t16 xor t292; t294 = t291 biimp t293; t167 = t108 and t146; t168 = t61 xor t167; t169 = t108 and t158; t170 = t61 xor t169; t171 = t168 biimp t170; t295 = t131 and t143; t296 = t295 and t263; t297 = t83 and t296; t298 = t19 xor t297; t299 = t295 and t275; t300 = t83 and t299; t301 = t19 xor t300; t302 = t298 biimp t301; t303 = t93 and t296; t304 = t20 xor t303; t305 = t93 and t299; t306 = t20 xor t305; t307 = t304 biimp t306; t308 = t73 and t296; t309 = t22 xor t308; t310 = t73 and t299; t311 = t22 xor t310; t312 = t309 biimp t311; t313 = t50 and t296; t314 = t23 xor t313; t315 = t50 and t299; t316 = t23 xor t315; t317 = t314 biimp t316; t318 = t108 and t122; t319 = t132 and t318; t320 = t319 and t263; t321 = t83 and t320; t322 = t75 xor t321; t323 = t319 and t275; t324 = t83 and t323; t325 = t75 xor t324; t326 = t322 biimp t325; t327 = t93 and t320; t328 = t85 xor t327; t329 = t93 and t323; t330 = t85 xor t329; t331 = t328 biimp t330; t332 = t73 and t320; t333 = t53 xor t332; t334 = t73 and t323; t335 = t53 xor t334; t336 = t333 biimp t335; t337 = t50 and t320; t338 = t30 xor t337; t339 = t50 and t323; t340 = t30 xor t339; t341 = t338 biimp t340; t342 = t131 and t123; t343 = t342 and t263; t344 = t83 and t343; t345 = t76 xor t344; t346 = t342 and t275; t347 = t83 and t346; t348 = t76 xor t347; t349 = t345 biimp t348; t350 = t93 and t343; t351 = t86 xor t350; t352 = t93 and t346; t353 = t86 xor t352; t354 = t351 biimp t353; t172 = t131 and t146; t173 = t62 xor t172; t174 = t131 and t158; t175 = t62 xor t174; t176 = t173 biimp t175; t355 = t73 and t343; t356 = t54 xor t355; t357 = t73 and t346; t358 = t54 xor t357; t359 = t356 biimp t358; t360 = t50 and t343; t361 = t31 xor t360; t362 = t50 and t346; t363 = t31 xor t362; t364 = t361 biimp t363; t179 = t50 and t178; t180 = t179 and t145; t181 = t28 and t180; t182 = t3 xor t181; t183 = t179 and t157; t184 = t28 and t183; t185 = t3 xor t184; t186 = t182 biimp t185; t187 = t121 and t180; t188 = t36 xor t187; t189 = t121 and t183; t190 = t36 xor t189; t191 = t188 biimp t190; t192 = t108 and t180; t193 = t38 xor t192; t194 = t108 and t183; t195 = t38 xor t194; t196 = t193 biimp t195; t197 = t131 and t180; t198 = t39 xor t197; t199 = t131 and t183; t200 = t39 xor t199; t201 = t198 biimp t200; t207 = t28 and t206; t208 = t5 xor t207; t210 = t28 and t209; t211 = t5 xor t210; t212 = t208 biimp t211; t213 = t121 and t206; t214 = t65 xor t213; t215 = t121 and t209; t216 = t65 xor t215; t217 = t214 biimp t216; tautology t161; tautology t166; tautology t222; tautology t227; tautology t236; tautology t241; tautology t246; tautology t251; tautology t279; tautology t284; tautology t289; tautology t294; tautology t171; tautology t302; tautology t307; tautology t312; tautology t317; tautology t326; tautology t331; tautology t336; tautology t341; tautology t349; tautology t354; tautology t176; tautology t359; tautology t364; tautology t186; tautology t191; tautology t196; tautology t201; tautology t212; tautology t217; buddy-2.4/examples/bddcalc/examples/c1355.cal0000664000076500001440000004252410067023367014416 /* BDD Calculator data file */ initial 10000 10000; inputs _1gat _8gat _15gat _22gat _29gat _36gat _43gat _50gat _57gat _64gat _71gat _78gat _85gat _92gat _99gat _106gat _113gat _120gat _127gat _134gat _141gat _148gat _155gat _162gat _169gat _176gat _183gat _190gat _197gat _204gat _211gat _218gat _225gat _226gat _227gat _228gat _229gat _230gat _231gat _232gat _233gat ; actions autoreorder 0 sift; t2 = _1gat; t3 = _29gat; t4 = t2 nand t3; t5 = t2 nand t4; t6 = t3 nand t4; t7 = t5 nand t6; t8 = _57gat; t9 = _85gat; t10 = t8 nand t9; t11 = t8 nand t10; t12 = t9 nand t10; t13 = t11 nand t12; t14 = t7 nand t13; t15 = t7 nand t14; t16 = t13 nand t14; t17 = t15 nand t16; t18 = _225gat; t19 = _233gat; t20 = t18 and t19; t21 = _113gat; t22 = _120gat; t23 = t21 nand t22; t24 = t21 nand t23; t25 = t22 nand t23; t26 = t24 nand t25; t27 = _127gat; t28 = _134gat; t29 = t27 nand t28; t30 = t27 nand t29; t31 = t28 nand t29; t32 = t30 nand t31; t33 = t26 nand t32; t34 = t26 nand t33; t35 = t32 nand t33; t36 = t34 nand t35; t37 = _141gat; t38 = _148gat; t39 = t37 nand t38; t40 = t37 nand t39; t41 = t38 nand t39; t42 = t40 nand t41; t43 = _155gat; t44 = _162gat; t45 = t43 nand t44; t46 = t43 nand t45; t47 = t44 nand t45; t48 = t46 nand t47; t49 = t42 nand t48; t50 = t42 nand t49; t51 = t48 nand t49; t52 = t50 nand t51; t53 = t36 nand t52; t54 = t36 nand t53; t55 = t52 nand t53; t56 = t54 nand t55; t57 = t20 nand t56; t58 = t20 nand t57; t59 = t56 nand t57; t60 = t58 nand t59; t61 = t17 nand t60; t62 = t17 nand t61; t63 = t60 nand t61; t64 = t62 nand t63; t65 = t28 nand t44; t66 = t28 nand t65; t67 = t44 nand t65; t68 = t66 nand t67; t69 = _190gat; t70 = _218gat; t71 = t69 nand t70; t72 = t69 nand t71; t73 = t70 nand t71; t74 = t72 nand t73; t75 = t68 nand t74; t76 = t68 nand t75; t77 = t74 nand t75; t78 = t76 nand t77; t79 = _232gat; t80 = t79 and t19; t81 = _36gat; t82 = t3 nand t81; t83 = t3 nand t82; t84 = t81 nand t82; t85 = t83 nand t84; t86 = _43gat; t87 = _50gat; t88 = t86 nand t87; t89 = t86 nand t88; t90 = t87 nand t88; t91 = t89 nand t90; t92 = t85 nand t91; t93 = t85 nand t92; t94 = t91 nand t92; t95 = t93 nand t94; t96 = _92gat; t97 = t9 nand t96; t98 = t9 nand t97; t99 = t96 nand t97; t100 = t98 nand t99; t101 = _99gat; t102 = _106gat; t103 = t101 nand t102; t104 = t101 nand t103; t105 = t102 nand t103; t106 = t104 nand t105; t107 = t100 nand t106; t108 = t100 nand t107; t109 = t106 nand t107; t110 = t108 nand t109; t111 = t95 nand t110; t112 = t95 nand t111; t113 = t110 nand t111; t114 = t112 nand t113; t115 = t80 nand t114; t116 = t80 nand t115; t117 = t114 nand t115; t118 = t116 nand t117; t119 = t78 nand t118; t120 = t78 nand t119; t121 = t118 nand t119; t122 = t120 nand t121; t123 = not t122; t124 = t27 nand t43; t125 = t27 nand t124; t126 = t43 nand t124; t127 = t125 nand t126; t128 = _183gat; t129 = _211gat; t130 = t128 nand t129; t131 = t128 nand t130; t132 = t129 nand t130; t133 = t131 nand t132; t134 = t127 nand t133; t135 = t127 nand t134; t136 = t133 nand t134; t137 = t135 nand t136; t138 = _231gat; t139 = t138 and t19; t140 = _8gat; t141 = t2 nand t140; t142 = t2 nand t141; t143 = t140 nand t141; t144 = t142 nand t143; t145 = _15gat; t146 = _22gat; t147 = t145 nand t146; t148 = t145 nand t147; t149 = t146 nand t147; t150 = t148 nand t149; t151 = t144 nand t150; t152 = t144 nand t151; t153 = t150 nand t151; t154 = t152 nand t153; t155 = _64gat; t156 = t8 nand t155; t157 = t8 nand t156; t158 = t155 nand t156; t159 = t157 nand t158; t160 = _71gat; t161 = _78gat; t162 = t160 nand t161; t163 = t160 nand t162; t164 = t161 nand t162; t165 = t163 nand t164; t166 = t159 nand t165; t167 = t159 nand t166; t168 = t165 nand t166; t169 = t167 nand t168; t170 = t154 nand t169; t171 = t154 nand t170; t172 = t169 nand t170; t173 = t171 nand t172; t174 = t139 nand t173; t175 = t139 nand t174; t176 = t173 nand t174; t177 = t175 nand t176; t178 = t137 nand t177; t179 = t137 nand t178; t180 = t177 nand t178; t181 = t179 nand t180; t182 = t21 nand t37; t183 = t21 nand t182; t184 = t37 nand t182; t185 = t183 nand t184; t186 = _169gat; t187 = _197gat; t188 = t186 nand t187; t189 = t186 nand t188; t190 = t187 nand t188; t191 = t189 nand t190; t192 = t185 nand t191; t193 = t185 nand t192; t194 = t191 nand t192; t195 = t193 nand t194; t196 = _229gat; t197 = t196 and t19; t198 = t154 nand t95; t199 = t154 nand t198; t200 = t95 nand t198; t201 = t199 nand t200; t202 = t197 nand t201; t203 = t197 nand t202; t204 = t201 nand t202; t205 = t203 nand t204; t206 = t195 nand t205; t207 = t195 nand t206; t208 = t205 nand t206; t209 = t207 nand t208; t210 = t22 nand t38; t211 = t22 nand t210; t212 = t38 nand t210; t213 = t211 nand t212; t214 = _176gat; t215 = _204gat; t216 = t214 nand t215; t217 = t214 nand t216; t218 = t215 nand t216; t219 = t217 nand t218; t220 = t213 nand t219; t221 = t213 nand t220; t222 = t219 nand t220; t223 = t221 nand t222; t224 = _230gat; t225 = t224 and t19; t226 = t169 nand t110; t227 = t169 nand t226; t228 = t110 nand t226; t229 = t227 nand t228; t230 = t225 nand t229; t231 = t225 nand t230; t232 = t229 nand t230; t233 = t231 nand t232; t234 = t223 nand t233; t235 = t223 nand t234; t236 = t233 nand t234; t237 = t235 nand t236; t238 = not t237; t239 = t209 and t238; t240 = t181 and t239; t241 = t123 and t240; t242 = t145 nand t86; t243 = t145 nand t242; t244 = t86 nand t242; t245 = t243 nand t244; t246 = t160 nand t101; t247 = t160 nand t246; t248 = t101 nand t246; t249 = t247 nand t248; t250 = t245 nand t249; t251 = t245 nand t250; t252 = t249 nand t250; t253 = t251 nand t252; t254 = _227gat; t255 = t254 and t19; t256 = t186 nand t214; t257 = t186 nand t256; t258 = t214 nand t256; t259 = t257 nand t258; t260 = t128 nand t69; t261 = t128 nand t260; t262 = t69 nand t260; t263 = t261 nand t262; t264 = t259 nand t263; t265 = t259 nand t264; t266 = t263 nand t264; t267 = t265 nand t266; t268 = t36 nand t267; t269 = t36 nand t268; t270 = t267 nand t268; t271 = t269 nand t270; t272 = t255 nand t271; t273 = t255 nand t272; t274 = t271 nand t272; t275 = t273 nand t274; t276 = t253 nand t275; t277 = t253 nand t276; t278 = t275 nand t276; t279 = t277 nand t278; t280 = not t279; t281 = not t64; t282 = t140 nand t81; t283 = t140 nand t282; t284 = t81 nand t282; t285 = t283 nand t284; t286 = t155 nand t96; t287 = t155 nand t286; t288 = t96 nand t286; t289 = t287 nand t288; t290 = t285 nand t289; t291 = t285 nand t290; t292 = t289 nand t290; t293 = t291 nand t292; t294 = _226gat; t295 = t294 and t19; t296 = t187 nand t215; t297 = t187 nand t296; t298 = t215 nand t296; t299 = t297 nand t298; t300 = t129 nand t70; t301 = t129 nand t300; t302 = t70 nand t300; t303 = t301 nand t302; t304 = t299 nand t303; t305 = t299 nand t304; t306 = t303 nand t304; t307 = t305 nand t306; t308 = t267 nand t307; t309 = t267 nand t308; t310 = t307 nand t308; t311 = t309 nand t310; t312 = t295 nand t311; t313 = t295 nand t312; t314 = t311 nand t312; t315 = t313 nand t314; t316 = t293 nand t315; t317 = t293 nand t316; t318 = t315 nand t316; t319 = t317 nand t318; t320 = t281 and t319; t321 = t280 and t320; t322 = t146 nand t87; t323 = t146 nand t322; t324 = t87 nand t322; t325 = t323 nand t324; t326 = t161 nand t102; t327 = t161 nand t326; t328 = t102 nand t326; t329 = t327 nand t328; t330 = t325 nand t329; t331 = t325 nand t330; t332 = t329 nand t330; t333 = t331 nand t332; t334 = _228gat; t335 = t334 and t19; t336 = t52 nand t307; t337 = t52 nand t336; t338 = t307 nand t336; t339 = t337 nand t338; t340 = t335 nand t339; t341 = t335 nand t340; t342 = t339 nand t340; t343 = t341 nand t342; t344 = t333 nand t343; t345 = t333 nand t344; t346 = t343 nand t344; t347 = t345 nand t346; t348 = not t347; t349 = t321 and t348; t350 = not t319; t351 = t281 and t350; t352 = t280 and t351; t353 = t352 and t347; t354 = t279 and t351; t355 = t354 and t348; t356 = t353 or t355; t357 = t349 or t356; t358 = t64 and t350; t359 = t280 and t358; t360 = t359 and t348; t361 = t357 or t360; t362 = t241 and t361; t363 = t64 and t362; t364 = t2 nand t363; t365 = t2 nand t364; t366 = t363 nand t364; t367 = t365 nand t366; t368 = t281 and t280; t369 = t368 and t348; t370 = t351 and t280; t371 = t351 and t348; t372 = t370 or t371; t373 = t369 or t372; t374 = t350 and t280; t375 = t374 and t348; t376 = t373 or t375; t377 = t241 and t376; t378 = t64 and t377; t379 = t2 nand t378; t380 = t2 nand t379; t381 = t378 nand t379; t382 = t380 nand t381; t383 = t367 biimp t382; t384 = t319 and t362; t385 = t140 nand t384; t386 = t140 nand t385; t387 = t384 nand t385; t388 = t386 nand t387; t389 = t319 and t377; t390 = t140 nand t389; t391 = t140 nand t390; t392 = t389 nand t390; t393 = t391 nand t392; t394 = t388 biimp t393; t466 = not t209; t467 = t466 and t237; t468 = t181 and t467; t469 = t123 and t468; t470 = t469 and t361; t494 = t279 and t470; t495 = t160 nand t494; t496 = t160 nand t495; t497 = t494 nand t495; t498 = t496 nand t497; t476 = t469 and t376; t499 = t279 and t476; t500 = t160 nand t499; t501 = t160 nand t500; t502 = t499 nand t500; t503 = t501 nand t502; t504 = t498 biimp t503; t505 = t347 and t470; t506 = t161 nand t505; t507 = t161 nand t506; t508 = t505 nand t506; t509 = t507 nand t508; t510 = t347 and t476; t511 = t161 nand t510; t512 = t161 nand t511; t513 = t510 nand t511; t514 = t512 nand t513; t515 = t509 biimp t514; t417 = not t181; t516 = t417 and t467; t517 = t122 and t516; t518 = t517 and t361; t519 = t64 and t518; t520 = t9 nand t519; t521 = t9 nand t520; t522 = t519 nand t520; t523 = t521 nand t522; t524 = t517 and t376; t525 = t64 and t524; t526 = t9 nand t525; t527 = t9 nand t526; t528 = t525 nand t526; t529 = t527 nand t528; t530 = t523 biimp t529; t531 = t319 and t518; t532 = t96 nand t531; t533 = t96 nand t532; t534 = t531 nand t532; t535 = t533 nand t534; t536 = t319 and t524; t537 = t96 nand t536; t538 = t96 nand t537; t539 = t536 nand t537; t540 = t538 nand t539; t541 = t535 biimp t540; t542 = t279 and t518; t543 = t101 nand t542; t544 = t101 nand t543; t545 = t542 nand t543; t546 = t544 nand t545; t547 = t279 and t524; t548 = t101 nand t547; t549 = t101 nand t548; t550 = t547 nand t548; t551 = t549 nand t550; t552 = t546 biimp t551; t553 = t347 and t518; t554 = t102 nand t553; t555 = t102 nand t554; t556 = t553 nand t554; t557 = t555 nand t556; t558 = t347 and t524; t559 = t102 nand t558; t560 = t102 nand t559; t561 = t558 nand t559; t562 = t560 nand t561; t563 = t557 biimp t562; t564 = t279 and t358; t565 = t348 and t564; t566 = t516 and t123; t567 = t466 and t238; t568 = t417 and t567; t569 = t568 and t122; t570 = t181 and t567; t571 = t570 and t123; t572 = t569 or t571; t573 = t566 or t572; t418 = t417 and t239; t574 = t418 and t123; t575 = t573 or t574; t576 = t565 and t575; t577 = t209 and t576; t578 = t21 nand t577; t579 = t21 nand t578; t580 = t577 nand t578; t581 = t579 nand t580; t582 = t466 and t417; t583 = t582 and t123; t584 = t567 and t417; t585 = t567 and t123; t586 = t584 or t585; t587 = t583 or t586; t588 = t238 and t417; t589 = t588 and t123; t590 = t587 or t589; t591 = t565 and t590; t592 = t209 and t591; t593 = t21 nand t592; t594 = t21 nand t593; t595 = t592 nand t593; t596 = t594 nand t595; t597 = t581 biimp t596; t598 = t237 and t576; t599 = t22 nand t598; t600 = t22 nand t599; t601 = t598 nand t599; t602 = t600 nand t601; t603 = t237 and t591; t604 = t22 nand t603; t605 = t22 nand t604; t606 = t603 nand t604; t607 = t605 nand t606; t608 = t602 biimp t607; t609 = t181 and t576; t610 = t27 nand t609; t611 = t27 nand t610; t612 = t609 nand t610; t613 = t611 nand t612; t614 = t181 and t591; t615 = t27 nand t614; t616 = t27 nand t615; t617 = t614 nand t615; t618 = t616 nand t617; t619 = t613 biimp t618; t620 = t122 and t576; t621 = t28 nand t620; t622 = t28 nand t621; t623 = t620 nand t621; t624 = t622 nand t623; t625 = t122 and t591; t626 = t28 nand t625; t627 = t28 nand t626; t628 = t625 nand t626; t629 = t627 nand t628; t630 = t624 biimp t629; t395 = t279 and t362; t396 = t145 nand t395; t397 = t145 nand t396; t398 = t395 nand t396; t399 = t397 nand t398; t400 = t279 and t377; t401 = t145 nand t400; t402 = t145 nand t401; t403 = t400 nand t401; t404 = t402 nand t403; t405 = t399 biimp t404; t631 = t347 and t359; t632 = t631 and t575; t633 = t209 and t632; t634 = t37 nand t633; t635 = t37 nand t634; t636 = t633 nand t634; t637 = t635 nand t636; t638 = t631 and t590; t639 = t209 and t638; t640 = t37 nand t639; t641 = t37 nand t640; t642 = t639 nand t640; t643 = t641 nand t642; t644 = t637 biimp t643; t645 = t237 and t632; t646 = t38 nand t645; t647 = t38 nand t646; t648 = t645 nand t646; t649 = t647 nand t648; t650 = t237 and t638; t651 = t38 nand t650; t652 = t38 nand t651; t653 = t650 nand t651; t654 = t652 nand t653; t655 = t649 biimp t654; t656 = t181 and t632; t657 = t43 nand t656; t658 = t43 nand t657; t659 = t656 nand t657; t660 = t658 nand t659; t661 = t181 and t638; t662 = t43 nand t661; t663 = t43 nand t662; t664 = t661 nand t662; t665 = t663 nand t664; t666 = t660 biimp t665; t667 = t122 and t632; t668 = t44 nand t667; t669 = t44 nand t668; t670 = t667 nand t668; t671 = t669 nand t670; t672 = t122 and t638; t673 = t44 nand t672; t674 = t44 nand t673; t675 = t672 nand t673; t676 = t674 nand t675; t677 = t671 biimp t676; t678 = t279 and t320; t679 = t348 and t678; t680 = t679 and t575; t681 = t209 and t680; t682 = t186 nand t681; t683 = t186 nand t682; t684 = t681 nand t682; t685 = t683 nand t684; t686 = t679 and t590; t687 = t209 and t686; t688 = t186 nand t687; t689 = t186 nand t688; t690 = t687 nand t688; t691 = t689 nand t690; t692 = t685 biimp t691; t693 = t237 and t680; t694 = t214 nand t693; t695 = t214 nand t694; t696 = t693 nand t694; t697 = t695 nand t696; t698 = t237 and t686; t699 = t214 nand t698; t700 = t214 nand t699; t701 = t698 nand t699; t702 = t700 nand t701; t703 = t697 biimp t702; t704 = t181 and t680; t705 = t128 nand t704; t706 = t128 nand t705; t707 = t704 nand t705; t708 = t706 nand t707; t709 = t181 and t686; t710 = t128 nand t709; t711 = t128 nand t710; t712 = t709 nand t710; t713 = t711 nand t712; t714 = t708 biimp t713; t715 = t122 and t680; t716 = t69 nand t715; t717 = t69 nand t716; t718 = t715 nand t716; t719 = t717 nand t718; t720 = t122 and t686; t721 = t69 nand t720; t722 = t69 nand t721; t723 = t720 nand t721; t724 = t722 nand t723; t725 = t719 biimp t724; t726 = t347 and t321; t727 = t726 and t575; t728 = t209 and t727; t729 = t187 nand t728; t730 = t187 nand t729; t731 = t728 nand t729; t732 = t730 nand t731; t733 = t726 and t590; t734 = t209 and t733; t735 = t187 nand t734; t736 = t187 nand t735; t737 = t734 nand t735; t738 = t736 nand t737; t739 = t732 biimp t738; t740 = t237 and t727; t741 = t215 nand t740; t742 = t215 nand t741; t743 = t740 nand t741; t744 = t742 nand t743; t745 = t237 and t733; t746 = t215 nand t745; t747 = t215 nand t746; t748 = t745 nand t746; t749 = t747 nand t748; t750 = t744 biimp t749; t406 = t347 and t362; t407 = t146 nand t406; t408 = t146 nand t407; t409 = t406 nand t407; t410 = t408 nand t409; t411 = t347 and t377; t412 = t146 nand t411; t413 = t146 nand t412; t414 = t411 nand t412; t415 = t413 nand t414; t416 = t410 biimp t415; t751 = t181 and t727; t752 = t129 nand t751; t753 = t129 nand t752; t754 = t751 nand t752; t755 = t753 nand t754; t756 = t181 and t733; t757 = t129 nand t756; t758 = t129 nand t757; t759 = t756 nand t757; t760 = t758 nand t759; t761 = t755 biimp t760; t762 = t122 and t727; t763 = t70 nand t762; t764 = t70 nand t763; t765 = t762 nand t763; t766 = t764 nand t765; t767 = t122 and t733; t768 = t70 nand t767; t769 = t70 nand t768; t770 = t767 nand t768; t771 = t769 nand t770; t772 = t766 biimp t771; t419 = t122 and t418; t420 = t419 and t361; t421 = t64 and t420; t422 = t3 nand t421; t423 = t3 nand t422; t424 = t421 nand t422; t425 = t423 nand t424; t426 = t419 and t376; t427 = t64 and t426; t428 = t3 nand t427; t429 = t3 nand t428; t430 = t427 nand t428; t431 = t429 nand t430; t432 = t425 biimp t431; t433 = t319 and t420; t434 = t81 nand t433; t435 = t81 nand t434; t436 = t433 nand t434; t437 = t435 nand t436; t438 = t319 and t426; t439 = t81 nand t438; t440 = t81 nand t439; t441 = t438 nand t439; t442 = t440 nand t441; t443 = t437 biimp t442; t444 = t279 and t420; t445 = t86 nand t444; t446 = t86 nand t445; t447 = t444 nand t445; t448 = t446 nand t447; t449 = t279 and t426; t450 = t86 nand t449; t451 = t86 nand t450; t452 = t449 nand t450; t453 = t451 nand t452; t454 = t448 biimp t453; t455 = t347 and t420; t456 = t87 nand t455; t457 = t87 nand t456; t458 = t455 nand t456; t459 = t457 nand t458; t460 = t347 and t426; t461 = t87 nand t460; t462 = t87 nand t461; t463 = t460 nand t461; t464 = t462 nand t463; t465 = t459 biimp t464; t471 = t64 and t470; t472 = t8 nand t471; t473 = t8 nand t472; t474 = t471 nand t472; t475 = t473 nand t474; t477 = t64 and t476; t478 = t8 nand t477; t479 = t8 nand t478; t480 = t477 nand t478; t481 = t479 nand t480; t482 = t475 biimp t481; t483 = t319 and t470; t484 = t155 nand t483; t485 = t155 nand t484; t486 = t483 nand t484; t487 = t485 nand t486; t488 = t319 and t476; t489 = t155 nand t488; t490 = t155 nand t489; t491 = t488 nand t489; t492 = t490 nand t491; t493 = t487 biimp t492; tautology t383; tautology t394; tautology t504; tautology t515; tautology t530; tautology t541; tautology t552; tautology t563; tautology t597; tautology t608; tautology t619; tautology t630; tautology t405; tautology t644; tautology t655; tautology t666; tautology t677; tautology t692; tautology t703; tautology t714; tautology t725; tautology t739; tautology t750; tautology t416; tautology t761; tautology t772; tautology t432; tautology t443; tautology t454; tautology t465; tautology t482; tautology t493; buddy-2.4/examples/bddcalc/examples/c1908.cal0000664000076500001440000002453710067023362014421 /* BDD Calculator data file */ initial 8000 10000; inputs _101 _104 _107 _110 _113 _116 _119 _122 _125 _128 _131 _134 _137 _140 _143 _146 _210 _214 _217 _221 _224 _227 _234 _237 _469 _472 _475 _478 _898 _900 _902 _952 _953 ; actions autoreorder 0 sift; t2 = _952; t3 = not t2; t4 = _953; t5 = not t4; t6 = _146; t7 = not t6; t8 = _143; t9 = not t8; t10 = not t9; t11 = t7 nand t10; t12 = not t7; t13 = t9 nand t12; t14 = t11 nand t13; t15 = _128; t16 = not t15; t17 = not t16; t18 = t14 nand t17; t19 = not t14; t20 = t16 nand t19; t21 = t18 nand t20; t22 = _125; t23 = not t22; t24 = not t23; t25 = t21 nand t24; t26 = not t21; t27 = t23 nand t26; t28 = t25 nand t27; t29 = _224; t30 = t29 and t5; t31 = not t30; t32 = t28 nand t31; t33 = not t28; t34 = t30 nand t33; t35 = t32 nand t34; t36 = not t35; t37 = _107; t38 = not t37; t39 = _104; t40 = not t39; t41 = not t40; t42 = t38 nand t41; t43 = not t38; t44 = t40 nand t43; t45 = t42 nand t44; t46 = _101; t47 = not t46; t48 = not t47; t49 = t45 nand t48; t50 = not t45; t51 = t47 nand t50; t52 = t49 nand t51; t53 = not t52; t54 = _119; t55 = not t54; t56 = _116; t57 = not t56; t58 = not t57; t59 = t55 nand t58; t60 = not t55; t61 = t57 nand t60; t62 = t59 nand t61; t63 = _113; t64 = not t63; t65 = not t64; t66 = t62 nand t65; t67 = not t62; t68 = t64 nand t67; t69 = t66 nand t68; t70 = not t69; t71 = t53 nand t70; t72 = not t53; t73 = t69 nand t72; t74 = t71 nand t73; t75 = _122; t76 = not t75; t77 = _110; t78 = not t77; t79 = not t78; t80 = t76 nand t79; t81 = not t76; t82 = t78 nand t81; t83 = t80 nand t82; t84 = not t83; t85 = not t84; t86 = t74 nand t85; t87 = not t74; t88 = t84 nand t87; t89 = t86 nand t88; t90 = not t89; t91 = t36 nand t90; t92 = not t36; t93 = t89 nand t92; t94 = t91 nand t93; t95 = not t94; t96 = _902; t97 = not t96; t98 = t95 nand t97; t99 = _210; t100 = _237; t101 = not t100; t102 = t101 nand t97; t103 = t99 nand t102; t104 = not t103; t105 = t98 nand t104; t106 = not t98; t107 = t103 nand t106; t108 = t105 nand t107; t109 = not t108; t110 = _140; t111 = not t110; t112 = not t111; t113 = t78 nand t112; t114 = t111 nand t79; t115 = t113 nand t114; t116 = _227; t117 = t116 and t5; t118 = not t117; t119 = t115 nand t118; t120 = not t115; t121 = t117 nand t120; t122 = t119 nand t121; t123 = not t26; t124 = t52 nand t123; t125 = t26 nand t53; t126 = t124 nand t125; t127 = _137; t128 = not t127; t129 = _134; t130 = not t129; t131 = not t130; t132 = t128 nand t131; t133 = not t128; t134 = t130 nand t133; t135 = t132 nand t134; t136 = _131; t137 = not t136; t138 = not t137; t139 = t135 nand t138; t140 = not t135; t141 = t137 nand t140; t142 = t139 nand t141; t143 = not t142; t144 = not t143; t145 = t126 nand t144; t146 = not t126; t147 = t143 nand t146; t148 = t145 nand t147; t149 = not t148; t150 = not t149; t151 = t122 nand t150; t152 = not t122; t153 = t149 nand t152; t154 = t151 nand t153; t155 = t154 nand t97; t156 = _469; t157 = not t156; t158 = not t157; t159 = t155 nand t158; t160 = not t155; t161 = t157 nand t160; t162 = t159 nand t161; t163 = not t162; t164 = _214; t165 = t164 nand t102; t166 = t99 and t101; t167 = t166 and t5; t168 = not t167; t169 = t47 nand t168; t170 = t167 nand t48; t171 = t169 nand t170; t172 = not t171; t173 = t143 nand t26; t174 = t21 nand t144; t175 = t173 nand t174; t176 = not t70; t177 = t175 nand t176; t178 = not t175; t179 = t70 nand t178; t180 = t177 nand t179; t181 = not t180; t182 = not t181; t183 = t172 nand t182; t184 = not t172; t185 = t181 nand t184; t186 = t183 nand t185; t187 = t186 nand t97; t188 = _472; t189 = not t188; t190 = not t189; t191 = t187 nand t190; t192 = not t187; t193 = t189 nand t192; t194 = t191 nand t193; t195 = not t194; t196 = t23 nand t112; t197 = t111 nand t24; t198 = t196 nand t197; t199 = t198 nand t12; t200 = not t198; t201 = t7 nand t200; t202 = t199 nand t201; t203 = t164 and t101; t204 = t203 and t5; t205 = not t204; t206 = t9 nand t205; t207 = t204 nand t10; t208 = t206 nand t207; t209 = t208 nand t138; t210 = not t208; t211 = t137 nand t210; t212 = t209 nand t211; t213 = not t212; t214 = t202 nand t213; t215 = not t202; t216 = t212 nand t215; t217 = t214 nand t216; t218 = t76 nand t65; t219 = t64 nand t81; t220 = t218 nand t219; t221 = t220 nand t41; t222 = not t220; t223 = t40 nand t222; t224 = t221 nand t223; t225 = not t224; t226 = t217 nand t225; t227 = not t217; t228 = t224 nand t227; t229 = t226 nand t228; t230 = t229 nand t97; t231 = _475; t232 = not t231; t233 = not t232; t234 = t230 nand t233; t235 = not t230; t236 = t232 nand t235; t237 = t234 nand t236; t238 = not t237; t239 = t16 nand t60; t240 = t55 nand t17; t241 = t239 nand t240; t242 = t241 nand t79; t243 = not t241; t244 = t78 nand t243; t245 = t242 nand t244; t246 = not t245; t247 = not t246; t248 = t215 nand t247; t249 = not t215; t250 = t246 nand t249; t251 = t248 nand t250; t252 = _221; t253 = _234; t254 = t252 and t253; t255 = t254 and t5; t256 = t255 nand t133; t257 = not t255; t258 = t128 nand t257; t259 = t256 nand t258; t260 = not t259; t261 = not t260; t262 = t251 nand t261; t263 = not t251; t264 = t260 nand t263; t265 = t262 nand t264; t266 = t265 nand t97; t267 = _217; t268 = t253 nand t97; t269 = t267 nand t268; t270 = not t269; t271 = t266 nand t270; t272 = not t266; t273 = t269 nand t272; t274 = t271 nand t273; t275 = not t274; t276 = t76 nand t58; t277 = t57 nand t81; t278 = t276 nand t277; t279 = t278 nand t43; t280 = not t278; t281 = t38 nand t280; t282 = t279 nand t281; t283 = t9 nand t17; t284 = t16 nand t10; t285 = t283 nand t284; t286 = t285 nand t131; t287 = not t285; t288 = t130 nand t287; t289 = t286 nand t288; t290 = not t289; t291 = t282 nand t290; t292 = not t282; t293 = t289 nand t292; t294 = t291 nand t293; t295 = t267 and t253; t296 = t295 and t5; t297 = not t296; t298 = t294 nand t297; t299 = not t294; t300 = t296 nand t299; t301 = t298 nand t300; t302 = t301 nand t97; t303 = _478; t304 = not t303; t305 = not t304; t306 = t302 nand t305; t307 = not t302; t308 = t304 nand t307; t309 = t306 nand t308; t310 = not t309; t311 = t275 and t310; t312 = t238 and t311; t313 = t195 and t312; t314 = t165 and t313; t315 = t163 and t314; t316 = t109 and t315; t317 = t252 nand t268; t318 = t316 nand t317; t319 = t5 and t318; t320 = t3 and t319; t321 = t320 and t3; t322 = t2 and t319; t323 = t310 and t238; t324 = t274 and t194; t325 = t165 and t108; t326 = t317 and t163; t327 = t325 and t326; t328 = t324 and t327; t329 = t323 and t328; t330 = _898; t331 = not t330; t332 = t331 and t96; t333 = t4 and t332; t334 = t253 nand t100; t335 = t333 nand t334; t336 = t2 and t5; t337 = t336 nand t334; t338 = t335 nand t337; t339 = t329 nand t338; t340 = t309 and t238; t341 = t275 and t194; t342 = t341 and t327; t343 = t340 and t342; t344 = t343 nand t338; t345 = t310 and t237; t346 = t345 and t342; t347 = t346 nand t338; t348 = t274 and t195; t349 = t317 and t162; t350 = t325 and t349; t351 = t348 and t350; t352 = t323 and t351; t353 = t352 nand t338; t354 = t275 and t195; t355 = t354 and t350; t356 = t340 and t355; t357 = t356 nand t338; t358 = t341 and t350; t359 = t323 and t358; t360 = t359 nand t338; t361 = t345 and t355; t362 = t361 nand t338; t363 = t360 and t362; t364 = t357 and t363; t365 = t353 and t364; t366 = t347 and t365; t367 = t344 and t366; t368 = t339 and t367; t369 = t309 and t237; t370 = t354 and t327; t371 = t369 and t370; t372 = t371 nand t338; t373 = t368 and t372; t374 = t369 and t358; t375 = _900; t376 = not t375; t377 = t376 and t96; t378 = t4 and t377; t379 = t378 nand t334; t380 = t379 nand t337; t381 = t374 nand t380; t382 = t165 and t109; t383 = t382 and t349; t384 = t348 and t383; t385 = t345 and t384; t386 = t385 nand t380; t387 = t324 and t383; t388 = t323 and t387; t389 = t388 nand t380; t390 = t341 and t383; t391 = t340 and t390; t392 = t391 nand t380; t393 = t345 and t390; t394 = t393 nand t380; t395 = t348 and t327; t396 = t345 and t395; t397 = t396 nand t380; t398 = t324 and t350; t399 = t340 and t398; t400 = t399 nand t380; t401 = t397 and t400; t402 = t394 and t401; t403 = t392 and t402; t404 = t389 and t403; t405 = t386 and t404; t406 = t381 and t405; t407 = t345 and t398; t408 = t407 nand t380; t409 = t406 and t408; t410 = t373 and t409; t411 = not t317; t412 = t411 and t163; t413 = t382 and t412; t414 = t354 and t413; t415 = t323 and t414; t416 = t336 and t334; t417 = t415 nand t416; t418 = t382 and t326; t419 = t348 and t418; t420 = t323 and t419; t421 = t420 nand t416; t422 = t354 and t418; t423 = t340 and t422; t424 = t423 nand t416; t425 = t345 and t422; t426 = t425 nand t416; t427 = t341 and t418; t428 = t323 and t427; t429 = t428 nand t416; t430 = t323 and t370; t431 = t430 nand t416; t432 = t354 and t383; t433 = t323 and t432; t434 = t433 nand t416; t435 = t431 and t434; t436 = t429 and t435; t437 = t426 and t436; t438 = t424 and t437; t439 = t421 and t438; t440 = t417 and t439; t441 = not t165; t442 = t441 and t109; t443 = t442 and t326; t444 = t354 and t443; t445 = t323 and t444; t446 = t445 nand t416; t447 = t440 and t446; t448 = t410 and t447; t449 = t322 and t448; t450 = t321 nor t449; t451 = t319 and t3; t452 = t382 and t163; t453 = t354 and t452; t454 = t323 and t453; t455 = t454 nand t334; t456 = t420 nand t334; t457 = t423 nand t334; t458 = t425 nand t334; t459 = t428 nand t334; t460 = t430 nand t334; t461 = t433 nand t334; t462 = t460 and t461; t463 = t459 and t462; t464 = t458 and t463; t465 = t457 and t464; t466 = t456 and t465; t467 = t455 and t466; t468 = t109 and t326; t469 = t354 and t468; t470 = t323 and t469; t471 = t470 nand t334; t472 = t467 and t471; t473 = t410 and t472; t474 = t319 and t473; t475 = t451 nor t474; t476 = t450 biimp t475; t477 = t35 nand t90; t478 = t89 nand t36; t479 = t477 nand t478; t480 = t99 and t102; t481 = t480 and t96; t482 = t373 nand t409; t483 = t481 and t482; t484 = not t483; t485 = t479 nand t484; t486 = not t479; t487 = t483 nand t486; t488 = t485 nand t487; t489 = t3 nand t4; t490 = t488 and t489; t491 = t99 and t96; t492 = t491 and t482; t493 = not t492; t494 = t479 nand t493; t495 = t492 nand t486; t496 = t494 nand t495; t497 = t496 and t489; t498 = t490 biimp t497; t499 = t267 and t268; t500 = t499 and t96; t501 = t500 and t482; t502 = not t501; t503 = t265 nand t502; t504 = not t265; t505 = t501 nand t504; t506 = t503 nand t505; t507 = t489 and t506; t508 = t267 and t96; t509 = t508 and t482; t510 = not t509; t511 = t265 nand t510; t512 = t509 nand t504; t513 = t511 nand t512; t514 = t489 and t513; t515 = t507 biimp t514; tautology t476; tautology t498; tautology t515; buddy-2.4/examples/bddcalc/examples/c2670.cal0000664000076500001440000006061610067023362014414 /* BDD Calculator data file */ initial 41000 10000; inputs _1 _2 _3 _4 _5 _6 _7 _8 _11 _14 _15 _16 _19 _20 _21 _22 _23 _24 _25 _26 _27 _28 _29 _32 _33 _34 _35 _36 _37 _40 _43 _44 _47 _48 _49 _50 _51 _52 _53 _54 _55 _56 _57 _60 _61 _62 _63 _64 _65 _66 _67 _68 _69 _72 _73 _74 _75 _76 _77 _78 _79 _80 _81 _82 _85 _86 _87 _88 _89 _90 _91 _92 _93 _94 _95 _96 _99 _100 _101 _102 _103 _104 _105 _106 _107 _108 _111 _112 _113 _114 _115 _116 _117 _118 _119 _120 _123 _124 _125 _126 _127 _128 _129 _130 _131 _132 _135 _136 _137 _138 _139 _140 _141 _142 _452 _483 _543 _559 _567 _651 _661 _860 _868 _1083 _1341 _1348 _1384 _1956 _1961 _1966 _1971 _1976 _1981 _1986 _1991 _1996 _2066 _2067 _2072 _2078 _2084 _2090 _2096 _2100 _2104 _2105 _2106 _2427 _2430 _2435 _2438 _2443 _2446 _2451 _2454 _2474 _2678 ; actions autoreorder 0 sift; t2 = _860; t3 = not t2; t4 = _56; t5 = _543; t6 = not t5; t7 = t4 and t6; t8 = _651; t9 = t7 and t8; t10 = _81; t11 = t10 and t6; t12 = not t8; t13 = t11 and t12; t14 = _43; t15 = t14 and t5; t16 = t15 and t12; t17 = t13 or t16; t18 = t9 or t17; t19 = _68; t20 = t19 and t5; t21 = t20 and t8; t22 = t18 or t21; t23 = t22 and t2; t24 = t3 or t23; t25 = t3 or t22; t26 = t24 biimp t25; t27 = t6 and t8; t28 = _87; t29 = t28 and t6; t30 = t29 and t12; t31 = _49; t32 = t31 and t5; t33 = t32 and t12; t34 = t30 or t33; t35 = t27 or t34; t36 = _74; t37 = t36 and t5; t38 = t37 and t8; t39 = t35 or t38; t40 = t29 or t33; t41 = t27 or t40; t42 = t36 and t8; t43 = t41 or t42; t44 = t39 biimp t43; t45 = _559; t46 = not t45; t47 = _66; t48 = t47 and t6; t49 = t48 and t8; t50 = _92; t51 = t50 and t6; t52 = t51 and t12; t53 = _54; t54 = t53 and t5; t55 = t54 and t12; t56 = t52 or t55; t57 = t49 or t56; t58 = _79; t59 = t58 and t5; t60 = t59 and t8; t61 = t57 or t60; t62 = not t61; t63 = t46 nand t62; t64 = t63 and t3; t65 = t61 and t2; t66 = t64 or t65; t67 = t64 or t61; t68 = t66 biimp t67; t69 = _2100; t70 = not t69; t71 = _2104; t72 = not t71; t73 = _2105; t74 = t72 and t73; t75 = not t73; t76 = t72 and t75; t77 = t71 and t75; t78 = t76 or t77; t79 = t74 or t78; t80 = t71 and t73; t81 = t79 or t80; t82 = t70 nand t81; t83 = t70 and t82; t84 = t82 and t81; t85 = t83 or t84; t86 = not t85; t87 = t85 and t86; t88 = t87 or t86; t89 = _2096; t90 = not t89; t91 = _123; t92 = t91 and t72; t93 = t92 and t73; t94 = _135; t95 = t94 and t72; t96 = t95 and t75; t97 = _99; t98 = t97 and t71; t99 = t98 and t75; t100 = t96 or t99; t101 = t93 or t100; t102 = _111; t103 = t102 and t71; t104 = t103 and t73; t105 = t101 or t104; t106 = t90 nand t105; t107 = t90 and t106; t108 = t106 and t105; t109 = t107 or t108; t110 = not t109; t111 = t109 and t110; t112 = t111 or t110; t113 = t88 nand t112; t114 = not t70; t115 = not t114; t116 = t115 nand t110; t117 = t113 biimp t116; t118 = _23; t119 = _16; t120 = not t119; t121 = t118 and t120; t122 = t39 and t119; t123 = t121 or t122; t124 = _1976; t125 = not t124; t126 = not t125; t127 = t123 nand t126; t128 = not t123; t129 = t125 nand t128; t130 = t127 nand t129; t131 = not t130; t132 = _6; t133 = t132 and t120; t134 = _61; t135 = t134 and t6; t136 = t135 and t8; t137 = _86; t138 = t137 and t6; t139 = t138 and t12; t140 = _48; t141 = t140 and t5; t142 = t141 and t12; t143 = t139 or t142; t144 = t136 or t143; t145 = _73; t146 = t145 and t5; t147 = t146 and t8; t148 = t144 or t147; t149 = t148 and t119; t150 = t133 or t149; t151 = _1981; t152 = not t151; t153 = not t152; t154 = t150 nand t153; t155 = not t150; t156 = t152 nand t155; t157 = t154 nand t156; t158 = not t157; t159 = _25; t160 = _29; t161 = not t160; t162 = t159 and t161; t163 = _119; t164 = t163 and t72; t165 = t164 and t73; t166 = _131; t167 = t166 and t72; t168 = t167 and t75; t169 = _95; t170 = t169 and t71; t171 = t170 and t75; t172 = t168 or t171; t173 = t165 or t172; t174 = _107; t175 = t174 and t71; t176 = t175 and t73; t177 = t173 or t176; t178 = t177 and t160; t179 = t162 or t178; t180 = _1991; t181 = not t180; t182 = not t181; t183 = t179 nand t182; t184 = not t179; t185 = t181 nand t184; t186 = t183 nand t185; t187 = not t186; t188 = _24; t189 = t188 and t120; t190 = _60; t191 = t190 and t6; t192 = t191 and t8; t193 = _85; t194 = t193 and t6; t195 = t194 and t12; t196 = _47; t197 = t196 and t5; t198 = t197 and t12; t199 = t195 or t198; t200 = t192 or t199; t201 = _72; t202 = t201 and t5; t203 = t202 and t8; t204 = t200 or t203; t205 = t204 and t119; t206 = t189 or t205; t207 = _1986; t208 = not t207; t209 = not t208; t210 = t206 nand t209; t211 = not t206; t212 = t208 nand t211; t213 = t210 nand t212; t214 = not t213; t215 = t187 and t214; t216 = t158 and t215; t217 = t131 and t216; t218 = _22; t219 = t218 and t120; t220 = _62; t221 = t220 and t6; t222 = t221 and t8; t223 = _88; t224 = t223 and t6; t225 = t224 and t12; t226 = _50; t227 = t226 and t5; t228 = t227 and t12; t229 = t225 or t228; t230 = t222 or t229; t231 = _75; t232 = t231 and t5; t233 = t232 and t8; t234 = t230 or t233; t235 = t234 and t119; t236 = t219 or t235; t237 = _1971; t238 = not t237; t239 = not t238; t240 = t236 nand t239; t241 = not t236; t242 = t238 nand t241; t243 = t240 nand t242; t244 = not t243; t245 = t217 and t244; t246 = _4; t247 = t246 and t120; t248 = t61 and t119; t249 = t247 or t248; t250 = _1348; t251 = not t250; t252 = not t251; t253 = t249 nand t252; t254 = not t249; t255 = t251 nand t254; t256 = t253 nand t255; t257 = not t256; t258 = _20; t259 = t258 and t120; t260 = _65; t261 = t260 and t6; t262 = t261 and t8; t263 = _91; t264 = t263 and t6; t265 = t264 and t12; t266 = _53; t267 = t266 and t5; t268 = t267 and t12; t269 = t265 or t268; t270 = t262 or t269; t271 = _78; t272 = t271 and t5; t273 = t272 and t8; t274 = t270 or t273; t275 = t274 and t119; t276 = t259 or t275; t277 = _1956; t278 = not t277; t279 = not t278; t280 = t276 nand t279; t281 = not t276; t282 = t278 nand t281; t283 = t280 nand t282; t284 = not t283; t285 = _21; t286 = t285 and t120; t287 = _63; t288 = t287 and t6; t289 = t288 and t8; t290 = _89; t291 = t290 and t6; t292 = t291 and t12; t293 = _51; t294 = t293 and t5; t295 = t294 and t12; t296 = t292 or t295; t297 = t289 or t296; t298 = _76; t299 = t298 and t5; t300 = t299 and t8; t301 = t297 or t300; t302 = t301 and t119; t303 = t286 or t302; t304 = _1966; t305 = not t304; t306 = not t305; t307 = t303 nand t306; t308 = not t303; t309 = t305 nand t308; t310 = t307 nand t309; t311 = not t310; t312 = _5; t313 = t312 and t120; t314 = _64; t315 = t314 and t6; t316 = t315 and t8; t317 = _90; t318 = t317 and t6; t319 = t318 and t12; t320 = _52; t321 = t320 and t5; t322 = t321 and t12; t323 = t319 or t322; t324 = t316 or t323; t325 = _77; t326 = t325 and t5; t327 = t326 and t8; t328 = t324 or t327; t329 = t328 and t119; t330 = t313 or t329; t331 = _1961; t332 = not t331; t333 = not t332; t334 = t330 nand t333; t335 = not t330; t336 = t332 nand t335; t337 = t334 nand t336; t338 = not t337; t339 = t311 and t338; t340 = t284 and t339; t341 = t257 and t340; t342 = _19; t343 = t342 and t120; t344 = t22 and t119; t345 = t343 or t344; t346 = _1341; t347 = not t346; t348 = not t347; t349 = t345 nand t348; t350 = not t345; t351 = t347 nand t350; t352 = t349 nand t351; t353 = not t352; t354 = t341 and t353; t355 = t245 and t354; t356 = _28; t357 = t356 and t161; t358 = t105 and t160; t359 = t357 or t358; t360 = _35; t361 = t360 and t161; t362 = _124; t363 = t362 and t72; t364 = t363 and t73; t365 = _136; t366 = t365 and t72; t367 = t366 and t75; t368 = _100; t369 = t368 and t71; t370 = t369 and t75; t371 = t367 or t370; t372 = t364 or t371; t373 = _112; t374 = t373 and t71; t375 = t374 and t73; t376 = t372 or t375; t377 = t376 and t160; t378 = t361 or t377; t379 = _2090; t380 = not t379; t381 = not t380; t382 = t378 nand t381; t383 = not t378; t384 = t380 nand t383; t385 = t382 nand t384; t386 = not t385; t387 = t359 and t386; t388 = _26; t389 = t388 and t161; t390 = _128; t391 = t390 and t72; t392 = t391 and t73; t393 = _140; t394 = t393 and t72; t395 = t394 and t75; t396 = _104; t397 = t396 and t71; t398 = t397 and t75; t399 = t395 or t398; t400 = t392 or t399; t401 = _116; t402 = t401 and t71; t403 = t402 and t73; t404 = t400 or t403; t405 = t404 and t160; t406 = t389 or t405; t407 = _2067; t408 = not t407; t409 = not t408; t410 = t406 nand t409; t411 = not t406; t412 = t408 nand t411; t413 = t410 nand t412; t414 = not t413; t415 = _33; t416 = t415 and t161; t417 = _127; t418 = t417 and t72; t419 = t418 and t73; t420 = _139; t421 = t420 and t72; t422 = t421 and t75; t423 = _103; t424 = t423 and t71; t425 = t424 and t75; t426 = t422 or t425; t427 = t419 or t426; t428 = _115; t429 = t428 and t71; t430 = t429 and t73; t431 = t427 or t430; t432 = t431 and t160; t433 = t416 or t432; t434 = _2072; t435 = not t434; t436 = not t435; t437 = t433 nand t436; t438 = not t433; t439 = t435 nand t438; t440 = t437 nand t439; t441 = not t440; t442 = _34; t443 = t442 and t161; t444 = _125; t445 = t444 and t72; t446 = t445 and t73; t447 = _137; t448 = t447 and t72; t449 = t448 and t75; t450 = _101; t451 = t450 and t71; t452 = t451 and t75; t453 = t449 or t452; t454 = t446 or t453; t455 = _113; t456 = t455 and t71; t457 = t456 and t73; t458 = t454 or t457; t459 = t458 and t160; t460 = t443 or t459; t461 = _2084; t462 = not t461; t463 = not t462; t464 = t460 nand t463; t465 = not t460; t466 = t462 nand t465; t467 = t464 nand t466; t468 = not t467; t469 = _27; t470 = t469 and t161; t471 = _126; t472 = t471 and t72; t473 = t472 and t73; t474 = _138; t475 = t474 and t72; t476 = t475 and t75; t477 = _102; t478 = t477 and t71; t479 = t478 and t75; t480 = t476 or t479; t481 = t473 or t480; t482 = _114; t483 = t482 and t71; t484 = t483 and t73; t485 = t481 or t484; t486 = t485 and t160; t487 = t470 or t486; t488 = _2078; t489 = not t488; t490 = not t489; t491 = t487 nand t490; t492 = not t487; t493 = t489 nand t492; t494 = t491 nand t493; t495 = not t494; t496 = t468 and t495; t497 = t441 and t496; t498 = t414 and t497; t499 = _32; t500 = t499 and t161; t501 = _129; t502 = t501 and t72; t503 = t502 and t73; t504 = _141; t505 = t504 and t72; t506 = t505 and t75; t507 = _105; t508 = t507 and t71; t509 = t508 and t75; t510 = t506 or t509; t511 = t503 or t510; t512 = _117; t513 = t512 and t71; t514 = t513 and t73; t515 = t511 or t514; t516 = t515 and t160; t517 = t500 or t516; t518 = _1996; t519 = not t518; t520 = not t519; t521 = t517 nand t520; t522 = not t517; t523 = t519 nand t522; t524 = t521 nand t523; t525 = not t524; t526 = t498 and t525; t527 = t387 and t526; t528 = t355 and t527; t529 = _11; t530 = _868; t531 = not t530; t532 = t529 and t531; t533 = t529 and t530; t534 = t532 or t533; t535 = t528 and t534; t536 = t43 and t119; t537 = t121 or t536; t538 = t537 nand t126; t539 = not t537; t540 = t125 nand t539; t541 = t538 nand t540; t542 = not t541; t543 = t542 and t216; t544 = t543 and t244; t545 = t544 and t354; t546 = t545 and t527; t547 = t546 and t529; t548 = t535 biimp t547; t549 = not t535; t550 = not t547; t551 = t549 biimp t550; t552 = not t376; t553 = t458 nand t552; t554 = not t458; t555 = t376 nand t554; t556 = t553 nand t555; t557 = not t81; t558 = t105 nand t557; t559 = not t105; t560 = t81 nand t559; t561 = t558 nand t560; t562 = not t561; t563 = t556 nand t562; t564 = not t556; t565 = t561 nand t564; t566 = t563 nand t565; t567 = _130; t568 = t567 and t72; t569 = t568 and t73; t570 = _142; t571 = t570 and t72; t572 = t571 and t75; t573 = _106; t574 = t573 and t71; t575 = t574 and t75; t576 = t572 or t575; t577 = t569 or t576; t578 = _118; t579 = t578 and t71; t580 = t579 and t73; t581 = t577 or t580; t582 = not t177; t583 = t581 nand t582; t584 = not t581; t585 = t177 nand t584; t586 = t583 nand t585; t587 = not t404; t588 = t515 nand t587; t589 = not t515; t590 = t404 nand t589; t591 = t588 nand t590; t592 = not t591; t593 = t586 and t592; t594 = not t485; t595 = t431 nand t594; t596 = not t431; t597 = t485 nand t596; t598 = t595 nand t597; t599 = not t598; t600 = t593 and t599; t601 = not t586; t602 = t592 and t601; t603 = t602 and t598; t604 = t600 nor t603; t605 = t601 and t591; t606 = t605 and t599; t607 = t591 and t586; t608 = t607 and t598; t609 = t606 nor t608; t610 = t604 nand t609; t611 = not t610; t612 = t566 nand t611; t613 = not t566; t614 = t610 nand t613; t615 = t612 nand t614; t616 = not t615; t617 = _37; t618 = not t617; t619 = t616 and t618; t620 = not t559; t621 = not t620; t622 = not t621; t623 = t556 nand t622; t624 = t621 nand t564; t625 = t623 nand t624; t626 = t625 nand t611; t627 = not t625; t628 = t610 nand t627; t629 = t626 nand t628; t630 = not t629; t631 = t630 and t618; t632 = t619 biimp t631; t633 = _67; t634 = t633 and t6; t635 = t634 and t8; t636 = _93; t637 = t636 and t6; t638 = t637 and t12; t639 = _55; t640 = t639 and t5; t641 = t640 and t12; t642 = t638 or t641; t643 = t635 or t642; t644 = _80; t645 = t644 and t5; t646 = t645 and t8; t647 = t643 or t646; t648 = t647 and t531; t649 = not t234; t650 = not t39; t651 = not t650; t652 = t649 nand t651; t653 = not t649; t654 = t650 nand t653; t655 = t652 nand t654; t656 = not t148; t657 = not t204; t658 = not t657; t659 = t656 nand t658; t660 = not t656; t661 = t657 nand t660; t662 = t659 nand t661; t663 = not t662; t664 = t655 nand t663; t665 = not t655; t666 = t662 nand t665; t667 = t664 nand t666; t668 = not t647; t669 = not t22; t670 = not t669; t671 = t668 nand t670; t672 = not t668; t673 = t669 nand t672; t674 = t671 nand t673; t675 = not t674; t676 = t63 and t675; t677 = not t274; t678 = not t677; t679 = t62 nand t678; t680 = not t62; t681 = t677 nand t680; t682 = t679 nand t681; t683 = not t682; t684 = t676 and t683; t685 = not t63; t686 = t675 and t685; t687 = t686 and t682; t688 = t684 nor t687; t689 = t685 and t674; t690 = t689 and t683; t691 = t674 and t63; t692 = t691 and t682; t693 = t690 nor t692; t694 = t688 nand t693; t695 = not t694; t696 = t667 nand t695; t697 = not t667; t698 = t694 nand t697; t699 = t696 nand t698; t700 = t699 and t530; t701 = t648 or t700; t702 = not t43; t703 = not t702; t704 = t649 nand t703; t705 = t702 nand t653; t706 = t704 nand t705; t707 = t706 nand t663; t708 = not t706; t709 = t662 nand t708; t710 = t707 nand t709; t711 = t710 nand t695; t712 = not t710; t713 = t694 nand t712; t714 = t711 nand t713; t715 = t714 and t530; t716 = t648 or t715; t717 = t701 biimp t716; t718 = t674 and t683; t719 = not t328; t720 = not t301; t721 = not t720; t722 = t719 nand t721; t723 = not t719; t724 = t720 nand t723; t725 = t722 nand t724; t726 = not t725; t727 = t718 and t726; t728 = t683 and t675; t729 = t728 and t725; t730 = t727 nor t729; t731 = t675 and t682; t732 = t731 and t726; t733 = t682 and t674; t734 = t733 and t725; t735 = t732 nor t734; t736 = t730 nand t735; t737 = not t736; t738 = t667 nand t737; t739 = t736 nand t697; t740 = t738 nand t739; t741 = not t740; t742 = t741 and t618; t743 = t710 nand t737; t744 = t736 nand t712; t745 = t743 nand t744; t746 = not t745; t747 = t746 and t618; t748 = t742 biimp t747; t749 = _1384; t750 = not t749; t751 = t485 and t750; t752 = t554 and t751; t753 = _40; t754 = t752 and t753; t755 = not t754; t756 = t515 and t755; t757 = t753 and t554; t758 = not t751; t759 = t757 and t758; t760 = t756 and t759; t761 = not t760; t762 = t519 and t755; t763 = t762 and t759; t764 = not t763; t765 = t761 nand t764; t766 = not t761; t767 = t763 nand t766; t768 = t765 nand t767; t769 = t404 and t755; t770 = t769 and t759; t771 = not t770; t772 = t408 and t755; t773 = t772 and t759; t774 = not t773; t775 = t771 nand t774; t776 = not t771; t777 = t773 nand t776; t778 = t775 nand t777; t779 = t768 and t778; t780 = t181 and t755; t781 = t780 and t759; t782 = t177 and t755; t783 = t782 and t759; t784 = not t783; t785 = t781 and t784; t786 = t779 and t785; t787 = t773 and t771; t788 = t763 and t761; t789 = t778 and t788; t790 = t787 or t789; t791 = t786 or t790; t792 = t204 and t755; t793 = t792 and t759; t794 = not t793; t795 = t208 and t755; t796 = t795 and t759; t797 = t794 and t796; t798 = not t781; t799 = t784 nand t798; t800 = not t784; t801 = t781 nand t800; t802 = t799 nand t801; t803 = t802 and t778; t804 = t797 and t803; t805 = t804 and t768; t806 = t791 or t805; t807 = not t755; t808 = t462 and t807; t809 = t305 and t755; t810 = t808 or t809; t811 = _8; t812 = t810 and t811; t813 = t301 and t755; t814 = t301 and t754; t815 = t813 or t814; t816 = t815 and t811; t817 = not t816; t818 = t812 and t817; t819 = t234 and t755; t820 = t234 and t754; t821 = t819 or t820; t822 = t821 and t811; t823 = not t822; t824 = t380 and t807; t825 = t238 and t755; t826 = t824 or t825; t827 = t826 and t811; t828 = not t827; t829 = t823 nand t828; t830 = not t823; t831 = t827 nand t830; t832 = t829 nand t831; t833 = t148 and t755; t834 = t833 and t811; t835 = not t834; t836 = t152 and t755; t837 = t836 and t811; t838 = not t837; t839 = t835 nand t838; t840 = not t835; t841 = t837 nand t840; t842 = t839 nand t841; t843 = t832 and t842; t844 = t818 and t843; t845 = t39 and t755; t846 = t845 and t811; t847 = not t846; t848 = t125 and t755; t849 = t848 and t811; t850 = not t849; t851 = t847 nand t850; t852 = not t847; t853 = t849 nand t852; t854 = t851 nand t853; t855 = t844 and t854; t856 = t854 and t842; t857 = t827 and t823; t858 = t856 and t857; t859 = t837 and t835; t860 = t849 and t847; t861 = t842 and t860; t862 = t859 or t861; t863 = t858 or t862; t864 = t855 or t863; t865 = t489 and t807; t866 = t332 and t755; t867 = t865 or t866; t868 = t867 and t719; t869 = not t812; t870 = t817 nand t869; t871 = not t817; t872 = t812 nand t871; t873 = t870 nand t872; t874 = t873 and t832; t875 = t842 and t874; t876 = t868 and t875; t877 = t876 and t854; t878 = t864 or t877; t879 = not t867; t880 = t719 nand t879; t881 = t867 nand t723; t882 = t880 nand t881; t883 = t854 and t882; t884 = t832 and t883; t885 = t842 and t884; t886 = t885 and t873; t887 = t435 and t807; t888 = t278 and t755; t889 = t887 or t888; t890 = t889 and t677; t891 = not t889; t892 = t677 nand t891; t893 = t889 nand t678; t894 = t892 nand t893; t895 = t408 and t807; t896 = t251 and t755; t897 = t895 or t896; t898 = t897 and t62; t899 = t894 and t898; t900 = t890 or t899; t901 = not t897; t902 = t62 nand t901; t903 = t897 nand t680; t904 = t902 nand t903; t905 = t904 and t894; t906 = t519 and t807; t907 = t347 and t755; t908 = t906 or t907; t909 = t908 and t669; t910 = t905 and t909; t911 = t900 or t910; t912 = t886 and t911; t913 = t878 or t912; t914 = not t913; t915 = t806 and t914; t916 = not t806; t917 = not t796; t918 = t794 nand t917; t919 = not t794; t920 = t796 nand t919; t921 = t918 nand t920; t922 = t768 and t921; t923 = t802 and t922; t924 = t923 and t778; t925 = not t924; t926 = t916 nand t925; t927 = t926 and t913; t928 = t915 or t927; t929 = t756 and t757; t930 = not t929; t931 = not t930; t932 = t762 and t757; t933 = not t932; t934 = t931 nand t933; t935 = t769 and t757; t936 = not t935; t937 = not t936; t938 = t772 and t757; t939 = not t938; t940 = t937 nand t939; t941 = t934 and t940; t942 = t780 and t757; t943 = t782 and t757; t944 = not t943; t945 = t942 and t944; t946 = t941 and t945; t947 = t938 and t936; t948 = t932 and t930; t949 = t940 and t948; t950 = t947 or t949; t951 = t946 or t950; t952 = t792 and t757; t953 = not t952; t954 = t795 and t757; t955 = t953 and t954; t956 = not t944; t957 = not t942; t958 = t956 nand t957; t959 = t958 and t940; t960 = t955 and t959; t961 = t960 and t934; t962 = t951 or t961; t963 = not t953; t964 = not t954; t965 = t963 nand t964; t966 = t934 and t965; t967 = t958 and t966; t968 = t967 and t940; t969 = not t968; t970 = not t969; t971 = t301 and t811; t972 = not t971; t973 = t812 and t972; t974 = t234 and t811; t975 = not t974; t976 = not t975; t977 = t976 nand t828; t978 = t840 nand t838; t979 = t977 and t978; t980 = t973 and t979; t981 = t43 and t755; t982 = t981 and t811; t983 = not t982; t984 = not t983; t985 = t984 nand t850; t986 = t980 and t985; t987 = t985 and t978; t988 = t827 and t975; t989 = t987 and t988; t990 = t849 and t983; t991 = t978 and t990; t992 = t859 or t991; t993 = t989 or t992; t994 = t986 or t993; t995 = not t972; t996 = t995 nand t869; t997 = t996 and t977; t998 = t978 and t997; t999 = t868 and t998; t1000 = t999 and t985; t1001 = t994 or t1000; t1002 = t723 nand t879; t1003 = t985 and t1002; t1004 = t977 and t1003; t1005 = t978 and t1004; t1006 = t1005 and t996; t1007 = t678 nand t891; t1008 = t1007 and t898; t1009 = t890 or t1008; t1010 = t680 nand t901; t1011 = t1010 and t1007; t1012 = t1011 and t909; t1013 = t1009 or t1012; t1014 = t1006 and t1013; t1015 = t1001 or t1014; t1016 = t970 and t1015; t1017 = t962 or t1016; t1018 = t928 biimp t1017; t1019 = not t619; t1020 = not t742; t1021 = t1019 and t1020; t1022 = t89 nand t70; t1023 = t69 nand t90; t1024 = t1022 nand t1023; t1025 = _2678; t1026 = t1025 nand t408; t1027 = not t1025; t1028 = t407 nand t1027; t1029 = t1026 nand t1028; t1030 = t434 nand t489; t1031 = t488 nand t435; t1032 = t1030 nand t1031; t1033 = not t1032; t1034 = t1029 and t1033; t1035 = t461 nand t380; t1036 = t379 nand t462; t1037 = t1035 nand t1036; t1038 = not t1037; t1039 = t1034 and t1038; t1040 = not t1029; t1041 = t1033 and t1040; t1042 = t1041 and t1037; t1043 = t1039 nor t1042; t1044 = t1040 and t1032; t1045 = t1044 and t1038; t1046 = t1032 and t1029; t1047 = t1046 and t1037; t1048 = t1045 nor t1047; t1049 = t1043 nand t1048; t1050 = not t1049; t1051 = t1024 nand t1050; t1052 = not t1024; t1053 = t1049 nand t1052; t1054 = t1051 nand t1053; t1055 = t1021 and t1054; t1056 = t151 nand t208; t1057 = t207 nand t152; t1058 = t1056 nand t1057; t1059 = t180 nand t519; t1060 = t518 nand t181; t1061 = t1059 nand t1060; t1062 = not t1061; t1063 = t1058 nand t1062; t1064 = not t1058; t1065 = t1061 nand t1064; t1066 = t1063 nand t1065; t1067 = _2474; t1068 = t1067 nand t278; t1069 = not t1067; t1070 = t277 nand t1069; t1071 = t1068 nand t1070; t1072 = t331 nand t305; t1073 = t304 nand t332; t1074 = t1072 nand t1073; t1075 = not t1074; t1076 = t1071 and t1075; t1077 = t237 nand t125; t1078 = t124 nand t238; t1079 = t1077 nand t1078; t1080 = not t1079; t1081 = t1076 and t1080; t1082 = not t1071; t1083 = t1075 and t1082; t1084 = t1083 and t1079; t1085 = t1081 nor t1084; t1086 = t1082 and t1074; t1087 = t1086 and t1080; t1088 = t1074 and t1071; t1089 = t1088 and t1079; t1090 = t1087 nor t1089; t1091 = t1085 nand t1090; t1092 = not t1091; t1093 = t1066 nand t1092; t1094 = not t1066; t1095 = t1091 nand t1094; t1096 = t1093 nand t1095; t1097 = _2454; t1098 = _2451; t1099 = not t1098; t1100 = t1097 nand t1099; t1101 = not t1097; t1102 = t1098 nand t1101; t1103 = t1100 nand t1102; t1104 = t346 nand t251; t1105 = t250 nand t347; t1106 = t1104 nand t1105; t1107 = not t1106; t1108 = t1103 nand t1107; t1109 = not t1103; t1110 = t1106 nand t1109; t1111 = t1108 nand t1110; t1112 = _2430; t1113 = _2427; t1114 = not t1113; t1115 = t1112 nand t1114; t1116 = not t1112; t1117 = t1113 nand t1116; t1118 = t1115 nand t1117; t1119 = _2438; t1120 = _2435; t1121 = not t1120; t1122 = t1119 nand t1121; t1123 = not t1119; t1124 = t1120 nand t1123; t1125 = t1122 nand t1124; t1126 = not t1125; t1127 = t1118 and t1126; t1128 = _2446; t1129 = _2443; t1130 = not t1129; t1131 = t1128 nand t1130; t1132 = not t1128; t1133 = t1129 nand t1132; t1134 = t1131 nand t1133; t1135 = not t1134; t1136 = t1127 and t1135; t1137 = not t1118; t1138 = t1126 and t1137; t1139 = t1138 and t1134; t1140 = t1136 nor t1139; t1141 = t1137 and t1125; t1142 = t1141 and t1135; t1143 = t1125 and t1118; t1144 = t1143 and t1134; t1145 = t1142 nor t1144; t1146 = t1140 nand t1145; t1147 = not t1146; t1148 = t1111 nand t1147; t1149 = not t1111; t1150 = t1146 nand t1149; t1151 = t1148 nand t1150; t1152 = not t1151; t1153 = _14; t1154 = t1152 and t1153; t1155 = not t1154; t1156 = t1096 and t1155; t1157 = not t928; t1158 = t928 and t1157; t1159 = t1157 and t928; t1160 = t1158 or t1159; t1161 = not t1160; t1162 = t1160 and t1161; t1163 = t1162 or t1161; t1164 = t1156 and t1163; t1165 = t1055 and t1164; t1166 = _2106; t1167 = _96; t1168 = _132; t1169 = _82; t1170 = t1168 and t1169; t1171 = t1167 and t1170; t1172 = _44; t1173 = t1171 and t1172; t1174 = not t1173; t1175 = t1166 and t1174; t1176 = not t1175; t1177 = _567; t1178 = _108; t1179 = _120; t1180 = _57; t1181 = t1179 and t1180; t1182 = t1178 and t1181; t1183 = _69; t1184 = t1182 and t1183; t1185 = not t1184; t1186 = t1177 and t1185; t1187 = not t1186; t1188 = t1176 and t1187; t1189 = t1165 and t1188; t1190 = not t631; t1191 = not t747; t1192 = t1190 and t1191; t1193 = t1192 and t1054; t1194 = t1193 and t1156; t1195 = t1194 and t1188; t1196 = t1189 biimp t1195; t1197 = not t1189; t1198 = not t1195; t1199 = t1197 biimp t1198; tautology t26; tautology t44; tautology t68; tautology t117; tautology t548; tautology t551; tautology t632; tautology t717; tautology t717; tautology t748; tautology t1018; tautology t1196; tautology t1199; buddy-2.4/examples/bddcalc/examples/c3540.cal0000664000076500001440000012527510067023375014420 /* BDD Calculator data file */ initial 13000 10000; inputs _1 _13 _20 _33 _41 _45 _50 _58 _68 _77 _87 _97 _107 _116 _124 _125 _128 _132 _137 _143 _150 _159 _169 _179 _190 _200 _213 _222 _223 _226 _232 _238 _244 _250 _257 _264 _270 _274 _283 _294 _303 _311 _317 _322 _326 _329 _330 _343 _1698 _2897 ; actions autoreorder 0 sift; t695 = _330; t9 = _1; t10 = _13; t11 = t9 and t10; t154 = _33; t180 = _41; t181 = t154 and t180; t182 = not t181; t183 = t11 and t182; t184 = not t183; t47 = _270; t322 = t184 and t47; t186 = not t9; t187 = _45; t188 = t186 and t187; t189 = not t180; t190 = t188 and t189; t191 = not t190; t323 = t322 and t191; t193 = _274; t194 = t184 and t193; t195 = t194 and t190; t324 = t323 or t195; t325 = _303; t155 = not t154; t198 = not t155; t326 = t325 and t198; t17 = _257; t200 = _1698; t201 = t200 or t154; t202 = not t201; t327 = t17 and t202; t328 = t326 or t327; t18 = _264; t205 = t155 and t201; t329 = t18 and t205; t330 = t328 or t329; t331 = t183 and t330; t332 = t324 or t331; t185 = t184 and t18; t192 = t185 and t191; t196 = t192 or t195; t197 = _294; t199 = t197 and t198; t16 = _250; t203 = t16 and t202; t204 = t199 or t203; t206 = t17 and t205; t207 = t204 or t206; t208 = t183 and t207; t209 = t196 or t208; t241 = t184 and t16; t242 = not t188; t243 = t241 and t242; t244 = t194 and t188; t245 = t243 or t244; t48 = _116; t246 = t48 and t198; t27 = _238; t247 = t27 and t202; t248 = t246 or t247; t35 = _244; t249 = t35 and t205; t250 = t248 or t249; t251 = t183 and t250; t252 = t245 or t251; t283 = t184 and t17; t284 = t283 and t191; t285 = t284 or t195; t286 = _283; t287 = t286 and t198; t288 = t35 and t202; t289 = t287 or t288; t290 = t16 and t205; t291 = t289 or t290; t292 = t183 and t291; t293 = t285 or t292; t744 = t252 and t293; t745 = t209 and t744; t746 = t332 and t745; t211 = _179; t747 = not t211; t748 = t746 and t747; t335 = not t332; t213 = not t209; t255 = not t252; t296 = not t293; t749 = t255 and t296; t750 = t213 and t749; t751 = t335 and t750; t752 = t751 and t211; t753 = t748 or t752; t696 = t186 and t10; t12 = _20; t151 = not t12; t697 = t696 and t151; t698 = _213; t699 = t697 and t698; t700 = _343; t716 = t699 nand t700; t754 = not t716; t755 = t753 and t754; t150 = _169; t39 = _107; t103 = not t39; t152 = not t151; t153 = t103 and t152; t156 = t155 or t12; t157 = not t156; t158 = t48 and t157; t159 = t153 or t158; t41 = _87; t160 = t151 and t156; t161 = t41 and t160; t162 = t159 or t161; t163 = t9 nand t10; t164 = t9 and t12; t165 = t164 nand t154; t166 = t163 and t165; t167 = not t166; t168 = t162 and t167; t169 = t10 and t12; t170 = not t169; t171 = t9 or t170; t172 = t39 nor t171; t173 = t168 or t172; t174 = t155 or t9; t175 = t39 and t174; t176 = t166 and t171; t177 = t175 and t176; t178 = t173 or t177; t179 = t150 and t178; t210 = t179 and t209; t212 = t211 and t178; t214 = t212 and t213; t215 = t210 nor t214; t216 = _190; t217 = t173 nor t177; t218 = t216 and t217; t219 = t218 and t213; t220 = _200; t221 = t220 and t217; t222 = t221 and t209; t223 = t219 or t222; t224 = not t217; t225 = t223 or t224; t226 = t215 and t225; t110 = not t41; t43 = _97; t109 = not t43; t227 = t110 and t109; t228 = t227 nand t103; t229 = t228 and t152; t230 = t43 and t157; t231 = t229 or t230; t5 = _68; t232 = t5 and t160; t233 = t231 or t232; t234 = t233 and t167; t235 = t41 nor t171; t236 = t234 or t235; t237 = t41 and t174; t238 = t237 and t176; t239 = t236 or t238; t240 = t150 and t239; t253 = t240 and t252; t254 = t211 and t239; t256 = t254 and t255; t257 = t253 nor t256; t258 = t236 nor t238; t259 = t216 and t258; t260 = t259 and t255; t261 = t220 and t258; t262 = t261 and t252; t263 = t260 or t262; t264 = not t258; t265 = t263 or t264; t266 = t257 and t265; t267 = t39 nand t109; t268 = t43 nand t103; t269 = t267 nand t268; t270 = not t269; t271 = t270 and t152; t272 = t39 and t157; t273 = t271 or t272; t36 = _77; t274 = t36 and t160; t275 = t273 or t274; t276 = t275 and t167; t277 = t43 nor t171; t278 = t276 or t277; t279 = t43 and t174; t280 = t279 and t176; t281 = t278 or t280; t282 = t150 and t281; t294 = t282 and t293; t295 = t211 and t281; t297 = t295 and t296; t298 = t294 nor t297; t299 = t278 nor t280; t300 = t216 and t299; t301 = t300 and t296; t302 = t220 and t299; t303 = t302 and t293; t304 = t301 or t303; t305 = not t299; t306 = t304 or t305; t307 = t298 and t306; t308 = t266 and t307; t309 = t226 and t308; t310 = t48 and t152; t311 = t286 and t157; t312 = t310 or t311; t313 = t43 and t160; t314 = t312 or t313; t315 = t314 and t167; t316 = t48 nor t171; t317 = t315 or t316; t318 = t48 and t174; t319 = t318 and t176; t320 = t317 or t319; t321 = t150 and t320; t333 = t321 and t332; t334 = t211 and t320; t336 = t334 and t335; t337 = t333 nor t336; t338 = t317 nor t319; t339 = t216 and t338; t340 = t339 and t335; t341 = t220 and t338; t342 = t341 and t332; t343 = t340 or t342; t344 = not t338; t345 = t343 or t344; t346 = t337 and t345; t347 = t309 and t346; t756 = t347 and t716; t757 = t755 or t756; t758 = t695 and t757; t701 = t699 and t700; t473 = t36 and t152; t474 = t41 and t157; t475 = t473 or t474; t3 = _58; t476 = t3 and t160; t477 = t475 or t476; t478 = t477 and t167; t479 = t36 nor t171; t480 = t478 or t479; t356 = t151 or t9; t481 = t36 and t356; t482 = t481 and t176; t483 = t480 or t482; t938 = t701 and t483; t484 = t150 and t483; t485 = t184 and t35; t362 = t180 or t187; t363 = t186 and t362; t364 = not t363; t486 = t485 and t364; t366 = t194 and t363; t487 = t486 or t366; t488 = t39 and t198; t31 = _232; t489 = t31 and t202; t490 = t488 or t489; t491 = t27 and t205; t492 = t490 or t491; t493 = t183 and t492; t494 = t487 or t493; t495 = t484 and t494; t496 = t211 and t483; t497 = not t494; t498 = t496 and t497; t499 = t495 nor t498; t500 = t480 nor t482; t501 = t216 and t500; t502 = t501 and t497; t503 = t220 and t500; t504 = t503 and t494; t505 = t502 or t504; t506 = not t500; t507 = t505 or t506; t508 = t499 and t507; t939 = not t508; t940 = t938 nand t939; t941 = not t938; t942 = t508 nand t941; t943 = t940 nand t942; t634 = t210 or t214; t635 = t308 nand t634; t636 = t253 or t256; t637 = not t636; t638 = t294 or t297; t639 = t266 nand t638; t640 = t637 and t639; t641 = t635 and t640; t642 = t333 or t336; t643 = t642 and t307; t644 = t226 and t643; t645 = t644 nand t266; t646 = t641 nand t645; t759 = t646 and t716; t760 = not t759; t944 = t943 nand t760; t945 = not t943; t946 = t759 nand t945; t947 = t944 nand t946; t948 = not t947; t949 = t758 nand t948; t950 = not t758; t951 = t947 nand t950; t952 = t949 nand t951; t798 = t10 and t151; t799 = t798 nand t187; t800 = t9 and t799; t801 = not t800; t953 = t952 and t801; t21 = not t10; t22 = t9 and t21; t740 = t12 and t22; t741 = t740 nand t189; t742 = not t741; t954 = t952 and t742; t955 = t953 or t954; t956 = _143; t805 = t151 or t216; t806 = not t220; t807 = t12 and t211; t808 = t806 and t807; t809 = t805 nand t808; t810 = not t809; t957 = t956 and t810; t394 = _150; t812 = t151 nor t216; t813 = t220 and t807; t814 = t812 nand t813; t815 = not t814; t958 = t394 and t815; t437 = _159; t817 = t812 nand t808; t818 = not t817; t959 = t437 and t818; t2 = _50; t820 = t12 and t220; t821 = not t807; t822 = t820 and t821; t823 = t805 nand t822; t824 = not t823; t960 = t2 and t824; t826 = t12 nand t220; t827 = t826 and t821; t828 = t805 nand t827; t829 = not t828; t961 = t3 and t829; t962 = _132; t831 = t812 nand t827; t832 = not t831; t963 = t962 and t832; t834 = t812 nand t822; t835 = not t834; t964 = t5 and t835; t965 = t963 or t964; t966 = t961 or t965; t967 = t960 or t966; t968 = t959 or t967; t969 = t958 or t968; t970 = t957 or t969; t971 = _137; t843 = t805 nand t813; t844 = not t843; t972 = t971 and t844; t973 = t970 nor t972; t974 = t973 and t155; t975 = t197 and t810; t976 = t286 and t815; t977 = t48 and t818; t978 = t39 and t824; t830 = t43 and t829; t852 = _311; t979 = t852 and t832; t980 = t41 and t835; t981 = t979 or t980; t982 = t830 or t981; t983 = t978 or t982; t984 = t977 or t983; t985 = t976 or t984; t986 = t975 or t985; t987 = t325 and t844; t988 = t986 nor t987; t989 = t988 and t154; t990 = t974 or t989; t870 = t151 or t150; t871 = t11 nand t870; t872 = not t871; t991 = t990 and t872; t992 = t21 nand t155; t993 = not t992; t994 = t945 and t993; t995 = t991 or t994; t121 = not t36; t996 = t871 and t992; t997 = t121 and t996; t998 = t995 nor t997; t900 = t800 and t741; t999 = t998 and t900; t1000 = t955 or t999; t1001 = t955 nor t999; t1002 = not t1001; t1003 = t1000 and t1002; t511 = t193 and t190; t548 = t323 or t511; t549 = t548 or t331; t512 = t192 or t511; t513 = t512 or t208; t523 = t193 and t188; t524 = t243 or t523; t525 = t524 or t251; t535 = t284 or t511; t536 = t535 or t292; t773 = t525 and t536; t774 = t513 and t773; t775 = t549 and t774; t776 = t775 and t747; t551 = not t549; t515 = not t513; t527 = not t525; t538 = not t536; t777 = t527 and t538; t778 = t515 and t777; t779 = t551 and t778; t780 = t779 and t211; t781 = t776 or t780; t782 = t781 and t754; t514 = t179 and t513; t516 = t212 and t515; t517 = t514 nor t516; t518 = t216 and t515; t519 = t220 and t513; t520 = t518 or t519; t521 = t520 or t224; t522 = t517 and t521; t526 = t240 and t525; t528 = t254 and t527; t529 = t526 nor t528; t530 = t216 and t527; t531 = t220 and t525; t532 = t530 or t531; t533 = t532 or t264; t534 = t529 and t533; t537 = t282 and t536; t539 = t295 and t538; t540 = t537 nor t539; t541 = t216 and t538; t542 = t220 and t536; t543 = t541 or t542; t544 = t543 or t305; t545 = t540 and t544; t546 = t534 and t545; t547 = t522 and t546; t550 = t321 and t549; t552 = t334 and t551; t553 = t550 nor t552; t554 = t216 and t551; t555 = t220 and t549; t556 = t554 or t555; t557 = t556 or t344; t558 = t553 and t557; t559 = t547 and t558; t783 = t559 and t716; t784 = t782 or t783; t785 = t695 and t784; t614 = t481 and t166; t615 = t480 or t614; t1004 = t701 and t615; t616 = t150 and t615; t563 = t193 and t363; t617 = t486 or t563; t618 = t617 or t493; t619 = t616 and t618; t620 = t211 and t615; t621 = not t618; t622 = t620 and t621; t623 = t619 nor t622; t624 = t216 and t621; t625 = t220 and t618; t626 = t624 or t625; t627 = t480 nor t614; t628 = not t627; t629 = t626 or t628; t630 = t623 and t629; t1005 = not t630; t1006 = t1004 nand t1005; t1007 = not t1004; t1008 = t630 nand t1007; t1009 = t1006 nand t1008; t664 = t514 or t516; t665 = t546 nand t664; t666 = t526 or t528; t667 = not t666; t668 = t537 or t539; t669 = t534 nand t668; t670 = t667 and t669; t671 = t665 and t670; t672 = t550 or t552; t673 = t672 and t545; t674 = t522 and t673; t675 = t674 nand t534; t676 = t671 nand t675; t786 = t676 and t716; t1010 = not t786; t1011 = t1009 nand t1010; t1012 = not t1009; t1013 = t786 nand t1012; t1014 = t1011 nand t1013; t1015 = not t1014; t1016 = t785 nand t1015; t1017 = not t785; t1018 = t1014 nand t1017; t1019 = t1016 nand t1018; t1020 = t1019 and t801; t1021 = t1019 and t742; t1022 = t1020 or t1021; t913 = t10 nand t870; t914 = not t913; t1023 = t990 and t914; t1024 = not t1005; t1025 = not t1024; t1026 = t1025 and t993; t1027 = t1023 or t1026; t1028 = t913 and t992; t1029 = t121 and t1028; t1030 = t1027 nor t1029; t1031 = t1030 and t900; t1032 = t1022 nor t1031; t1033 = not t1032; t1034 = t1003 biimp t1033; t4 = not t3; t430 = t5 nand t4; t6 = not t5; t431 = t3 nand t6; t432 = t430 nand t431; t1035 = t432 and t36; t127 = not t2; t1036 = not t127; t1037 = t1035 and t1036; t1038 = t5 and t127; t1039 = t1037 or t1038; t1040 = t9 nand t21; t1041 = not t1040; t1042 = t1039 and t1041; t1043 = t48 and t269; t13 = t11 nand t12; t14 = not t13; t1044 = t1043 and t14; t1045 = t1042 or t1044; t348 = t6 and t152; t349 = t36 and t157; t350 = t348 or t349; t351 = t2 and t160; t352 = t350 or t351; t353 = t352 and t167; t354 = t5 nor t171; t355 = t353 or t354; t357 = t5 and t356; t358 = t357 and t176; t359 = t355 or t358; t1046 = t701 and t359; t360 = t150 and t359; t361 = t184 and t27; t365 = t361 and t364; t367 = t365 or t366; t368 = t43 and t198; t29 = _226; t369 = t29 and t202; t370 = t368 or t369; t371 = t31 and t205; t372 = t370 or t371; t373 = t183 and t372; t374 = t367 or t373; t375 = t360 and t374; t376 = t211 and t359; t377 = not t374; t378 = t376 and t377; t379 = t375 nor t378; t380 = t355 nor t358; t381 = t216 and t380; t382 = t381 and t377; t383 = t220 and t380; t384 = t383 and t374; t385 = t382 or t384; t386 = not t380; t387 = t385 or t386; t388 = t379 and t387; t1047 = not t388; t1048 = t1046 nand t1047; t1049 = not t1046; t1050 = t388 nand t1049; t1051 = t1048 nand t1050; t433 = not t432; t434 = t433 and t152; t435 = t5 and t157; t436 = t434 or t435; t438 = t437 and t160; t439 = t436 or t438; t440 = t439 and t167; t441 = t3 nor t171; t442 = t440 or t441; t443 = t3 and t356; t444 = t443 and t176; t445 = t442 or t444; t1052 = t699 and t445; t446 = t150 and t445; t447 = t184 and t31; t448 = t447 and t364; t449 = t448 or t366; t450 = t41 and t198; t411 = _223; t451 = t411 and t202; t452 = t450 or t451; t453 = t29 and t205; t454 = t452 or t453; t455 = t183 and t454; t456 = t449 or t455; t457 = t446 and t456; t458 = t211 and t445; t459 = not t456; t460 = t458 and t459; t461 = t457 nor t460; t462 = t442 nor t444; t463 = t216 and t462; t464 = t463 and t459; t465 = t220 and t462; t466 = t465 and t456; t467 = t464 or t466; t468 = not t462; t469 = t467 or t468; t470 = t461 and t469; t1053 = not t470; t1054 = t1052 nand t1053; t1055 = not t1052; t1056 = t470 nand t1055; t1057 = t1054 nand t1056; t1058 = t757 and t1057; t1059 = t1051 and t1058; t1060 = t1059 and t943; t389 = t127 and t4; t390 = t389 nand t6; t391 = t390 and t152; t392 = t3 and t157; t393 = t391 or t392; t395 = t394 and t160; t396 = t393 or t395; t397 = t396 and t167; t398 = t2 nor t171; t399 = t397 or t398; t400 = t2 and t356; t401 = t400 and t176; t402 = t399 or t401; t403 = t150 and t402; t404 = t184 and t29; t405 = t404 and t364; t406 = t405 or t366; t407 = t36 and t198; t408 = _222; t409 = t408 and t202; t410 = t407 or t409; t412 = t411 and t205; t413 = t410 or t412; t414 = t183 and t413; t415 = t406 or t414; t416 = t403 and t415; t417 = t211 and t402; t418 = not t415; t419 = t417 and t418; t420 = t416 nor t419; t421 = t399 nor t401; t422 = t216 and t421; t423 = t422 and t418; t424 = t220 and t421; t425 = t424 and t415; t426 = t423 or t425; t427 = not t421; t428 = t426 or t427; t429 = t420 and t428; t471 = t429 and t470; t472 = t388 and t471; t509 = t472 and t508; t1061 = t757 and t509; t1062 = not t1061; t1063 = t1060 nand t1062; t1064 = not t1060; t1065 = t1061 nand t1064; t1066 = t1063 nand t1065; t1067 = t695 and t1066; t648 = t375 or t378; t649 = t471 nand t648; t650 = t416 or t419; t651 = not t650; t652 = t457 or t460; t653 = t429 nand t652; t654 = t651 and t653; t655 = t649 and t654; t656 = t495 or t498; t657 = t656 and t470; t658 = t388 and t657; t659 = t658 nand t429; t660 = t655 nand t659; t1068 = t759 and t509; t1069 = t660 or t1068; t1070 = t1057 and t1051; t1071 = t656 and t716; t1072 = t1070 nand t1071; t1073 = t697 nand t698; t1074 = t652 and t1073; t1075 = not t1074; t1076 = t648 and t716; t1077 = t1057 nand t1076; t1078 = t1075 and t1077; t1079 = t1072 and t1078; t1080 = t943 and t1070; t1081 = t1080 nand t759; t1082 = t1079 nand t1081; t1083 = not t1082; t1084 = t1069 nand t1083; t1085 = not t1069; t1086 = t1082 nand t1085; t1087 = t1084 nand t1086; t1088 = not t1087; t1089 = t1067 nand t1088; t1090 = not t1067; t1091 = t1087 nand t1090; t1092 = t1089 nand t1091; t1093 = t1040 and t13; t1094 = t1092 and t1093; t1095 = t1045 or t1094; t1096 = t1045 nor t1094; t1097 = not t1096; t1098 = t1095 and t1097; t560 = t357 and t166; t561 = t355 or t560; t1099 = t701 and t561; t562 = t150 and t561; t564 = t365 or t563; t565 = t564 or t373; t566 = t562 and t565; t567 = t211 and t561; t568 = not t565; t569 = t567 and t568; t570 = t566 nor t569; t571 = t216 and t568; t572 = t220 and t565; t573 = t571 or t572; t574 = t355 nor t560; t575 = not t574; t576 = t573 or t575; t577 = t570 and t576; t1100 = not t577; t1101 = t1099 nand t1100; t1102 = not t1099; t1103 = t577 nand t1102; t1104 = t1101 nand t1103; t595 = t443 and t166; t596 = t442 or t595; t1105 = t699 and t596; t597 = t150 and t596; t598 = t448 or t563; t599 = t598 or t455; t600 = t597 and t599; t601 = t211 and t596; t602 = not t599; t603 = t601 and t602; t604 = t600 nor t603; t605 = t216 and t602; t606 = t220 and t599; t607 = t605 or t606; t608 = t442 nor t595; t609 = not t608; t610 = t607 or t609; t611 = t604 and t610; t1106 = not t611; t1107 = t1105 nand t1106; t1108 = not t1105; t1109 = t611 nand t1108; t1110 = t1107 nand t1109; t1111 = t784 and t1110; t1112 = t1104 and t1111; t1113 = t1112 and t1009; t578 = t400 and t166; t579 = t399 or t578; t580 = t150 and t579; t581 = t405 or t563; t582 = t581 or t414; t583 = t580 and t582; t584 = t211 and t579; t585 = not t582; t586 = t584 and t585; t587 = t583 nor t586; t588 = t216 and t585; t589 = t220 and t582; t590 = t588 or t589; t591 = t399 nor t578; t592 = not t591; t593 = t590 or t592; t594 = t587 and t593; t612 = t594 and t611; t613 = t577 and t612; t631 = t613 and t630; t1114 = t784 and t631; t1115 = not t1114; t1116 = t1113 nand t1115; t1117 = not t1113; t1118 = t1114 nand t1117; t1119 = t1116 nand t1118; t1120 = t695 and t1119; t678 = t566 or t569; t679 = t612 nand t678; t680 = t583 or t586; t681 = not t680; t682 = t600 or t603; t683 = t594 nand t682; t684 = t681 and t683; t685 = t679 and t684; t686 = t619 or t622; t687 = t686 and t611; t688 = t577 and t687; t689 = t688 nand t594; t690 = t685 nand t689; t1121 = t786 and t631; t1122 = t690 or t1121; t1123 = t1110 and t1104; t1124 = t686 and t716; t1125 = t1123 nand t1124; t1126 = t682 and t1073; t1127 = not t1126; t1128 = t678 and t716; t1129 = t1110 nand t1128; t1130 = t1127 and t1129; t1131 = t1125 and t1130; t1132 = t1009 and t1123; t1133 = t1132 nand t786; t1134 = t1131 nand t1133; t1135 = not t1134; t1136 = t1122 nand t1135; t1137 = not t1122; t1138 = t1134 nand t1137; t1139 = t1136 nand t1138; t1140 = not t1139; t1141 = t1120 nand t1140; t1142 = not t1120; t1143 = t1139 nand t1142; t1144 = t1141 nand t1143; t1145 = t1144 and t1093; t1146 = t1045 nor t1145; t1147 = not t1146; t1148 = t1098 biimp t1147; t702 = t701 and t320; t703 = not t346; t704 = t702 nand t703; t705 = not t702; t706 = t346 nand t705; t707 = t704 nand t706; t708 = t701 and t178; t709 = not t226; t710 = t708 nand t709; t711 = not t708; t712 = t226 nand t711; t713 = t710 nand t712; t714 = t707 and t713; t1149 = t701 and t281; t1150 = not t307; t1151 = t1149 nand t1150; t1152 = not t1149; t1153 = t307 nand t1152; t1154 = t1151 nand t1153; t1155 = t714 and t1154; t1156 = t695 and t1155; t1157 = t701 and t239; t1158 = not t266; t1159 = t1157 nand t1158; t1160 = not t1157; t1161 = t266 nand t1160; t1162 = t1159 nand t1161; t1163 = t638 and t716; t1164 = not t1163; t717 = t634 and t716; t1165 = t1154 nand t717; t1166 = t1164 and t1165; t1167 = t1154 and t713; t718 = t642 and t716; t1168 = t1167 nand t718; t1169 = t1166 nand t1168; t1170 = not t1169; t1171 = t1162 nand t1170; t1172 = not t1162; t1173 = t1169 nand t1172; t1174 = t1171 nand t1173; t1175 = not t1174; t1176 = t1156 nand t1175; t1177 = not t1156; t1178 = t1174 nand t1177; t1179 = t1176 nand t1178; t1180 = t1179 and t801; t1181 = not t1179; t761 = t758 and t760; t1182 = t761 nor t759; t1183 = t1181 nor t1182; t1184 = t695 and t707; t1185 = not t718; t1186 = t713 nand t1185; t1187 = not t713; t1188 = t718 nand t1187; t1189 = t1186 nand t1188; t1190 = not t1189; t1191 = t1184 nand t1190; t1192 = not t1184; t1193 = t1189 nand t1192; t1194 = t1191 nand t1193; t715 = t695 and t714; t719 = t713 and t718; t720 = t717 or t719; t721 = not t720; t1195 = t1154 nand t721; t1196 = not t1154; t1197 = t720 nand t1196; t1198 = t1195 nand t1197; t1199 = not t1198; t1200 = t715 nand t1199; t1201 = not t715; t1202 = t1198 nand t1201; t1203 = t1200 nand t1202; t1204 = t1194 and t1203; t1205 = t1179 and t1204; t1206 = t1205 and t1182; t1207 = t1183 or t1206; t1208 = t1207 and t742; t1209 = t1180 or t1208; t1210 = t394 and t810; t1211 = t437 and t815; t1212 = t2 and t818; t1213 = t3 and t824; t1214 = t5 and t829; t1215 = t971 and t832; t1216 = t36 and t835; t1217 = t1215 or t1216; t1218 = t1214 or t1217; t1219 = t1213 or t1218; t1220 = t1212 or t1219; t1221 = t1211 or t1220; t1222 = t1210 or t1221; t1223 = t956 and t844; t1224 = t1222 nor t1223; t1225 = t1224 and t155; t1226 = t325 and t810; t1227 = t197 and t815; t1228 = t286 and t818; t1229 = t48 and t824; t1230 = t39 and t829; t850 = _317; t1231 = t850 and t832; t1232 = t43 and t835; t1233 = t1231 or t1232; t1234 = t1230 or t1233; t1235 = t1229 or t1234; t1236 = t1228 or t1235; t1237 = t1227 or t1236; t1238 = t1226 or t1237; t1239 = t852 and t844; t1240 = t1238 nor t1239; t1241 = t1240 and t154; t1242 = t1225 or t1241; t1243 = t1242 and t872; t874 = t21 and t151; t875 = t874 nand t155; t876 = not t875; t1244 = t1172 and t876; t1245 = t1243 or t1244; t60 = not t18; t61 = t47 nand t60; t62 = not t47; t63 = t18 nand t62; t64 = t61 nand t63; t65 = not t16; t66 = t17 nand t65; t67 = not t17; t68 = t16 nand t67; t69 = t66 nand t68; t70 = not t69; t71 = t64 nand t70; t72 = not t64; t73 = t69 nand t72; t74 = t71 nand t73; t884 = t22 and t12; t885 = t884 nand t154; t886 = not t885; t1246 = t74 and t886; t890 = t884 nand t155; t891 = not t890; t1247 = t1246 or t891; t894 = t885 and t890; t1248 = t110 and t894; t1249 = t1247 or t1248; t897 = t871 and t875; t1250 = t1249 and t897; t1251 = t1245 nor t1250; t1252 = t1251 and t900; t1253 = t1209 or t1252; t1254 = t1209 nor t1252; t1255 = not t1254; t1256 = t1253 and t1255; t724 = not t558; t725 = t702 nand t724; t726 = t558 nand t705; t727 = t725 nand t726; t728 = not t522; t729 = t708 nand t728; t730 = t522 nand t711; t731 = t729 nand t730; t732 = t727 and t731; t1257 = not t545; t1258 = t1149 nand t1257; t1259 = t545 nand t1152; t1260 = t1258 nand t1259; t1261 = t732 and t1260; t1262 = t695 and t1261; t1263 = not t534; t1264 = t1157 nand t1263; t1265 = t534 nand t1160; t1266 = t1264 nand t1265; t1267 = t668 and t716; t1268 = not t1267; t734 = t664 and t716; t1269 = t1260 nand t734; t1270 = t1268 and t1269; t1271 = t1260 and t731; t735 = t672 and t716; t1272 = t1271 nand t735; t1273 = t1270 nand t1272; t1274 = not t1273; t1275 = t1266 nand t1274; t1276 = not t1266; t1277 = t1273 nand t1276; t1278 = t1275 nand t1277; t1279 = not t1278; t1280 = t1262 nand t1279; t1281 = not t1262; t1282 = t1278 nand t1281; t1283 = t1280 nand t1282; t1284 = t1283 and t801; t1285 = not t1283; t1286 = t785 nor t786; t1287 = t1285 nor t1286; t1288 = t695 and t727; t1289 = not t735; t1290 = t731 nand t1289; t1291 = not t731; t1292 = t735 nand t1291; t1293 = t1290 nand t1292; t1294 = not t1293; t1295 = t1288 nand t1294; t1296 = not t1288; t1297 = t1293 nand t1296; t1298 = t1295 nand t1297; t733 = t695 and t732; t736 = t731 and t735; t737 = t734 or t736; t1299 = not t737; t1300 = t1260 nand t1299; t1301 = not t1260; t1302 = t737 nand t1301; t1303 = t1300 nand t1302; t1304 = not t1303; t1305 = t733 nand t1304; t1306 = not t733; t1307 = t1303 nand t1306; t1308 = t1305 nand t1307; t1309 = t1298 and t1308; t1310 = t1309 and t1283; t1311 = t1287 or t1310; t1312 = t1311 and t742; t1313 = t1284 or t1312; t1314 = t1242 and t914; t1315 = not t1263; t1316 = not t1315; t1317 = t1316 and t876; t1318 = t1314 or t1317; t920 = t21 and t12; t921 = t920 nand t154; t922 = not t921; t1319 = t74 and t922; t924 = t920 nand t155; t925 = not t924; t1320 = t1319 or t925; t1321 = t110 and t921; t1322 = t1320 or t1321; t931 = t913 and t875; t1323 = t1322 and t931; t1324 = t1318 nor t1323; t1325 = t1324 and t900; t1326 = t1313 nor t1325; t1327 = not t1326; t1328 = t1256 biimp t1327; t1329 = t1194 and t801; t1330 = not t1194; t1331 = not t1330; t1332 = t1182 nand t1331; t1333 = not t1182; t1334 = t1330 nand t1333; t1335 = t1332 nand t1334; t1336 = not t1335; t1337 = t1336 and t742; t1338 = t1329 or t1337; t1339 = t2 and t810; t1340 = t3 and t815; t1341 = t5 and t818; t1342 = t36 and t824; t1343 = t41 and t829; t1344 = t394 and t832; t1345 = t1344 or t1232; t1346 = t1343 or t1345; t1347 = t1342 or t1346; t1348 = t1341 or t1347; t1349 = t1340 or t1348; t1350 = t1339 or t1349; t1351 = t437 and t844; t1352 = t1350 nor t1351; t1353 = t1352 and t155; t1354 = t850 and t810; t1355 = t852 and t815; t1356 = t325 and t818; t1357 = t197 and t824; t1358 = t286 and t829; t865 = _326; t1359 = t865 and t832; t1360 = t48 and t835; t1361 = t1359 or t1360; t1362 = t1358 or t1361; t1363 = t1357 or t1362; t1364 = t1356 or t1363; t1365 = t1355 or t1364; t1366 = t1354 or t1365; t848 = _322; t1367 = t848 and t844; t1368 = t1366 nor t1367; t1369 = t1368 and t154; t1370 = t1353 or t1369; t1371 = t1370 and t872; t1372 = t1187 and t876; t1373 = t1371 or t1372; t75 = not t27; t76 = t35 nand t75; t77 = not t35; t78 = t27 nand t77; t79 = t76 nand t78; t80 = not t29; t81 = t31 nand t80; t82 = not t31; t83 = t29 nand t82; t84 = t81 nand t83; t85 = not t84; t86 = t79 nand t85; t87 = not t79; t88 = t84 nand t87; t89 = t86 nand t88; t90 = not t89; t879 = not t187; t880 = not t879; t1374 = t90 and t880; t102 = not t48; t765 = t227 and t103; t766 = t102 and t765; t1375 = t5 nand t36; t1376 = t766 and t1375; t1377 = t127 and t1376; t1378 = t1377 and t3; t1379 = t1378 and t879; t1380 = t1374 nor t1379; t1381 = t1380 and t886; t1382 = t102 nand t765; t1383 = t1382 and t891; t1384 = t1381 or t1383; t1385 = t103 and t894; t1386 = t1384 or t1385; t1387 = t1386 and t897; t1388 = t1373 nor t1387; t1389 = t1388 and t900; t1390 = t1338 or t1389; t1391 = t1338 nor t1389; t1392 = not t1391; t1393 = t1390 and t1392; t1394 = t1298 and t801; t1395 = not t1298; t1396 = not t1395; t1397 = t1286 nand t1396; t1398 = not t1286; t1399 = t1395 nand t1398; t1400 = t1397 nand t1399; t1401 = not t1400; t1402 = t1401 and t742; t1403 = t1394 or t1402; t1404 = t1370 and t914; t1405 = not t728; t1406 = not t1405; t1407 = t1406 and t876; t1408 = t1404 or t1407; t1409 = t1380 and t922; t1410 = t1382 and t925; t1411 = t1409 or t1410; t928 = t921 and t924; t1412 = t103 and t928; t1413 = t1411 or t1412; t1414 = t1413 and t931; t1415 = t1408 nor t1414; t1416 = t1415 and t900; t1417 = t1403 nor t1416; t1418 = not t1417; t1419 = t1393 biimp t1418; t1420 = t1203 and t801; t1421 = t1194 and t1182; t1422 = not t1203; t1423 = t1421 nand t1422; t1424 = not t1421; t1425 = t1203 nand t1424; t1426 = t1423 nand t1425; t1427 = t1426 and t742; t1428 = t1420 or t1427; t1429 = t437 and t810; t1430 = t2 and t815; t1431 = t3 and t818; t1432 = t5 and t824; t1433 = t36 and t829; t1434 = t956 and t832; t1435 = t1434 or t980; t1436 = t1433 or t1435; t1437 = t1432 or t1436; t1438 = t1431 or t1437; t1439 = t1430 or t1438; t1440 = t1429 or t1439; t1441 = t394 and t844; t1442 = t1440 nor t1441; t1443 = t1442 and t155; t1444 = t852 and t810; t1445 = t325 and t815; t1446 = t197 and t818; t1447 = t286 and t824; t1448 = t48 and t829; t1449 = t848 and t832; t836 = t39 and t835; t1450 = t1449 or t836; t1451 = t1448 or t1450; t1452 = t1447 or t1451; t1453 = t1446 or t1452; t1454 = t1445 or t1453; t1455 = t1444 or t1454; t1456 = t850 and t844; t1457 = t1455 nor t1456; t1458 = t1457 and t154; t1459 = t1443 or t1458; t1460 = t1459 and t872; t1461 = t1196 and t876; t1462 = t1460 or t1461; t104 = not t103; t105 = t102 nand t104; t106 = not t102; t107 = t103 nand t106; t108 = t105 nand t107; t111 = not t110; t112 = t109 nand t111; t113 = not t109; t114 = t110 nand t113; t115 = t112 nand t114; t116 = not t115; t117 = t108 nand t116; t118 = not t108; t119 = t115 nand t118; t120 = t117 nand t119; t1463 = t120 and t886; t1464 = t1463 or t891; t1465 = t109 and t894; t1466 = t1464 or t1465; t1467 = t1466 and t897; t1468 = t1462 nor t1467; t1469 = t1468 and t900; t1470 = t1428 or t1469; t1471 = t1428 nor t1469; t1472 = not t1471; t1473 = t1470 and t1472; t1474 = t1308 and t801; t1475 = t1298 and t1286; t1476 = not t1308; t1477 = t1475 nand t1476; t1478 = not t1475; t1479 = t1308 nand t1478; t1480 = t1477 nand t1479; t1481 = t1480 and t742; t1482 = t1474 or t1481; t1483 = t1459 and t914; t1484 = not t1257; t1485 = not t1484; t1486 = t1485 and t876; t1487 = t1483 or t1486; t1488 = t120 and t922; t1489 = t1488 or t925; t1490 = t109 and t921; t1491 = t1489 or t1490; t1492 = t1491 and t931; t1493 = t1487 nor t1492; t1494 = t1493 and t900; t1495 = t1482 nor t1494; t1496 = not t1495; t1497 = t1473 biimp t1496; t1498 = t757 and t943; t1499 = t1498 and t1051; t1500 = t695 and t1499; t1501 = not t1076; t1502 = t1051 nand t1071; t1503 = t1501 and t1502; t1504 = t1051 and t943; t1505 = t1504 nand t759; t1506 = t1503 nand t1505; t1507 = not t1506; t1508 = t1057 nand t1507; t1509 = not t1057; t1510 = t1506 nand t1509; t1511 = t1508 nand t1510; t1512 = not t1511; t1513 = t1500 nand t1512; t1514 = not t1500; t1515 = t1511 nand t1514; t1516 = t1513 nand t1515; t1517 = t1516 and t801; t1518 = t695 and t1498; t1519 = t759 and t943; t1520 = t1071 or t1519; t1521 = not t1520; t1522 = t1051 nand t1521; t1523 = not t1051; t1524 = t1520 nand t1523; t1525 = t1522 nand t1524; t1526 = not t1525; t1527 = t1518 nand t1526; t1528 = not t1518; t1529 = t1525 nand t1528; t1530 = t1527 nand t1529; t1531 = t695 and t1061; t1532 = t1531 and t1085; t1533 = t1532 nor t1069; t1534 = t1530 and t1533; t1535 = not t1516; t1536 = t1534 nand t1535; t1537 = not t1534; t1538 = t1516 nand t1537; t1539 = t1536 nand t1538; t1540 = t1539 and t742; t1541 = t1517 or t1540; t1542 = t962 and t810; t1543 = t971 and t815; t1544 = t956 and t818; t1545 = t394 and t824; t1546 = t437 and t829; t1547 = _125; t1548 = t1547 and t832; t1549 = t2 and t835; t1550 = t1548 or t1549; t1551 = t1546 or t1550; t1552 = t1545 or t1551; t1553 = t1544 or t1552; t1554 = t1543 or t1553; t1555 = t1542 or t1554; t1556 = _128; t1557 = t1556 and t844; t1558 = t1555 nor t1557; t1559 = t1558 and t155; t1560 = t48 and t810; t1561 = t39 and t815; t1562 = t43 and t818; t825 = t41 and t824; t1563 = t197 and t832; t1564 = t1563 or t964; t1565 = t1433 or t1564; t1566 = t825 or t1565; t1567 = t1562 or t1566; t1568 = t1561 or t1567; t1569 = t1560 or t1568; t1570 = t286 and t844; t1571 = t1569 nor t1570; t1572 = t1571 and t154; t1573 = t1559 or t1572; t1574 = t1573 and t872; t1575 = t1509 and t993; t1576 = t1574 or t1575; t1577 = t4 and t996; t1578 = t1576 nor t1577; t1579 = t1578 and t900; t1580 = t1541 or t1579; t1581 = t784 and t1009; t1582 = t1581 and t1104; t1583 = t695 and t1582; t1584 = not t1128; t1585 = t1104 nand t1124; t1586 = t1584 and t1585; t1587 = t1104 and t1009; t1588 = t1587 nand t786; t1589 = t1586 nand t1588; t1590 = not t1589; t1591 = t1110 nand t1590; t1592 = not t1110; t1593 = t1589 nand t1592; t1594 = t1591 nand t1593; t1595 = not t1594; t1596 = t1583 nand t1595; t1597 = not t1583; t1598 = t1594 nand t1597; t1599 = t1596 nand t1598; t1600 = t1599 and t801; t1601 = t695 and t1581; t1602 = t786 and t1009; t1603 = t1124 or t1602; t1604 = not t1603; t1605 = t1104 nand t1604; t1606 = not t1104; t1607 = t1603 nand t1606; t1608 = t1605 nand t1607; t1609 = not t1608; t1610 = t1601 nand t1609; t1611 = not t1601; t1612 = t1608 nand t1611; t1613 = t1610 nand t1612; t1614 = t695 and t1114; t1615 = t1614 nor t1122; t1616 = t1613 and t1615; t1617 = not t1599; t1618 = t1616 nand t1617; t1619 = not t1616; t1620 = t1599 nand t1619; t1621 = t1618 nand t1620; t1622 = t1621 and t742; t1623 = t1600 or t1622; t1624 = t1573 and t914; t1625 = not t1106; t1626 = not t1625; t1627 = t1626 and t993; t1628 = t1624 or t1627; t1629 = t4 and t1028; t1630 = t1628 nor t1629; t1631 = t1630 and t900; t1632 = t1623 or t1631; t1633 = t1580 biimp t1632; t1634 = t695 and t1060; t1635 = t699 and t402; t1636 = not t429; t1637 = t1635 nand t1636; t1638 = not t1635; t1639 = t429 nand t1638; t1640 = t1637 nand t1639; t1641 = t1640 nand t1083; t1642 = not t1640; t1643 = t1082 nand t1642; t1644 = t1641 nand t1643; t1645 = not t1644; t1646 = t1634 nand t1645; t1647 = not t1634; t1648 = t1644 nand t1647; t1649 = t1646 nand t1648; t1650 = t1649 and t801; t1651 = not t1649; t1652 = t1651 nor t1533; t1653 = t1530 and t1516; t1654 = t1649 and t1653; t1655 = t1654 and t1533; t1656 = t1652 or t1655; t1657 = t1656 and t742; t1658 = t1650 or t1657; t1659 = t1556 and t810; t1660 = t962 and t815; t1661 = t971 and t818; t1662 = t956 and t824; t1663 = t394 and t829; t1664 = _124; t1665 = t1664 and t832; t1666 = t437 and t835; t1667 = t1665 or t1666; t1668 = t1663 or t1667; t1669 = t1662 or t1668; t1670 = t1661 or t1669; t1671 = t1660 or t1670; t1672 = t1659 or t1671; t1673 = t1547 and t844; t1674 = t1672 nor t1673; t1675 = t155 nand t189; t1676 = not t1675; t1677 = t1674 and t1676; t1678 = t39 and t810; t1679 = t43 and t815; t1680 = t41 and t818; t1681 = t286 and t832; t1682 = t3 and t835; t1683 = t1681 or t1682; t1684 = t1214 or t1683; t1685 = t1342 or t1684; t1686 = t1680 or t1685; t1687 = t1679 or t1686; t1688 = t1678 or t1687; t1689 = t48 and t844; t1690 = t1688 nor t1689; t1691 = t154 nand t189; t1692 = not t1691; t1693 = t1690 and t1692; t1694 = t1677 or t1693; t1695 = t1675 and t1691; t1696 = t127 and t1695; t1697 = t1694 or t1696; t1698 = t1697 and t872; t1699 = t1642 and t993; t1700 = t1698 or t1699; t1701 = t127 and t996; t1702 = t1700 nor t1701; t1703 = t1702 and t900; t1704 = t1658 or t1703; t1705 = t695 and t1113; t1706 = t699 and t579; t1707 = not t594; t1708 = t1706 nand t1707; t1709 = not t1706; t1710 = t594 nand t1709; t1711 = t1708 nand t1710; t1712 = t1711 nand t1135; t1713 = not t1711; t1714 = t1134 nand t1713; t1715 = t1712 nand t1714; t1716 = not t1715; t1717 = t1705 nand t1716; t1718 = not t1705; t1719 = t1715 nand t1718; t1720 = t1717 nand t1719; t1721 = t1720 and t801; t1722 = not t1720; t1723 = t1722 nor t1615; t1724 = t1613 and t1599; t1725 = t1724 and t1720; t1726 = t1723 or t1725; t1727 = t1726 and t742; t1728 = t1721 or t1727; t1729 = t1697 and t914; t1730 = not t1707; t1731 = not t1730; t1732 = t1731 and t993; t1733 = t1729 or t1732; t1734 = t127 and t1028; t1735 = t1733 nor t1734; t1736 = t1735 and t900; t1737 = t1728 or t1736; t1738 = t1704 biimp t1737; t1739 = t1530 and t801; t1740 = not t1530; t1741 = not t1740; t1742 = t1533 nand t1741; t1743 = not t1533; t1744 = t1740 nand t1743; t1745 = t1742 nand t1744; t1746 = not t1745; t1747 = t1746 and t742; t1748 = t1739 or t1747; t1749 = t971 and t810; t1750 = t956 and t815; t1751 = t394 and t818; t1752 = t437 and t824; t1753 = t2 and t829; t1754 = t1556 and t832; t1755 = t1754 or t1682; t1756 = t1753 or t1755; t1757 = t1752 or t1756; t1758 = t1751 or t1757; t1759 = t1750 or t1758; t1760 = t1749 or t1759; t1761 = t962 and t844; t1762 = t1760 nor t1761; t1763 = t1762 and t155; t1764 = t286 and t810; t1765 = t48 and t815; t1766 = t39 and t818; t1767 = t43 and t824; t1768 = t325 and t832; t1769 = t1768 or t1216; t1770 = t1343 or t1769; t1771 = t1767 or t1770; t1772 = t1766 or t1771; t1773 = t1765 or t1772; t1774 = t1764 or t1773; t1775 = t197 and t844; t1776 = t1774 nor t1775; t1777 = t1776 and t154; t1778 = t1763 or t1777; t1779 = t1778 and t872; t1780 = t1523 and t993; t1781 = t1779 or t1780; t1782 = t6 and t996; t1783 = t1781 nor t1782; t1784 = t1783 and t900; t1785 = t1748 or t1784; t1786 = t1748 nor t1784; t1787 = not t1786; t1788 = t1785 and t1787; t1789 = t1613 and t801; t1790 = not t1613; t1791 = not t1790; t1792 = t1615 nand t1791; t1793 = not t1615; t1794 = t1790 nand t1793; t1795 = t1792 nand t1794; t1796 = not t1795; t1797 = t1796 and t742; t1798 = t1789 or t1797; t1799 = t1778 and t914; t1800 = not t1100; t1801 = not t1800; t1802 = t1801 and t993; t1803 = t1799 or t1802; t1804 = t6 and t1028; t1805 = t1803 nor t1804; t1806 = t1805 and t900; t1807 = t1798 nor t1806; t1808 = not t1807; t1809 = t1788 biimp t1808; t793 = not t695; t794 = t707 nand t793; t795 = not t707; t796 = t695 nand t795; t797 = t794 nand t796; t802 = t797 and t801; t803 = t797 and t742; t804 = t802 or t803; t811 = t3 and t810; t816 = t5 and t815; t819 = t36 and t818; t833 = t437 and t832; t837 = t833 or t836; t838 = t830 or t837; t839 = t825 or t838; t840 = t819 or t839; t841 = t816 or t840; t842 = t811 or t841; t845 = t2 and t844; t846 = t842 nor t845; t847 = t846 and t155; t849 = t848 and t810; t851 = t850 and t815; t853 = t852 and t818; t854 = t325 and t824; t855 = t197 and t829; t856 = _329; t857 = t856 and t832; t858 = t286 and t835; t859 = t857 or t858; t860 = t855 or t859; t861 = t854 or t860; t862 = t853 or t861; t863 = t851 or t862; t864 = t849 or t863; t866 = t865 and t844; t867 = t864 nor t866; t868 = t867 and t154; t869 = t847 or t868; t873 = t869 and t872; t877 = t795 and t876; t878 = t873 or t877; t122 = not t6; t123 = t121 nand t122; t124 = not t121; t125 = t6 nand t124; t126 = t123 nand t125; t128 = t4 nand t127; t129 = not t4; t130 = t2 nand t129; t131 = t128 nand t130; t132 = not t131; t133 = t126 nand t132; t134 = not t126; t135 = t131 nand t134; t136 = t133 nand t135; t881 = t136 and t880; t7 = t4 nand t6; t8 = t2 and t7; t882 = t8 and t879; t883 = t881 nor t882; t887 = t883 and t886; t888 = t109 nand t103; t889 = t41 nand t888; t892 = t889 and t891; t893 = t887 or t892; t895 = t102 and t894; t896 = t893 or t895; t898 = t896 and t897; t899 = t878 nor t898; t901 = t899 and t900; t903 = t804 nor t901; t1810 = t903 and t1391; t1811 = t1471 and t1810; t1812 = t1811 and t1254; t1813 = t1541 nor t1579; t1814 = t1001 and t1786; t1815 = t1813 and t1814; t1816 = t1658 nor t1703; t1817 = t1815 and t1816; t1818 = t1812 and t1817; t1819 = not t1818; t906 = t727 nand t793; t907 = not t727; t908 = t695 nand t907; t909 = t906 nand t908; t910 = t909 and t801; t911 = t909 and t742; t912 = t910 or t911; t915 = t869 and t914; t916 = not t724; t917 = not t916; t918 = t917 and t876; t919 = t915 or t918; t923 = t883 and t922; t926 = t889 and t925; t927 = t923 or t926; t929 = t102 and t928; t930 = t927 or t929; t932 = t930 and t931; t933 = t919 nor t932; t934 = t933 and t900; t935 = t912 nor t934; t1820 = t935 and t1417; t1821 = t1495 and t1820; t1822 = t1821 and t1326; t1823 = t1623 nor t1631; t1824 = t1032 and t1807; t1825 = t1823 and t1824; t1826 = t1728 nor t1736; t1827 = t1825 and t1826; t1828 = t1822 and t1827; t1829 = not t1828; t1830 = t1819 biimp t1829; t1831 = t1813 and t1816; t1832 = not t698; t1833 = t1832 nor t700; t1834 = t1831 and t1833; t1835 = t1834 nor t1818; t1836 = t698 and t1835; t1837 = not t1836; t1838 = t1823 and t1826; t1839 = t1838 and t1833; t1840 = t1839 nor t1828; t1841 = t698 and t1840; t1842 = not t1841; t1843 = t1837 biimp t1842; t15 = t8 and t14; t19 = t17 or t18; t20 = t16 and t19; t23 = t22 nand t12; t24 = not t23; t25 = t20 and t24; t26 = t15 or t25; t28 = t27 nand t5; t30 = t29 nand t2; t32 = t31 nand t3; t33 = t30 and t32; t34 = t28 and t33; t37 = t35 nand t36; t38 = t34 and t37; t40 = t18 nand t39; t42 = t16 nand t41; t44 = t17 nand t43; t45 = t42 and t44; t46 = t40 and t45; t49 = t47 nand t48; t50 = t46 and t49; t51 = t38 nand t50; t52 = t13 and t23; t53 = t51 and t52; t54 = t26 or t53; t55 = t26 nor t53; t56 = not t55; t57 = t54 nand t56; t58 = not t56; t59 = t57 biimp t58; t1844 = not t1470; t1845 = t1253 nand t1844; t1846 = not t1253; t1847 = t1470 nand t1846; t1848 = t1845 nand t1847; t902 = t804 or t901; t1849 = not t902; t1850 = t1390 nand t1849; t1851 = not t1390; t1852 = t902 nand t1851; t1853 = t1850 nand t1852; t1854 = not t1853; t1855 = t1848 nand t1854; t1856 = not t1848; t1857 = t1853 nand t1856; t1858 = t1855 nand t1857; t1859 = not t1858; t1860 = not t1000; t1861 = t1785 nand t1860; t1862 = not t1785; t1863 = t1000 nand t1862; t1864 = t1861 nand t1863; t1865 = not t1864; t1866 = t1832 or t700; t1867 = t1580 and t1866; t1868 = t1866 and t1704; t1869 = not t1868; t1870 = t1867 nand t1869; t1871 = not t1867; t1872 = t1868 nand t1871; t1873 = t1870 nand t1872; t1874 = t1865 and t1873; t1875 = _2897; t1876 = t1833 nand t1875; t1877 = t1874 and t1876; t1878 = t1864 and t1873; t1879 = t1833 and t1875; t1880 = t1878 and t1879; t1881 = not t1873; t1882 = t1864 and t1881; t1883 = t1882 and t1876; t1884 = t1880 or t1883; t1885 = t1877 or t1884; t1886 = t1865 and t1881; t1887 = t1886 and t1879; t1888 = t1885 or t1887; t1889 = not t1888; t1890 = t1859 nand t1889; t1891 = not t1859; t1892 = t1888 nand t1891; t1893 = t1890 nand t1892; t1894 = t1798 or t1806; t1895 = t1022 or t1031; t1896 = not t1895; t1897 = t1894 nand t1896; t1898 = not t1894; t1899 = t1895 nand t1898; t1900 = t1897 nand t1899; t1901 = t1632 and t1866; t1902 = t1866 and t1737; t1903 = not t1902; t1904 = t1901 nand t1903; t1905 = not t1901; t1906 = t1902 nand t1905; t1907 = t1904 nand t1906; t1908 = not t1907; t1909 = t1900 and t1908; t1910 = t1909 and t1876; t1911 = not t1900; t1912 = t1911 and t1907; t1913 = t1910 or t1912; t1914 = t1911 and t1879; t1915 = t1913 or t1914; t1916 = not t1915; t1917 = not t1916; t1918 = t1313 or t1325; t1919 = t1482 or t1494; t1920 = not t1919; t1921 = t1918 nand t1920; t1922 = not t1918; t1923 = t1919 nand t1922; t1924 = t1921 nand t1923; t1925 = t1403 or t1416; t1926 = t912 or t934; t1927 = not t1926; t1928 = t1925 nand t1927; t1929 = not t1925; t1930 = t1926 nand t1929; t1931 = t1928 nand t1930; t1932 = not t1931; t1933 = t1924 nand t1932; t1934 = not t1924; t1935 = t1931 nand t1934; t1936 = t1933 nand t1935; t1937 = not t1936; t1938 = not t1937; t1939 = not t1938; t1940 = t1917 nand t1939; t1941 = t1938 nand t1916; t1942 = t1940 and t1941; t1943 = t1893 biimp t1942; t1944 = not t1580; t1945 = t1704 nand t1944; t1946 = not t1704; t1947 = t1580 nand t1946; t1948 = t1945 nand t1947; t1949 = t1948 nand t1865; t1950 = not t1948; t1951 = t1864 nand t1950; t1952 = t1949 nand t1951; t1953 = t1952 nand t1859; t1954 = not t1952; t1955 = t1858 nand t1954; t1956 = t1953 nand t1955; t1957 = not t1956; t1958 = not t1632; t1959 = t1737 nand t1958; t1960 = not t1737; t1961 = t1632 nand t1960; t1962 = t1959 nand t1961; t1963 = t1962 nand t1911; t1964 = not t1962; t1965 = t1900 nand t1964; t1966 = t1963 nand t1965; t1967 = not t1966; t1968 = not t1967; t1969 = t1938 nand t1968; t1970 = t1967 nand t1937; t1971 = t1969 nand t1970; t1972 = t1957 biimp t1971; t91 = t74 nand t90; t92 = not t74; t93 = t89 nand t92; t94 = t91 nand t93; t95 = not t94; t96 = not t90; t97 = not t92; t98 = t96 nand t97; t99 = t92 nand t90; t100 = t98 nand t99; t101 = t95 biimp t100; t137 = not t136; t138 = t120 nand t137; t139 = not t120; t140 = t136 nand t139; t141 = t138 nand t140; t142 = not t141; t143 = not t142; t144 = not t140; t145 = not t144; t146 = not t138; t147 = not t146; t148 = t145 nand t147; t149 = t143 biimp t148; t510 = t347 and t509; t632 = t559 and t631; t633 = t510 biimp t632; t647 = t509 nand t646; t661 = not t660; t662 = t647 and t661; t663 = not t662; t677 = t631 nand t676; t691 = not t690; t692 = t677 and t691; t693 = not t692; t694 = t663 biimp t693; t722 = t715 and t721; t723 = t722 or t720; t738 = t733 or t737; t739 = t723 biimp t738; t743 = t8 and t742; t762 = t761 or t759; t763 = t762 and t186; t764 = t743 or t763; t767 = t741 and t9; t768 = t766 and t767; t769 = t764 or t768; t770 = t764 nor t768; t771 = not t770; t772 = t769 and t771; t787 = t785 or t786; t788 = t787 and t186; t789 = t743 or t788; t790 = t789 nor t768; t791 = not t790; t792 = t772 biimp t791; t904 = not t903; t905 = t902 and t904; t936 = not t935; t937 = t905 biimp t936; tautology t1034; tautology t1148; tautology t1328; tautology t1419; tautology t1497; tautology t1633; tautology t1738; tautology t1809; tautology t1830; tautology t1843; tautology t59; tautology t1943; tautology t1972; tautology t101; tautology t149; tautology t633; tautology t694; tautology t739; tautology t792; tautology t937; buddy-2.4/examples/bddcalc/examples/readme0000664000076500001440000000023710067023362014343 The files here are from the ISCAS85 benchmark set. They have been adjustet such that the comparison of two combinatorial circuits are joined into one file. buddy-2.4/examples/bddcalc/Makefile.am0000644000076500001440000000061710074626073013407 include ../Makefile.def EXTRA_DIST = \ readme \ example.cal \ examples/c432.cal \ examples/c499.cal \ examples/c1355.cal \ examples/c1908.cal \ examples/c2670.cal \ examples/c3540.cal \ examples/readme \ runtest \ expected AM_YFLAGS = -d BUILT_SOURCES = parser.h check_PROGRAMS = bddcalc bddcalc_SOURCES = \ hashtbl.h \ hashtbl.cxx \ lexer.lxx \ parser.yxx \ parser_.h \ slist.h buddy-2.4/examples/bddcalc/Makefile.in0000644000076500001440000003625510100042064013405 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(bddcalc_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in lexer.cxx parser.cxx parser.h check_PROGRAMS = bddcalc$(EXEEXT) subdir = examples/bddcalc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_bddcalc_OBJECTS = hashtbl.$(OBJEXT) lexer.$(OBJEXT) \ parser.$(OBJEXT) bddcalc_OBJECTS = $(am_bddcalc_OBJECTS) bddcalc_LDADD = $(LDADD) bddcalc_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/hashtbl.Po ./$(DEPDIR)/lexer.Po \ @AMDEP_TRUE@ ./$(DEPDIR)/parser.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS) YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) \ $(AM_YFLAGS) COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(bddcalc_SOURCES) DIST_SOURCES = $(bddcalc_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ readme \ example.cal \ examples/c432.cal \ examples/c499.cal \ examples/c1355.cal \ examples/c1908.cal \ examples/c2670.cal \ examples/c3540.cal \ examples/readme \ runtest \ expected AM_YFLAGS = -d BUILT_SOURCES = parser.h bddcalc_SOURCES = \ hashtbl.h \ hashtbl.cxx \ lexer.lxx \ parser.yxx \ parser_.h \ slist.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cxx .lo .lxx .o .obj .yxx $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/bddcalc/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/bddcalc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done parser.h: parser.cxx @if test ! -f $@; then \ rm -f parser.cxx; \ $(MAKE) parser.cxx; \ else :; fi bddcalc$(EXEEXT): $(bddcalc_OBJECTS) $(bddcalc_DEPENDENCIES) @rm -f bddcalc$(EXEEXT) $(CXXLINK) $(bddcalc_LDFLAGS) $(bddcalc_OBJECTS) $(bddcalc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashtbl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lexer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< .lxx.cxx: $(LEXCOMPILE) $< sed '/^#/ s|$(LEX_OUTPUT_ROOT)\.c|$@|' $(LEX_OUTPUT_ROOT).c >$@ rm -f $(LEX_OUTPUT_ROOT).c .yxx.cxx: $(YACCCOMPILE) $< if test -f y.tab.h; then \ to=`echo "$*_H" | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'`; \ sed "/^#/ s/Y_TAB_H/$$to/g" y.tab.h >$*.ht; \ rm -f y.tab.h; \ if cmp -s $*.ht $*.h; then \ rm -f $*.ht ;\ else \ mv $*.ht $*.h; \ fi; \ fi if test -f y.output; then \ mv y.output $*.output; \ fi sed '/^#/ s|y\.tab\.c|$@|' y.tab.c >$@t && mv $@t $@ rm -f y.tab.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. $(distdir)/examples @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f parser.cxx -rm -f parser.h -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -rm -f lexer.cxx clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/bddcalc/lexer.cxx0000644000076500001440000013166010074023115013205 /* A lexical scanner generated by flex */ /* Scanner skeleton version: * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 #include #include /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */ #ifdef c_plusplus #ifndef __cplusplus #define __cplusplus #endif #endif #ifdef __cplusplus #include /* Use prototypes in function declarations. */ #define YY_USE_PROTOS /* The "const" storage-class-modifier is valid. */ #define YY_USE_CONST #else /* ! __cplusplus */ #if __STDC__ #define YY_USE_PROTOS #define YY_USE_CONST #endif /* __STDC__ */ #endif /* ! __cplusplus */ #ifdef __TURBOC__ #pragma warn -rch #pragma warn -use #include #include #define YY_USE_CONST #define YY_USE_PROTOS #endif #ifdef YY_USE_CONST #define yyconst const #else #define yyconst #endif #ifdef YY_USE_PROTOS #define YY_PROTO(proto) proto #else #define YY_PROTO(proto) () #endif /* Returned upon end-of-file. */ #define YY_NULL 0 /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, * we want to instead treat it as an 8-bit unsigned char, hence the * double cast. */ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #define YY_BUF_SIZE 16384 typedef struct yy_buffer_state *YY_BUFFER_STATE; extern int yyleng; extern FILE *yyin, *yyout; #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 /* The funky do-while in the following #define is used to turn the definition * int a single C statement (which needs a semi-colon terminator). This * avoids problems with code like: * * if ( condition_holds ) * yyless( 5 ); * else * do_something_else(); * * Prior to using the do-while the compiler would get upset at the * "else" because it interpreted the "if" statement as being all * done when it reached the ';' after the yyless() call. */ /* Return all but the first 'n' matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ *yy_cp = yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, yytext_ptr ) /* The following is because we cannot portably get our hands on size_t * (without autoconf's help, which isn't available because we want * flex-generated scanners to compile on their own). */ typedef unsigned int yy_size_t; struct yy_buffer_state { FILE *yy_input_file; char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ yy_size_t yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; static YY_BUFFER_STATE yy_current_buffer = 0; /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". */ #define YY_CURRENT_BUFFER yy_current_buffer /* yy_hold_char holds the character lost when yytext is formed. */ static char yy_hold_char; static int yy_n_chars; /* number of characters read into yy_ch_buf */ int yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; static int yy_init = 1; /* whether we need to initialize */ static int yy_start = 0; /* start state number */ /* Flag which is used to allow yywrap()'s to do buffer switches * instead of setting up a fresh yyin. A bit of a hack ... */ static int yy_did_buffer_switch_on_eof; void yyrestart YY_PROTO(( FILE *input_file )); void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); void yy_load_buffer_state YY_PROTO(( void )); YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer ) YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size )); YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str )); YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len )); static void *yy_flex_alloc YY_PROTO(( yy_size_t )); static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )); static void yy_flex_free YY_PROTO(( void * )); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! yy_current_buffer ) \ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \ yy_current_buffer->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (yy_current_buffer->yy_at_bol) typedef unsigned char YY_CHAR; FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; typedef int yy_state_type; extern char *yytext; #define yytext_ptr yytext static yy_state_type yy_get_previous_state YY_PROTO(( void )); static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state )); static int yy_get_next_buffer YY_PROTO(( void )); static void yy_fatal_error YY_PROTO(( yyconst char msg[] )); /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yytext_ptr = yy_bp; \ yyleng = (int) (yy_cp - yy_bp); \ yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; #define YY_NUM_RULES 51 #define YY_END_OF_BUFFER 52 static yyconst short int yy_accept[153] = { 0, 0, 0, 46, 46, 52, 50, 43, 42, 50, 29, 21, 22, 20, 50, 40, 23, 50, 24, 39, 28, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 27, 30, 46, 48, 47, 0, 41, 45, 44, 40, 25, 26, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 33, 39, 39, 39, 39, 39, 39, 39, 46, 47, 49, 44, 39, 35, 39, 39, 39, 7, 39, 39, 39, 32, 39, 39, 39, 39, 38, 36, 39, 39, 39, 39, 39, 39, 39, 34, 39, 39, 39, 39, 39, 39, 39, 39, 39, 37, 14, 39, 39, 12, 6, 39, 17, 10, 39, 39, 31, 15, 4, 18, 39, 39, 39, 19, 39, 39, 39, 39, 39, 39, 5, 39, 2, 39, 39, 39, 39, 3, 39, 1, 9, 13, 39, 11, 39, 39, 39, 16, 39, 8, 0 } ; static yyconst int yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 4, 1, 1, 1, 5, 1, 6, 7, 8, 1, 1, 1, 9, 10, 11, 11, 12, 11, 11, 11, 11, 11, 11, 11, 1, 13, 14, 15, 16, 1, 1, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 1, 1, 1, 18, 17, 1, 19, 20, 21, 22, 23, 24, 25, 26, 27, 17, 17, 28, 29, 30, 31, 32, 17, 33, 34, 35, 36, 17, 37, 38, 39, 40, 1, 41, 1, 42, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static yyconst int yy_meta[43] = { 0, 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 4, 4, 1, 1, 1, 1, 4, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 } ; static yyconst short int yy_base[159] = { 0, 0, 0, 40, 41, 174, 175, 175, 175, 169, 175, 175, 175, 175, 37, 39, 175, 156, 155, 0, 175, 25, 143, 150, 137, 129, 33, 24, 37, 133, 132, 141, 136, 38, 135, 130, 175, 175, 0, 175, 150, 155, 175, 175, 0, 47, 175, 175, 0, 123, 135, 121, 128, 133, 118, 125, 123, 117, 117, 33, 118, 37, 0, 120, 115, 38, 109, 108, 113, 109, 0, 131, 175, 0, 113, 0, 108, 109, 111, 0, 102, 101, 115, 0, 98, 96, 109, 107, 0, 0, 99, 95, 92, 103, 90, 101, 111, 0, 91, 88, 88, 96, 83, 94, 88, 88, 79, 0, 0, 78, 90, 84, 0, 79, 0, 82, 78, 84, 0, 0, 0, 0, 78, 86, 70, 0, 80, 67, 73, 65, 65, 65, 0, 65, 0, 59, 66, 57, 54, 0, 43, 0, 0, 0, 50, 0, 52, 34, 46, 0, 33, 0, 175, 78, 82, 59, 86, 90, 94 } ; static yyconst short int yy_def[159] = { 0, 152, 1, 153, 153, 152, 152, 152, 152, 154, 152, 152, 152, 152, 152, 152, 152, 152, 152, 155, 152, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 152, 152, 156, 152, 157, 154, 152, 152, 158, 152, 152, 152, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 157, 152, 158, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 0, 152, 152, 152, 152, 152, 152 } ; static yyconst short int yy_nxt[218] = { 0, 6, 7, 8, 9, 10, 11, 12, 6, 13, 14, 15, 15, 16, 17, 18, 6, 19, 20, 21, 22, 23, 24, 25, 26, 19, 19, 27, 19, 19, 28, 29, 30, 31, 32, 33, 19, 34, 35, 19, 19, 36, 37, 39, 39, 43, 49, 44, 40, 40, 45, 45, 56, 58, 59, 50, 60, 66, 45, 45, 84, 51, 92, 48, 57, 85, 151, 87, 61, 150, 88, 67, 89, 149, 148, 147, 146, 145, 93, 38, 38, 38, 38, 41, 41, 41, 41, 70, 144, 143, 70, 71, 142, 141, 71, 73, 140, 73, 73, 139, 138, 137, 136, 135, 134, 133, 132, 131, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 152, 97, 96, 95, 94, 91, 90, 86, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 42, 72, 69, 68, 65, 64, 63, 62, 55, 54, 53, 52, 47, 46, 42, 152, 5, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152 } ; static yyconst short int yy_chk[218] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 14, 21, 14, 3, 4, 15, 15, 26, 27, 27, 21, 28, 33, 45, 45, 59, 21, 65, 155, 26, 59, 150, 61, 28, 148, 61, 33, 61, 147, 146, 144, 140, 138, 65, 153, 153, 153, 153, 154, 154, 154, 154, 156, 137, 136, 156, 157, 135, 133, 157, 158, 131, 158, 158, 130, 129, 128, 127, 126, 124, 123, 122, 117, 116, 115, 113, 111, 110, 109, 106, 105, 104, 103, 102, 101, 100, 99, 98, 96, 95, 94, 93, 92, 91, 90, 87, 86, 85, 84, 82, 81, 80, 78, 77, 76, 74, 71, 69, 68, 67, 66, 64, 63, 60, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 41, 40, 35, 34, 32, 31, 30, 29, 25, 24, 23, 22, 18, 17, 9, 5, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152 } ; static yy_state_type yy_last_accepting_state; static char *yy_last_accepting_cpos; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; #line 1 "lexer.lxx" #define INITIAL 0 /************************************************************************* FILE: lexer.l DESCR: FLEX rules for BDD calculator AUTH: Jorn Lind DATE: (C) may 1999 *************************************************************************/ #line 8 "lexer.lxx" #include #include #include "parser_.h" #include "parser.h" /************************************************************************* Macros and sub-lexers *************************************************************************/ #define COMM 1 #line 477 "lexer.cxx" /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap YY_PROTO(( void )); #else extern int yywrap YY_PROTO(( void )); #endif #endif #ifndef YY_NO_UNPUT static void yyunput YY_PROTO(( int c, char *buf_ptr )); #endif #ifndef yytext_ptr static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int )); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen YY_PROTO(( yyconst char * )); #endif #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput YY_PROTO(( void )); #else static int input YY_PROTO(( void )); #endif #endif #if YY_STACK_USED static int yy_start_stack_ptr = 0; static int yy_start_stack_depth = 0; static int *yy_start_stack = 0; #ifndef YY_NO_PUSH_STATE static void yy_push_state YY_PROTO(( int new_state )); #endif #ifndef YY_NO_POP_STATE static void yy_pop_state YY_PROTO(( void )); #endif #ifndef YY_NO_TOP_STATE static int yy_top_state YY_PROTO(( void )); #endif #else #define YY_NO_PUSH_STATE 1 #define YY_NO_POP_STATE 1 #define YY_NO_TOP_STATE 1 #endif #ifdef YY_MALLOC_DECL YY_MALLOC_DECL #else #if __STDC__ #ifndef __cplusplus #include #endif #else /* Just try to get by without declaring the routines. This will fail * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int) * or sizeof(void*) != sizeof(int). */ #endif #endif /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #define YY_READ_BUF_SIZE 8192 #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ if ( yy_current_buffer->yy_is_interactive ) \ { \ int c = '*', n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \ && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR #define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) #endif /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL int yylex YY_PROTO(( void )) #endif /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK break; #endif #define YY_RULE_SETUP \ YY_USER_ACTION YY_DECL { register yy_state_type yy_current_state; register char *yy_cp, *yy_bp; register int yy_act; #line 25 "lexer.lxx" /************************************************************************** Tokens **************************************************************************/ /* Keywords */ #line 637 "lexer.cxx" if ( yy_init ) { yy_init = 0; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! yy_start ) yy_start = 1; /* first start state */ if ( ! yyin ) yyin = stdin; if ( ! yyout ) yyout = stdout; if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_load_buffer_state(); } while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = yy_c_buf_p; /* Support of yytext. */ *yy_cp = yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; yy_current_state = yy_start; yy_match: do { register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; if ( yy_accept[yy_current_state] ) { yy_last_accepting_state = yy_current_state; yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 153 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 175 ); yy_find_action: yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = yy_last_accepting_cpos; yy_current_state = yy_last_accepting_state; yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; do_action: /* This label is used only to access EOF actions. */ switch ( yy_act ) { /* beginning of action switch */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yy_hold_char; yy_cp = yy_last_accepting_cpos; yy_current_state = yy_last_accepting_state; goto yy_find_action; case 1: YY_RULE_SETUP #line 33 "lexer.lxx" return T_initial; YY_BREAK case 2: YY_RULE_SETUP #line 34 "lexer.lxx" return T_inputs; YY_BREAK case 3: YY_RULE_SETUP #line 35 "lexer.lxx" return T_actions; YY_BREAK case 4: YY_RULE_SETUP #line 36 "lexer.lxx" return T_exist; YY_BREAK case 5: YY_RULE_SETUP #line 37 "lexer.lxx" return T_forall; YY_BREAK case 6: YY_RULE_SETUP #line 38 "lexer.lxx" return T_size; YY_BREAK case 7: YY_RULE_SETUP #line 39 "lexer.lxx" return T_dot; YY_BREAK case 8: YY_RULE_SETUP #line 40 "lexer.lxx" return T_autoreorder; YY_BREAK case 9: YY_RULE_SETUP #line 41 "lexer.lxx" return T_reorder; YY_BREAK case 10: YY_RULE_SETUP #line 42 "lexer.lxx" return T_win2; YY_BREAK case 11: YY_RULE_SETUP #line 43 "lexer.lxx" return T_win2ite; YY_BREAK case 12: YY_RULE_SETUP #line 44 "lexer.lxx" return T_sift; YY_BREAK case 13: YY_RULE_SETUP #line 45 "lexer.lxx" return T_siftite; YY_BREAK case 14: YY_RULE_SETUP #line 46 "lexer.lxx" return T_none; YY_BREAK case 15: YY_RULE_SETUP #line 47 "lexer.lxx" return T_cache; YY_BREAK case 16: YY_RULE_SETUP #line 48 "lexer.lxx" return T_tautology; YY_BREAK case 17: YY_RULE_SETUP #line 49 "lexer.lxx" return T_true; YY_BREAK case 18: YY_RULE_SETUP #line 50 "lexer.lxx" return T_false; YY_BREAK case 19: YY_RULE_SETUP #line 51 "lexer.lxx" return T_print; YY_BREAK /* Symbols and operators */ case 20: YY_RULE_SETUP #line 55 "lexer.lxx" return T_dot; YY_BREAK case 21: YY_RULE_SETUP #line 56 "lexer.lxx" return T_lpar; YY_BREAK case 22: YY_RULE_SETUP #line 57 "lexer.lxx" return T_rpar; YY_BREAK case 23: YY_RULE_SETUP #line 58 "lexer.lxx" return T_semi; YY_BREAK case 24: YY_RULE_SETUP #line 59 "lexer.lxx" return T_equal; YY_BREAK case 25: YY_RULE_SETUP #line 60 "lexer.lxx" return T_biimp; YY_BREAK case 26: YY_RULE_SETUP #line 61 "lexer.lxx" return T_imp; YY_BREAK case 27: YY_RULE_SETUP #line 62 "lexer.lxx" return T_or; YY_BREAK case 28: YY_RULE_SETUP #line 63 "lexer.lxx" return T_xor; YY_BREAK case 29: YY_RULE_SETUP #line 64 "lexer.lxx" return T_and; YY_BREAK case 30: YY_RULE_SETUP #line 65 "lexer.lxx" return T_not; YY_BREAK case 31: YY_RULE_SETUP #line 66 "lexer.lxx" return T_biimp; YY_BREAK case 32: YY_RULE_SETUP #line 67 "lexer.lxx" return T_imp; YY_BREAK case 33: YY_RULE_SETUP #line 68 "lexer.lxx" return T_or; YY_BREAK case 34: YY_RULE_SETUP #line 69 "lexer.lxx" return T_xor; YY_BREAK case 35: YY_RULE_SETUP #line 70 "lexer.lxx" return T_and; YY_BREAK case 36: YY_RULE_SETUP #line 71 "lexer.lxx" return T_not; YY_BREAK case 37: YY_RULE_SETUP #line 72 "lexer.lxx" return T_nand; YY_BREAK case 38: YY_RULE_SETUP #line 73 "lexer.lxx" return T_nor; YY_BREAK /* Identifiers and constant values */ case 39: YY_RULE_SETUP #line 76 "lexer.lxx" { strncpy(yylval.id, yytext, MAXIDLEN); return T_id; } YY_BREAK case 40: YY_RULE_SETUP #line 77 "lexer.lxx" { yylval.ival = atol(yytext); return T_intval; } YY_BREAK /* Strings */ case 41: YY_RULE_SETUP #line 80 "lexer.lxx" { yylval.str=sdup(yytext+1); yylval.str[strlen(yylval.str)-1]=0; return T_str; } YY_BREAK /* Whitespace */ case 42: YY_RULE_SETUP #line 84 "lexer.lxx" { linenum++; } YY_BREAK case 43: YY_RULE_SETUP #line 85 "lexer.lxx" /* ignore blanks */ YY_BREAK case 44: YY_RULE_SETUP #line 88 "lexer.lxx" /* Remove one line comments */ YY_BREAK /************************************************************************** Remove multi line comments **************************************************************************/ case 45: YY_RULE_SETUP #line 95 "lexer.lxx" BEGIN COMM; YY_BREAK case 46: YY_RULE_SETUP #line 96 "lexer.lxx" /* ignore */ YY_BREAK case 47: YY_RULE_SETUP #line 97 "lexer.lxx" /* ignore */ YY_BREAK case 48: YY_RULE_SETUP #line 98 "lexer.lxx" { linenum++; } YY_BREAK case 49: YY_RULE_SETUP #line 99 "lexer.lxx" BEGIN INITIAL; YY_BREAK case 50: YY_RULE_SETUP #line 101 "lexer.lxx" { yyerror("Unknown symbol"); } YY_BREAK case 51: YY_RULE_SETUP #line 102 "lexer.lxx" ECHO; YY_BREAK #line 983 "lexer.cxx" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(COMM): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between yy_current_buffer and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yy_n_chars = yy_current_buffer->yy_n_chars; yy_current_buffer->yy_input_file = yyin; yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state ); yy_bp = yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { yy_cp = yy_c_buf_p; goto yy_find_action; } } else switch ( yy_get_next_buffer() ) { case EOB_ACT_END_OF_FILE: { yy_did_buffer_switch_on_eof = 0; if ( yywrap() ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yy_c_buf_p = yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yy_c_buf_p = &yy_current_buffer->yy_ch_buf[yy_n_chars]; yy_current_state = yy_get_previous_state(); yy_cp = yy_c_buf_p; yy_bp = yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of yylex */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ static int yy_get_next_buffer() { register char *dest = yy_current_buffer->yy_ch_buf; register char *source = yytext_ptr; register int number_to_move, i; int ret_val; if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( yy_current_buffer->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1; for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ yy_current_buffer->yy_n_chars = yy_n_chars = 0; else { int num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ #ifdef YY_USES_REJECT YY_FATAL_ERROR( "input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); #else /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = yy_current_buffer; int yy_c_buf_p_offset = (int) (yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yy_flex_realloc( (void *) b->yy_ch_buf, b->yy_buf_size + 2 ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = 0; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = yy_current_buffer->yy_buf_size - number_to_move - 1; #endif } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]), yy_n_chars, num_to_read ); yy_current_buffer->yy_n_chars = yy_n_chars; } if ( yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin ); } else { ret_val = EOB_ACT_LAST_MATCH; yy_current_buffer->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; yy_n_chars += number_to_move; yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR; yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yytext_ptr = &yy_current_buffer->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ static yy_state_type yy_get_previous_state() { register yy_state_type yy_current_state; register char *yy_cp; yy_current_state = yy_start; for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp ) { register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yy_last_accepting_state = yy_current_state; yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 153 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ #ifdef YY_USE_PROTOS static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state ) #else static yy_state_type yy_try_NUL_trans( yy_current_state ) yy_state_type yy_current_state; #endif { register int yy_is_jam; register char *yy_cp = yy_c_buf_p; register YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yy_last_accepting_state = yy_current_state; yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 153 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_is_jam = (yy_current_state == 152); return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT #ifdef YY_USE_PROTOS static void yyunput( int c, register char *yy_bp ) #else static void yyunput( c, yy_bp ) int c; register char *yy_bp; #endif { register char *yy_cp = yy_c_buf_p; /* undo effects of setting up yytext */ *yy_cp = yy_hold_char; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) { /* need to shift things up to make room */ /* +2 for EOB chars. */ register int number_to_move = yy_n_chars + 2; register char *dest = &yy_current_buffer->yy_ch_buf[ yy_current_buffer->yy_buf_size + 2]; register char *source = &yy_current_buffer->yy_ch_buf[number_to_move]; while ( source > yy_current_buffer->yy_ch_buf ) *--dest = *--source; yy_cp += (int) (dest - source); yy_bp += (int) (dest - source); yy_current_buffer->yy_n_chars = yy_n_chars = yy_current_buffer->yy_buf_size; if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 ) YY_FATAL_ERROR( "flex scanner push-back overflow" ); } *--yy_cp = (char) c; yytext_ptr = yy_bp; yy_hold_char = *yy_cp; yy_c_buf_p = yy_cp; } #endif /* ifndef YY_NO_UNPUT */ #ifdef __cplusplus static int yyinput() #else static int input() #endif { int c; *yy_c_buf_p = yy_hold_char; if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] ) /* This was really a NUL. */ *yy_c_buf_p = '\0'; else { /* need more input */ int offset = yy_c_buf_p - yytext_ptr; ++yy_c_buf_p; switch ( yy_get_next_buffer() ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin ); /* fall through */ case EOB_ACT_END_OF_FILE: { if ( yywrap() ) return EOF; if ( ! yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(); #else return input(); #endif } case EOB_ACT_CONTINUE_SCAN: yy_c_buf_p = yytext_ptr + offset; break; } } } c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */ *yy_c_buf_p = '\0'; /* preserve yytext */ yy_hold_char = *++yy_c_buf_p; return c; } #ifdef YY_USE_PROTOS void yyrestart( FILE *input_file ) #else void yyrestart( input_file ) FILE *input_file; #endif { if ( ! yy_current_buffer ) yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); yy_init_buffer( yy_current_buffer, input_file ); yy_load_buffer_state(); } #ifdef YY_USE_PROTOS void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer ) #else void yy_switch_to_buffer( new_buffer ) YY_BUFFER_STATE new_buffer; #endif { if ( yy_current_buffer == new_buffer ) return; if ( yy_current_buffer ) { /* Flush out information for old buffer. */ *yy_c_buf_p = yy_hold_char; yy_current_buffer->yy_buf_pos = yy_c_buf_p; yy_current_buffer->yy_n_chars = yy_n_chars; } yy_current_buffer = new_buffer; yy_load_buffer_state(); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yy_did_buffer_switch_on_eof = 1; } #ifdef YY_USE_PROTOS void yy_load_buffer_state( void ) #else void yy_load_buffer_state() #endif { yy_n_chars = yy_current_buffer->yy_n_chars; yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos; yyin = yy_current_buffer->yy_input_file; yy_hold_char = *yy_c_buf_p; } #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_create_buffer( FILE *file, int size ) #else YY_BUFFER_STATE yy_create_buffer( file, size ) FILE *file; int size; #endif { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); return b; } #ifdef YY_USE_PROTOS void yy_delete_buffer( YY_BUFFER_STATE b ) #else void yy_delete_buffer( b ) YY_BUFFER_STATE b; #endif { if ( ! b ) return; if ( b == yy_current_buffer ) yy_current_buffer = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yy_flex_free( (void *) b->yy_ch_buf ); yy_flex_free( (void *) b ); } #ifdef YY_USE_PROTOS void yy_init_buffer( YY_BUFFER_STATE b, FILE *file ) #else void yy_init_buffer( b, file ) YY_BUFFER_STATE b; FILE *file; #endif { yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; #if YY_ALWAYS_INTERACTIVE b->yy_is_interactive = 1; #else #if YY_NEVER_INTERACTIVE b->yy_is_interactive = 0; #else b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; #endif #endif } #ifdef YY_USE_PROTOS void yy_flush_buffer( YY_BUFFER_STATE b ) #else void yy_flush_buffer( b ) YY_BUFFER_STATE b; #endif { if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == yy_current_buffer ) yy_load_buffer_state(); } #ifndef YY_NO_SCAN_BUFFER #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) #else YY_BUFFER_STATE yy_scan_buffer( base, size ) char *base; yy_size_t size; #endif { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return 0; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = 0; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b ); return b; } #endif #ifndef YY_NO_SCAN_STRING #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str ) #else YY_BUFFER_STATE yy_scan_string( yy_str ) yyconst char *yy_str; #endif { int len; for ( len = 0; yy_str[len]; ++len ) ; return yy_scan_bytes( yy_str, len ); } #endif #ifndef YY_NO_SCAN_BYTES #ifdef YY_USE_PROTOS YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len ) #else YY_BUFFER_STATE yy_scan_bytes( bytes, len ) yyconst char *bytes; int len; #endif { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = len + 2; buf = (char *) yy_flex_alloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < len; ++i ) buf[i] = bytes[i]; buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } #endif #ifndef YY_NO_PUSH_STATE #ifdef YY_USE_PROTOS static void yy_push_state( int new_state ) #else static void yy_push_state( new_state ) int new_state; #endif { if ( yy_start_stack_ptr >= yy_start_stack_depth ) { yy_size_t new_size; yy_start_stack_depth += YY_START_STACK_INCR; new_size = yy_start_stack_depth * sizeof( int ); if ( ! yy_start_stack ) yy_start_stack = (int *) yy_flex_alloc( new_size ); else yy_start_stack = (int *) yy_flex_realloc( (void *) yy_start_stack, new_size ); if ( ! yy_start_stack ) YY_FATAL_ERROR( "out of memory expanding start-condition stack" ); } yy_start_stack[yy_start_stack_ptr++] = YY_START; BEGIN(new_state); } #endif #ifndef YY_NO_POP_STATE static void yy_pop_state() { if ( --yy_start_stack_ptr < 0 ) YY_FATAL_ERROR( "start-condition stack underflow" ); BEGIN(yy_start_stack[yy_start_stack_ptr]); } #endif #ifndef YY_NO_TOP_STATE static int yy_top_state() { return yy_start_stack[yy_start_stack_ptr - 1]; } #endif #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif #ifdef YY_USE_PROTOS static void yy_fatal_error( yyconst char msg[] ) #else static void yy_fatal_error( msg ) char msg[]; #endif { (void) fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ yytext[yyleng] = yy_hold_char; \ yy_c_buf_p = yytext + n; \ yy_hold_char = *yy_c_buf_p; \ *yy_c_buf_p = '\0'; \ yyleng = n; \ } \ while ( 0 ) /* Internal utility routines. */ #ifndef yytext_ptr #ifdef YY_USE_PROTOS static void yy_flex_strncpy( char *s1, yyconst char *s2, int n ) #else static void yy_flex_strncpy( s1, s2, n ) char *s1; yyconst char *s2; int n; #endif { register int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN #ifdef YY_USE_PROTOS static int yy_flex_strlen( yyconst char *s ) #else static int yy_flex_strlen( s ) yyconst char *s; #endif { register int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif #ifdef YY_USE_PROTOS static void *yy_flex_alloc( yy_size_t size ) #else static void *yy_flex_alloc( size ) yy_size_t size; #endif { return (void *) malloc( size ); } #ifdef YY_USE_PROTOS static void *yy_flex_realloc( void *ptr, yy_size_t size ) #else static void *yy_flex_realloc( ptr, size ) void *ptr; yy_size_t size; #endif { /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return (void *) realloc( (char *) ptr, size ); } #ifdef YY_USE_PROTOS static void yy_flex_free( void *ptr ) #else static void yy_flex_free( ptr ) void *ptr; #endif { free( ptr ); } #if YY_MAIN int main() { yylex(); return 0; } #endif #line 102 "lexer.lxx" buddy-2.4/examples/bddcalc/parser.cxx0000644000076500001440000013231310075420740013364 /* A Bison parser, made by GNU Bison 1.875. */ /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc. This program 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* Written by Richard Stallman by simplifying the original so called ``semantic'' parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Using locations. */ #define YYLSP_NEEDED 0 /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { T_id = 258, T_str = 259, T_intval = 260, T_true = 261, T_false = 262, T_initial = 263, T_inputs = 264, T_actions = 265, T_size = 266, T_dumpdot = 267, T_autoreorder = 268, T_reorder = 269, T_win2 = 270, T_win2ite = 271, T_sift = 272, T_siftite = 273, T_none = 274, T_cache = 275, T_tautology = 276, T_print = 277, T_lpar = 278, T_rpar = 279, T_equal = 280, T_semi = 281, T_dot = 282, T_forall = 283, T_exist = 284, T_biimp = 285, T_imp = 286, T_nor = 287, T_or = 288, T_xor = 289, T_and = 290, T_nand = 291, T_not = 292 }; #endif #define T_id 258 #define T_str 259 #define T_intval 260 #define T_true 261 #define T_false 262 #define T_initial 263 #define T_inputs 264 #define T_actions 265 #define T_size 266 #define T_dumpdot 267 #define T_autoreorder 268 #define T_reorder 269 #define T_win2 270 #define T_win2ite 271 #define T_sift 272 #define T_siftite 273 #define T_none 274 #define T_cache 275 #define T_tautology 276 #define T_print 277 #define T_lpar 278 #define T_rpar 279 #define T_equal 280 #define T_semi 281 #define T_dot 282 #define T_forall 283 #define T_exist 284 #define T_biimp 285 #define T_imp 286 #define T_nor 287 #define T_or 288 #define T_xor 289 #define T_and 290 #define T_nand 291 #define T_not 292 /* Copy the first part of user declarations. */ #line 8 "parser.yxx" #include #include #include #include #define IMPLEMENTSLIST /* Special for list template handling */ #include "slist.h" #include "hashtbl.h" #include "parser_.h" /* Definitions for storing and caching of identifiers */ #define inputTag 0 #define exprTag 1 struct nodeData { nodeData(const nodeData &d) { tag=d.tag; name=sdup(d.name); val=d.val; } nodeData(int t, char *n, bdd v) { tag=t; name=n; val=v; } ~nodeData(void) { delete[] name; } int tag; char *name; bdd val; }; typedef SList nodeLst; nodeLst inputs; hashTable names; /* Other */ int linenum; bddgbchandler gbcHandler = bdd_default_gbchandler; /* Prototypes */ void actInit(token *nodes, token *cache); void actInputs(void); void actAddInput(token *id); void actAssign(token *id, token *expr); void actOpr2(token *res, token *left, token *right, int opr); void actNot(token *res, token *right); void actId(token *res, token *id); void actConst(token *res, int); void actSize(token *id); void actDot(token *fname, token *id); void actAutoreorder(token *times, token *method); void actCache(void); void actTautology(token *id); void actExist(token *res, token *var, token *expr); void actForall(token *res, token *var, token *expr); void actQuantVar2(token *res, token *id, token *list); void actQuantVar1(token *res, token *id); void actPrint(token *id); /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) typedef int YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif /* Copy the second part of user declarations. */ /* Line 214 of yacc.c. */ #line 215 "parser.cxx" #if ! defined (yyoverflow) || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # if YYSTACK_USE_ALLOCA # define YYSTACK_ALLOC alloca # else # ifndef YYSTACK_USE_ALLOCA # if defined (alloca) || defined (_ALLOCA_H) # define YYSTACK_ALLOC alloca # else # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # else # if defined (__STDC__) || defined (__cplusplus) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # endif # define YYSTACK_ALLOC malloc # define YYSTACK_FREE free # endif #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ || (YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { short yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ register YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (0) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined (__STDC__) || defined (__cplusplus) typedef signed char yysigned_char; #else typedef short yysigned_char; #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 5 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 88 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 38 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 19 /* YYNRULES -- Number of rules. */ #define YYNRULES 46 /* YYNRULES -- Number of states. */ #define YYNSTATES 84 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 292 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const unsigned char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const unsigned char yyprhs[] = { 0, 0, 3, 7, 12, 16, 19, 21, 24, 28, 31, 33, 35, 37, 39, 41, 43, 45, 49, 53, 57, 61, 65, 69, 73, 77, 80, 84, 86, 88, 90, 92, 97, 102, 105, 107, 110, 114, 117, 121, 123, 125, 127, 129, 131, 133, 136 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yysigned_char yyrhs[] = { 39, 0, -1, 40, 41, 43, -1, 8, 5, 5, 26, -1, 9, 42, 26, -1, 42, 3, -1, 3, -1, 10, 44, -1, 44, 45, 26, -1, 45, 26, -1, 46, -1, 50, -1, 51, -1, 52, -1, 54, -1, 55, -1, 56, -1, 3, 25, 47, -1, 47, 35, 47, -1, 47, 36, 47, -1, 47, 34, 47, -1, 47, 33, 47, -1, 47, 32, 47, -1, 47, 31, 47, -1, 47, 30, 47, -1, 37, 47, -1, 23, 47, 24, -1, 3, -1, 6, -1, 7, -1, 48, -1, 29, 49, 27, 47, -1, 28, 49, 27, 47, -1, 49, 3, -1, 3, -1, 11, 3, -1, 12, 4, 3, -1, 14, 53, -1, 13, 5, 53, -1, 15, -1, 16, -1, 17, -1, 18, -1, 19, -1, 20, -1, 21, 3, -1, 22, 3, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned char yyrline[] = { 0, 94, 94, 100, 104, 108, 109, 116, 120, 121, 125, 126, 127, 128, 129, 130, 131, 135, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 155, 156, 160, 161, 166, 170, 174, 175, 179, 180, 181, 182, 183, 187, 191, 195 }; #endif #if YYDEBUG || YYERROR_VERBOSE /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "T_id", "T_str", "T_intval", "T_true", "T_false", "T_initial", "T_inputs", "T_actions", "T_size", "T_dumpdot", "T_autoreorder", "T_reorder", "T_win2", "T_win2ite", "T_sift", "T_siftite", "T_none", "T_cache", "T_tautology", "T_print", "T_lpar", "T_rpar", "T_equal", "T_semi", "T_dot", "T_forall", "T_exist", "T_biimp", "T_imp", "T_nor", "T_or", "T_xor", "T_and", "T_nand", "T_not", "$accept", "calc", "initial", "inputs", "inputSeq", "actions", "actionSeq", "action", "assign", "expr", "quantifier", "varlist", "size", "dot", "reorder", "method", "cache", "tautology", "print", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const unsigned short yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const unsigned char yyr1[] = { 0, 38, 39, 40, 41, 42, 42, 43, 44, 44, 45, 45, 45, 45, 45, 45, 45, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 49, 49, 50, 51, 52, 52, 53, 53, 53, 53, 53, 54, 55, 56 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const unsigned char yyr2[] = { 0, 2, 3, 4, 3, 2, 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 1, 1, 1, 1, 4, 4, 2, 1, 2, 3, 2, 3, 1, 1, 1, 1, 1, 1, 2, 2 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const unsigned char yydefact[] = { 0, 0, 0, 0, 0, 1, 0, 0, 0, 6, 0, 0, 2, 3, 5, 4, 0, 0, 0, 0, 0, 44, 0, 0, 7, 0, 10, 11, 12, 13, 14, 15, 16, 0, 35, 0, 0, 39, 40, 41, 42, 43, 37, 45, 46, 0, 9, 27, 28, 29, 0, 0, 0, 0, 17, 30, 36, 38, 8, 0, 34, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 26, 33, 0, 0, 24, 23, 22, 21, 20, 18, 19, 32, 31 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yysigned_char yydefgoto[] = { -1, 2, 3, 7, 10, 12, 24, 25, 26, 54, 55, 61, 27, 28, 29, 42, 30, 31, 32 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -38 static const yysigned_char yypact[] = { -6, 7, 15, 14, 46, -38, 49, 44, 50, -38, -2, 36, -38, -38, -38, -38, 30, 74, 75, 73, 51, -38, 77, 78, 36, 56, -38, -38, -38, -38, -38, -38, -38, -3, -38, 80, 51, -38, -38, -38, -38, -38, -38, -38, -38, 58, -38, -38, -38, -38, -3, 82, 82, -3, 10, -38, -38, -38, -38, 29, -38, 8, 11, -38, -3, -3, -3, -3, -3, -3, -3, -38, -38, -3, -3, -26, 39, -17, -17, -14, -38, -38, 10, 10 }; /* YYPGOTO[NTERM-NUM]. */ static const yysigned_char yypgoto[] = { -38, -38, -38, -38, -38, -38, -38, 62, -38, -37, -38, 35, -38, -38, -38, 52, -38, -38, -38 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const unsigned char yytable[] = { 47, 14, 1, 48, 49, 65, 66, 67, 68, 69, 70, 72, 4, 59, 72, 5, 63, 68, 69, 70, 50, 69, 70, 6, 15, 51, 52, 75, 76, 77, 78, 79, 80, 81, 53, 73, 82, 83, 74, 16, 64, 65, 66, 67, 68, 69, 70, 17, 18, 19, 20, 8, 9, 71, 11, 33, 21, 22, 23, 64, 65, 66, 67, 68, 69, 70, 37, 38, 39, 40, 41, 66, 67, 68, 69, 70, 13, 34, 36, 35, 43, 44, 46, 56, 58, 60, 45, 62, 57 }; static const unsigned char yycheck[] = { 3, 3, 8, 6, 7, 31, 32, 33, 34, 35, 36, 3, 5, 50, 3, 0, 53, 34, 35, 36, 23, 35, 36, 9, 26, 28, 29, 64, 65, 66, 67, 68, 69, 70, 37, 27, 73, 74, 27, 3, 30, 31, 32, 33, 34, 35, 36, 11, 12, 13, 14, 5, 3, 24, 10, 25, 20, 21, 22, 30, 31, 32, 33, 34, 35, 36, 15, 16, 17, 18, 19, 32, 33, 34, 35, 36, 26, 3, 5, 4, 3, 3, 26, 3, 26, 3, 24, 52, 36 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const unsigned char yystos[] = { 0, 8, 39, 40, 5, 0, 9, 41, 5, 3, 42, 10, 43, 26, 3, 26, 3, 11, 12, 13, 14, 20, 21, 22, 44, 45, 46, 50, 51, 52, 54, 55, 56, 25, 3, 4, 5, 15, 16, 17, 18, 19, 53, 3, 3, 45, 26, 3, 6, 7, 23, 28, 29, 37, 47, 48, 3, 53, 26, 47, 3, 49, 49, 47, 30, 31, 32, 33, 34, 35, 36, 24, 3, 27, 27, 47, 47, 47, 47, 47, 47, 47, 47, 47 }; #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ #endif #if ! defined (YYSIZE_T) && defined (size_t) # define YYSIZE_T size_t #endif #if ! defined (YYSIZE_T) # if defined (__STDC__) || defined (__cplusplus) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # endif #endif #if ! defined (YYSIZE_T) # define YYSIZE_T unsigned int #endif #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrlab1 /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK; \ goto yybackup; \ } \ else \ { \ yyerror ("syntax error: cannot back up");\ YYERROR; \ } \ while (0) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Compute the default location (before the actions are run). */ #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ Current.first_line = Rhs[1].first_line; \ Current.first_column = Rhs[1].first_column; \ Current.last_line = Rhs[N].last_line; \ Current.last_column = Rhs[N].last_column; #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (YYLEX_PARAM) #else # define YYLEX yylex () #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) # define YYDSYMPRINT(Args) \ do { \ if (yydebug) \ yysymprint Args; \ } while (0) # define YYDSYMPRINTF(Title, Token, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yysymprint (stderr, \ Token, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (cinluded). | `------------------------------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yy_stack_print (short *bottom, short *top) #else static void yy_stack_print (bottom, top) short *bottom; short *top; #endif { YYFPRINTF (stderr, "Stack now"); for (/* Nothing. */; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yy_reduce_print (int yyrule) #else static void yy_reduce_print (yyrule) int yyrule; #endif { int yyi; unsigned int yylineno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", yyrule - 1, yylineno); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YYDSYMPRINT(Args) # define YYDSYMPRINTF(Title, Token, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #if YYMAXDEPTH == 0 # undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined (__GLIBC__) && defined (_STRING_H) # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T # if defined (__STDC__) || defined (__cplusplus) yystrlen (const char *yystr) # else yystrlen (yystr) const char *yystr; # endif { register const char *yys = yystr; while (*yys++ != '\0') continue; return yys - yystr - 1; } # endif # endif # ifndef yystpcpy # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * # if defined (__STDC__) || defined (__cplusplus) yystpcpy (char *yydest, const char *yysrc) # else yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; # endif { register char *yyd = yydest; register const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif #endif /* !YYERROR_VERBOSE */ #if YYDEBUG /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) #else static void yysymprint (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void) yyvaluep; if (yytype < YYNTOKENS) { YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); # ifdef YYPRINT YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif } else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); switch (yytype) { default: break; } YYFPRINTF (yyoutput, ")"); } #endif /* ! YYDEBUG */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ #if defined (__STDC__) || defined (__cplusplus) static void yydestruct (int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yytype, yyvaluep) int yytype; YYSTYPE *yyvaluep; #endif { /* Pacify ``unused variable'' warnings. */ (void) yyvaluep; switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) int yyparse (void *YYPARSE_PARAM); # else int yyparse (); # endif #else /* ! YYPARSE_PARAM */ #if defined (__STDC__) || defined (__cplusplus) int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM # if defined (__STDC__) || defined (__cplusplus) int yyparse (void *YYPARSE_PARAM) # else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; # endif #else /* ! YYPARSE_PARAM */ #if defined (__STDC__) || defined (__cplusplus) int yyparse (void) #else int yyparse () #endif #endif { register int yystate; register int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ short yyssa[YYINITDEPTH]; short *yyss = yyssa; register short *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; register YYSTYPE *yyvsp; #define YYPOPSTACK (yyvsp--, yyssp--) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* When reducing, the number of symbols on the RHS of the reduced rule. */ int yylen; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. so pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; short *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow ("parser stack overflow", &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyoverflowlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyoverflowlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { short *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyoverflowlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ /* yyresume: */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 3: #line 100 "parser.yxx" { actInit(&yyvsp[-2],&yyvsp[-1]); } break; case 4: #line 104 "parser.yxx" { actInputs(); } break; case 5: #line 108 "parser.yxx" { actAddInput(&yyvsp[0]); } break; case 6: #line 109 "parser.yxx" { actAddInput(&yyvsp[0]); } break; case 17: #line 135 "parser.yxx" { actAssign(&yyvsp[-2],&yyvsp[0]); } break; case 18: #line 139 "parser.yxx" { actOpr2(&yyval,&yyvsp[-2],&yyvsp[0],bddop_and); } break; case 19: #line 140 "parser.yxx" { actOpr2(&yyval,&yyvsp[-2],&yyvsp[0],bddop_nand); } break; case 20: #line 141 "parser.yxx" { actOpr2(&yyval,&yyvsp[-2],&yyvsp[0],bddop_xor); } break; case 21: #line 142 "parser.yxx" { actOpr2(&yyval,&yyvsp[-2],&yyvsp[0],bddop_or); } break; case 22: #line 143 "parser.yxx" { actOpr2(&yyval,&yyvsp[-2],&yyvsp[0],bddop_nor); } break; case 23: #line 144 "parser.yxx" { actOpr2(&yyval,&yyvsp[-2],&yyvsp[0],bddop_imp); } break; case 24: #line 145 "parser.yxx" { actOpr2(&yyval,&yyvsp[-2],&yyvsp[0],bddop_biimp); } break; case 25: #line 146 "parser.yxx" { actNot(&yyval,&yyvsp[0]); } break; case 26: #line 147 "parser.yxx" { yyval.bval = yyvsp[-1].bval; } break; case 27: #line 148 "parser.yxx" { actId(&yyval,&yyvsp[0]); } break; case 28: #line 149 "parser.yxx" { yyval.bval = new bdd(bddtrue); } break; case 29: #line 150 "parser.yxx" { yyval.bval = new bdd(bddfalse); } break; case 30: #line 151 "parser.yxx" { yyval.bval = yyvsp[0].bval; } break; case 31: #line 155 "parser.yxx" { actExist(&yyval,&yyvsp[-2],&yyvsp[0]); } break; case 32: #line 156 "parser.yxx" { actForall(&yyval,&yyvsp[-2],&yyvsp[0]); } break; case 33: #line 160 "parser.yxx" { actQuantVar2(&yyval,&yyvsp[0],&yyvsp[-1]); } break; case 34: #line 161 "parser.yxx" { actQuantVar1(&yyval,&yyvsp[0]); } break; case 35: #line 166 "parser.yxx" { actSize(&yyvsp[0]); } break; case 36: #line 170 "parser.yxx" { actDot(&yyvsp[-1],&yyvsp[0]); } break; case 37: #line 174 "parser.yxx" { bdd_reorder(yyvsp[0].ival); } break; case 38: #line 175 "parser.yxx" { actAutoreorder(&yyvsp[-1],&yyvsp[0]); } break; case 39: #line 179 "parser.yxx" { yyval.ival = BDD_REORDER_WIN2; } break; case 40: #line 180 "parser.yxx" { yyval.ival = BDD_REORDER_WIN2ITE; } break; case 41: #line 181 "parser.yxx" { yyval.ival = BDD_REORDER_SIFT; } break; case 42: #line 182 "parser.yxx" { yyval.ival = BDD_REORDER_SIFTITE; } break; case 43: #line 183 "parser.yxx" { yyval.ival = BDD_REORDER_NONE; } break; case 44: #line 187 "parser.yxx" { actCache(); } break; case 45: #line 191 "parser.yxx" { actTautology(&yyvsp[0]); } break; case 46: #line 195 "parser.yxx" { actPrint(&yyvsp[0]); } break; } /* Line 999 of yacc.c. */ #line 1331 "parser.cxx" yyvsp -= yylen; yyssp -= yylen; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if YYERROR_VERBOSE yyn = yypact[yystate]; if (YYPACT_NINF < yyn && yyn < YYLAST) { YYSIZE_T yysize = 0; int yytype = YYTRANSLATE (yychar); char *yymsg; int yyx, yycount; yycount = 0; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ for (yyx = yyn < 0 ? -yyn : 0; yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) yysize += yystrlen (yytname[yyx]) + 15, yycount++; yysize += yystrlen ("syntax error, unexpected ") + 1; yysize += yystrlen (yytname[yytype]); yymsg = (char *) YYSTACK_ALLOC (yysize); if (yymsg != 0) { char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); yyp = yystpcpy (yyp, yytname[yytype]); if (yycount < 5) { yycount = 0; for (yyx = yyn < 0 ? -yyn : 0; yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { const char *yyq = ! yycount ? ", expecting " : " or "; yyp = yystpcpy (yyp, yyq); yyp = yystpcpy (yyp, yytname[yyx]); yycount++; } } yyerror (yymsg); YYSTACK_FREE (yymsg); } else yyerror ("syntax error; also virtual memory exhausted"); } else #endif /* YYERROR_VERBOSE */ yyerror ("syntax error"); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ /* Return failure if at end of input. */ if (yychar == YYEOF) { /* Pop the error token. */ YYPOPSTACK; /* Pop the rest of the stack. */ while (yyss < yyssp) { YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct (yystos[*yyssp], yyvsp); YYPOPSTACK; } YYABORT; } YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); yydestruct (yytoken, &yylval); yychar = YYEMPTY; } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*----------------------------------------------------. | yyerrlab1 -- error raised explicitly by an action. | `----------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); yydestruct (yystos[yystate], yyvsp); yyvsp--; yystate = *--yyssp; YY_STACK_PRINT (yyss, yyssp); } if (yyn == YYFINAL) YYACCEPT; YYDPRINTF ((stderr, "Shifting error token, ")); *++yyvsp = yylval; yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*----------------------------------------------. | yyoverflowlab -- parser overflow comes here. | `----------------------------------------------*/ yyoverflowlab: yyerror ("parser stack overflow"); yyresult = 2; /* Fall through. */ #endif yyreturn: #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif return yyresult; } #line 93 "parser.yxx" /************************************************************************* Main and more *************************************************************************/ void usage(void) { using namespace std ; cerr << "USAGE: bddcalc [-hg] file\n"; cerr << " -h : print this message\n"; cerr << " -g : disable garbage collection info\n"; } int main(int ac, char **av) { using namespace std ; int c; while ((c=getopt(ac, av, "hg")) != EOF) { switch (c) { case 'h': usage(); break; case 'g': gbcHandler = bdd_default_gbchandler; break; } } if (optind >= ac) usage(); yyin = fopen(av[optind],"r"); if (!yyin) { cerr << "Could not open file: " << av[optind] << endl; exit(2); } linenum = 1; bdd_setcacheratio(2); yyparse(); bdd_printstat(); bdd_done(); return 0; } void yyerror(char *fmt, ...) { va_list argp; va_start(argp,fmt); fprintf(stderr, "Parse error in (or before) line %d: ", linenum); vfprintf(stderr, fmt, argp); va_end(argp); exit(3); } /************************************************************************* Semantic actions *************************************************************************/ void actInit(token *nodes, token *cache) { bdd_init(nodes->ival, cache->ival); bdd_gbc_hook(gbcHandler); bdd_reorder_verbose(0); } void actInputs(void) { bdd_setvarnum(inputs.size()); int vnum=0; for (nodeLst::ite i=inputs.first() ; i.more() ; i++, vnum++) { if (names.exists((*i).name)) yyerror("Redefinition of input %s", (*i).name); (*i).val = bdd_ithvar(vnum); hashData hd((*i).name, 0, &(*i)); names.add(hd); } bdd_varblockall(); } void actAddInput(token *id) { inputs.append( nodeData(inputTag,sdup(id->id),bddtrue) ); } void actAssign(token *id, token *expr) { if (names.exists(id->id)) yyerror("Redefinition of %s", id->id); nodeData *d = new nodeData(exprTag, sdup(id->id), *expr->bval); hashData hd(d->name, 0, d); names.add(hd); delete expr->bval; } void actOpr2(token *res, token *left, token *right, int opr) { res->bval = new bdd( bdd_apply(*left->bval, *right->bval, opr) ); delete left->bval; delete right->bval; } void actNot(token *res, token *right) { res->bval = new bdd( bdd_not(*right->bval) ); delete right->bval; //printf("%5d -> %f\n", fixme, bdd_satcount(*res->bval)); } void actId(token *res, token *id) { hashData hd; if (names.lookup(id->id,hd) == 0) { res->bval = new bdd( ((nodeData*)hd.def)->val ); } else yyerror("Unknown variable %s", id->id); } void actExist(token *res, token *var, token *expr) { res->bval = new bdd( bdd_exist(*expr->bval, *var->bval) ); delete var->bval; delete expr->bval; } void actForall(token *res, token *var, token *expr) { res->bval = new bdd( bdd_forall(*expr->bval, *var->bval) ); delete var->bval; delete expr->bval; } void actQuantVar2(token *res, token *id, token *list) { hashData hd; if (names.lookup(id->id,hd) == 0) { if (hd.type == inputTag) { res->bval = list->bval; *res->bval &= ((nodeData*)hd.def)->val; } else yyerror("%s is not a variable", id->id); } else yyerror("Unknown variable %s", id->id); } void actQuantVar1(token *res, token *id) { hashData hd; if (names.lookup(id->id,hd) == 0) { if (hd.type == inputTag) res->bval = new bdd( ((nodeData*)hd.def)->val ); else yyerror("%s is not a variable", id->id); } else yyerror("Unknown variable %s", id->id); } void actSize(token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) { cout << "Number of nodes used for " << id->id << " = " << bdd_nodecount(((nodeData*)hd.def)->val) << endl; } else yyerror("Unknown variable %s", id->id); } void actDot(token *fname, token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) { if (bdd_fnprintdot(fname->str, ((nodeData*)hd.def)->val) < 0) cout << "Could not open file: " << fname->str << endl; } else yyerror("Unknown variable %s", id->id); } void actAutoreorder(token *times, token *method) { if (times->ival == 0) bdd_autoreorder(method->ival); else bdd_autoreorder_times(method->ival, times->ival); } void actCache(void) { bdd_printstat(); } void actTautology(token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) { if (((nodeData*)hd.def)->val == bddtrue) cout << "Formula " << id->id << " is a tautology!\n"; else cout << "Formula " << id->id << " is NOT a tautology!\n"; } else yyerror("Unknown variable %s", id->id); } void actPrint(token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) cout << id->id << " = " << bddset << ((nodeData*)hd.def)->val << endl; else yyerror("Unknown variable %s", id->id); } /* EOF */ buddy-2.4/examples/bddcalc/parser.h0000644000076500001440000000561510075420737013023 /* A Bison parser, made by GNU Bison 1.875. */ /* Skeleton parser for Yacc-like parsing with Bison, Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002 Free Software Foundation, Inc. This program 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* As a special exception, when this file is copied by Bison into a Bison output file, you may use that output file without restriction. This special exception was added by the Free Software Foundation in version 1.24 of Bison. */ /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { T_id = 258, T_str = 259, T_intval = 260, T_true = 261, T_false = 262, T_initial = 263, T_inputs = 264, T_actions = 265, T_size = 266, T_dumpdot = 267, T_autoreorder = 268, T_reorder = 269, T_win2 = 270, T_win2ite = 271, T_sift = 272, T_siftite = 273, T_none = 274, T_cache = 275, T_tautology = 276, T_print = 277, T_lpar = 278, T_rpar = 279, T_equal = 280, T_semi = 281, T_dot = 282, T_forall = 283, T_exist = 284, T_biimp = 285, T_imp = 286, T_nor = 287, T_or = 288, T_xor = 289, T_and = 290, T_nand = 291, T_not = 292 }; #endif #define T_id 258 #define T_str 259 #define T_intval 260 #define T_true 261 #define T_false 262 #define T_initial 263 #define T_inputs 264 #define T_actions 265 #define T_size 266 #define T_dumpdot 267 #define T_autoreorder 268 #define T_reorder 269 #define T_win2 270 #define T_win2ite 271 #define T_sift 272 #define T_siftite 273 #define T_none 274 #define T_cache 275 #define T_tautology 276 #define T_print 277 #define T_lpar 278 #define T_rpar 279 #define T_equal 280 #define T_semi 281 #define T_dot 282 #define T_forall 283 #define T_exist 284 #define T_biimp 285 #define T_imp 286 #define T_nor 287 #define T_or 288 #define T_xor 289 #define T_and 290 #define T_nand 291 #define T_not 292 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) typedef int YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 #endif extern YYSTYPE yylval; buddy-2.4/examples/bddcalc/hashtbl.h0000664000076500001440000000206510067023345013145 /************************************************************************* $Header: /cvsroot/buddy/buddy/examples/bddcalc/hashtbl.h,v 1.1.1.1 2004/06/25 13:21:41 haimcohen Exp $ FILE: hashtbl.h DESCR: Compiler hashtable AUTH: Jorn Lind DATE: (C) september 1998 *************************************************************************/ #ifndef _HASHTBL_H #define _HASHTBL_H #include class hashData { public: hashData(void) { id=NULL; type=0; def=NULL; } hashData(const char *s, int t, void *d) : id(s) { type=t; def=d; } const char *id; int type; void *def; }; class hashElement { public: hashData data; int first; int next; }; class hashTable { public: hashTable(void); ~hashTable(void); void add(hashData &); int exists(const char *); int lookup(const char *, hashData &) const; int remove(const char *); void clear(void); private: void reallocate_table(void); unsigned int hashval(const char *) const; hashElement *table; int size, freepos; }; #endif /* _HASHTBL_H */ /* EOF */ buddy-2.4/examples/bddcalc/hashtbl.cxx0000664000076500001440000000574510067023345013530 /************************************************************************* $Header: /cvsroot/buddy/buddy/examples/bddcalc/hashtbl.cxx,v 1.1.1.1 2004/06/25 13:21:41 haimcohen Exp $ FILE: hashtbl.cc DESCR: Compiler hash table AUTH: Jorn Lind DATE: (C) september 1998 *************************************************************************/ #include "hashtbl.h" /************************************************************************* *************************************************************************/ /*======================================================================*/ hashTable::hashTable(void) { table = NULL; clear(); } hashTable::~hashTable(void) { delete[] table; } void hashTable::add(hashData &d) { if (freepos == -1) reallocate_table(); unsigned int h = hashval(d.id); int tmppos = table[freepos].next; table[freepos].data = d; table[freepos].next = table[h].first; table[h].first = freepos; freepos = tmppos; } int hashTable::exists(const char *id) { if (size == 0) return 0; int p = table[hashval(id)].first; while (p != -1) { if (strcmp(id, table[p].data.id) == 0) return 1; p = table[p].next; } return 0; } int hashTable::lookup(const char *id, hashData &d) const { if (size == 0) return -1; int p = table[hashval(id)].first; while (p != -1) { if (strcmp(id, table[p].data.id) == 0) { d = table[p].data; return 0; } p = table[p].next; } return -1; } int hashTable::remove(const char *id) { if (size == 0) return -1; int h = hashval(id); int next = table[h].first; int prev = -1; while (next != -1) { if (strcmp(id, table[next].data.id) == 0) { if (prev == -1) table[h].first = table[next].next; else table[prev].next = table[next].next; table[next].next = freepos; freepos = next; return 0; } prev = next; next = table[next].next; } return -1; } void hashTable::clear(void) { delete[] table; freepos = -1; size = 0; } void hashTable::reallocate_table(void) { hashElement *newtable; int oldsize = size; int n; if (size > 0) { size *= 2; newtable = new hashElement[size]; for (int n=0 ; n #include #include "parser_.h" #include "parser.h" %} /************************************************************************* Macros and sub-lexers *************************************************************************/ DIGIT [0-9] ID [a-zA-Z_][a-zA-Z0-9_]* LINE [^\n] %x COMM %% /************************************************************************** Tokens **************************************************************************/ /* Keywords */ "initial" return T_initial; "inputs" return T_inputs; "actions" return T_actions; "exist" return T_exist; "forall" return T_forall; "size" return T_size; "dot" return T_dot; "autoreorder" return T_autoreorder; "reorder" return T_reorder; "win2" return T_win2; "win2ite" return T_win2ite; "sift" return T_sift; "siftite" return T_siftite; "none" return T_none; "cache" return T_cache; "tautology" return T_tautology; "true" return T_true; "false" return T_false; "print" return T_print; /* Symbols and operators */ "." return T_dot; "(" return T_lpar; ")" return T_rpar; ";" return T_semi; "=" return T_equal; "<>" return T_biimp; "=>" return T_imp; "|" return T_or; "^" return T_xor; "&" return T_and; "~" return T_not; "biimp" return T_biimp; "imp" return T_imp; "or" return T_or; "xor" return T_xor; "and" return T_and; "not" return T_not; "nand" return T_nand; "nor" return T_nor; /* Identifiers and constant values */ {ID} { strncpy(yylval.id, yytext, MAXIDLEN); return T_id; } {DIGIT}+ { yylval.ival = atol(yytext); return T_intval; } /* Strings */ \"[^\"]*\" { yylval.str=sdup(yytext+1); yylval.str[strlen(yylval.str)-1]=0; return T_str; } /* Whitespace */ [\n] { linenum++; } [\r\t\f ] /* ignore blanks */ "//"{LINE}* /* Remove one line comments */ /************************************************************************** Remove multi line comments **************************************************************************/ "/*" BEGIN COMM; [^*\n]* /* ignore */ "*"[^*/\n]* /* ignore */ \n { linenum++; } "*/" BEGIN INITIAL; . { yyerror("Unknown symbol"); } buddy-2.4/examples/bddcalc/parser.yxx0000644000076500001440000002326110074642344013420 /************************************************************************* FILE: parser.y DESCR: BISON rules and main program for BDD calculator AUTH: Jorn Lind DATE: (C) may 1999 *************************************************************************/ %{ #include #include #include #include #define IMPLEMENTSLIST /* Special for list template handling */ #include "slist.h" #include "hashtbl.h" #include "parser_.h" /* Definitions for storing and caching of identifiers */ #define inputTag 0 #define exprTag 1 struct nodeData { nodeData(const nodeData &d) { tag=d.tag; name=sdup(d.name); val=d.val; } nodeData(int t, char *n, bdd v) { tag=t; name=n; val=v; } ~nodeData(void) { delete[] name; } int tag; char *name; bdd val; }; typedef SList nodeLst; nodeLst inputs; hashTable names; /* Other */ int linenum; bddgbchandler gbcHandler = bdd_default_gbchandler; /* Prototypes */ void actInit(token *nodes, token *cache); void actInputs(void); void actAddInput(token *id); void actAssign(token *id, token *expr); void actOpr2(token *res, token *left, token *right, int opr); void actNot(token *res, token *right); void actId(token *res, token *id); void actConst(token *res, int); void actSize(token *id); void actDot(token *fname, token *id); void actAutoreorder(token *times, token *method); void actCache(void); void actTautology(token *id); void actExist(token *res, token *var, token *expr); void actForall(token *res, token *var, token *expr); void actQuantVar2(token *res, token *id, token *list); void actQuantVar1(token *res, token *id); void actPrint(token *id); %} /************************************************************************* Token definitions *************************************************************************/ %token T_id T_str T_intval T_true T_false %token T_initial T_inputs T_actions %token T_size T_dumpdot %token T_autoreorder T_reorder T_win2 T_win2ite T_sift T_siftite T_none %token T_cache T_tautology T_print %token T_lpar T_rpar %token T_equal %token T_semi T_dot %right T_exist T_forall T_dot %left T_biimp %left T_imp %left T_or T_nor %left T_xor %left T_nand T_and %right T_not /************************************************************************* BISON rules *************************************************************************/ %% /*=[ Top ]==============================================================*/ calc: initial inputs actions ; /*=[ Initializers ]=====================================================*/ initial: T_initial T_intval T_intval T_semi { actInit(&$2,&$3); } ; inputs: T_inputs inputSeq T_semi { actInputs(); } ; inputSeq: inputSeq T_id { actAddInput(&$2); } | T_id { actAddInput(&$1); } ; /*=[ Actions ]==========================================================*/ actions: T_actions actionSeq ; actionSeq: actionSeq action T_semi | action T_semi ; action: assign | size | dot | reorder | cache | tautology | print ; assign: T_id T_equal expr { actAssign(&$1,&$3); } ; expr: expr T_and expr { actOpr2(&$$,&$1,&$3,bddop_and); } | expr T_nand expr { actOpr2(&$$,&$1,&$3,bddop_nand); } | expr T_xor expr { actOpr2(&$$,&$1,&$3,bddop_xor); } | expr T_or expr { actOpr2(&$$,&$1,&$3,bddop_or); } | expr T_nor expr { actOpr2(&$$,&$1,&$3,bddop_nor); } | expr T_imp expr { actOpr2(&$$,&$1,&$3,bddop_imp); } | expr T_biimp expr { actOpr2(&$$,&$1,&$3,bddop_biimp); } | T_not expr { actNot(&$$,&$2); } | T_lpar expr T_rpar { $$.bval = $2.bval; } | T_id { actId(&$$,&$1); } | T_true { $$.bval = new bdd(bddtrue); } | T_false { $$.bval = new bdd(bddfalse); } | quantifier { $$.bval = $1.bval; } ; quantifier: T_exist varlist T_dot expr { actExist(&$$,&$2,&$4); } | T_forall varlist T_dot expr { actForall(&$$,&$2,&$4); } ; varlist: varlist T_id { actQuantVar2(&$$,&$2,&$1); } | T_id { actQuantVar1(&$$,&$1); } ; size: T_size T_id { actSize(&$2); } ; dot: T_dumpdot T_str T_id { actDot(&$2,&$3); } ; reorder: T_reorder method { bdd_reorder($2.ival); } | T_autoreorder T_intval method { actAutoreorder(&$2,&$3); } ; method: T_win2 { $$.ival = BDD_REORDER_WIN2; } | T_win2ite { $$.ival = BDD_REORDER_WIN2ITE; } | T_sift { $$.ival = BDD_REORDER_SIFT; } | T_siftite { $$.ival = BDD_REORDER_SIFTITE; } | T_none { $$.ival = BDD_REORDER_NONE; } ; cache: T_cache { actCache(); } ; tautology: T_tautology T_id { actTautology(&$2); } ; print: T_print T_id { actPrint(&$2); } %% /************************************************************************* Main and more *************************************************************************/ void usage(void) { using namespace std ; cerr << "USAGE: bddcalc [-hg] file\n"; cerr << " -h : print this message\n"; cerr << " -g : disable garbage collection info\n"; } int main(int ac, char **av) { using namespace std ; int c; while ((c=getopt(ac, av, "hg")) != EOF) { switch (c) { case 'h': usage(); break; case 'g': gbcHandler = bdd_default_gbchandler; break; } } if (optind >= ac) usage(); yyin = fopen(av[optind],"r"); if (!yyin) { cerr << "Could not open file: " << av[optind] << endl; exit(2); } linenum = 1; bdd_setcacheratio(2); yyparse(); bdd_printstat(); bdd_done(); return 0; } void yyerror(char *fmt, ...) { va_list argp; va_start(argp,fmt); fprintf(stderr, "Parse error in (or before) line %d: ", linenum); vfprintf(stderr, fmt, argp); va_end(argp); exit(3); } /************************************************************************* Semantic actions *************************************************************************/ void actInit(token *nodes, token *cache) { bdd_init(nodes->ival, cache->ival); bdd_gbc_hook(gbcHandler); bdd_reorder_verbose(0); } void actInputs(void) { bdd_setvarnum(inputs.size()); int vnum=0; for (nodeLst::ite i=inputs.first() ; i.more() ; i++, vnum++) { if (names.exists((*i).name)) yyerror("Redefinition of input %s", (*i).name); (*i).val = bdd_ithvar(vnum); hashData hd((*i).name, 0, &(*i)); names.add(hd); } bdd_varblockall(); } void actAddInput(token *id) { inputs.append( nodeData(inputTag,sdup(id->id),bddtrue) ); } void actAssign(token *id, token *expr) { if (names.exists(id->id)) yyerror("Redefinition of %s", id->id); nodeData *d = new nodeData(exprTag, sdup(id->id), *expr->bval); hashData hd(d->name, 0, d); names.add(hd); delete expr->bval; } void actOpr2(token *res, token *left, token *right, int opr) { res->bval = new bdd( bdd_apply(*left->bval, *right->bval, opr) ); delete left->bval; delete right->bval; } void actNot(token *res, token *right) { res->bval = new bdd( bdd_not(*right->bval) ); delete right->bval; //printf("%5d -> %f\n", fixme, bdd_satcount(*res->bval)); } void actId(token *res, token *id) { hashData hd; if (names.lookup(id->id,hd) == 0) { res->bval = new bdd( ((nodeData*)hd.def)->val ); } else yyerror("Unknown variable %s", id->id); } void actExist(token *res, token *var, token *expr) { res->bval = new bdd( bdd_exist(*expr->bval, *var->bval) ); delete var->bval; delete expr->bval; } void actForall(token *res, token *var, token *expr) { res->bval = new bdd( bdd_forall(*expr->bval, *var->bval) ); delete var->bval; delete expr->bval; } void actQuantVar2(token *res, token *id, token *list) { hashData hd; if (names.lookup(id->id,hd) == 0) { if (hd.type == inputTag) { res->bval = list->bval; *res->bval &= ((nodeData*)hd.def)->val; } else yyerror("%s is not a variable", id->id); } else yyerror("Unknown variable %s", id->id); } void actQuantVar1(token *res, token *id) { hashData hd; if (names.lookup(id->id,hd) == 0) { if (hd.type == inputTag) res->bval = new bdd( ((nodeData*)hd.def)->val ); else yyerror("%s is not a variable", id->id); } else yyerror("Unknown variable %s", id->id); } void actSize(token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) { cout << "Number of nodes used for " << id->id << " = " << bdd_nodecount(((nodeData*)hd.def)->val) << endl; } else yyerror("Unknown variable %s", id->id); } void actDot(token *fname, token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) { if (bdd_fnprintdot(fname->str, ((nodeData*)hd.def)->val) < 0) cout << "Could not open file: " << fname->str << endl; } else yyerror("Unknown variable %s", id->id); } void actAutoreorder(token *times, token *method) { if (times->ival == 0) bdd_autoreorder(method->ival); else bdd_autoreorder_times(method->ival, times->ival); } void actCache(void) { bdd_printstat(); } void actTautology(token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) { if (((nodeData*)hd.def)->val == bddtrue) cout << "Formula " << id->id << " is a tautology!\n"; else cout << "Formula " << id->id << " is NOT a tautology!\n"; } else yyerror("Unknown variable %s", id->id); } void actPrint(token *id) { using namespace std ; hashData hd; if (names.lookup(id->id,hd) == 0) cout << id->id << " = " << bddset << ((nodeData*)hd.def)->val << endl; else yyerror("Unknown variable %s", id->id); } /* EOF */ buddy-2.4/examples/bddcalc/parser_.h0000644000076500001440000000213310067023347013147 /************************************************************************* FILE: parser.h DESCR: parser defs. for BDD calculator AUTH: Jorn Lind DATE: (C) may 1999 *************************************************************************/ #ifndef _PARSER_H #define _PARSER_H #include #include "bdd.h" #define MAXIDLEN 32 /* Max. number of allowed characters in an identifier */ struct token /* BISON token data */ { char id[MAXIDLEN+1]; char *str; int ival; bdd *bval; }; #define YYSTYPE token #define YY_SKIP_YYWRAP #define YY_NO_UNPUT #define yywrap() (1) extern YYSTYPE yylval; /* Declare for flex user */ extern void yyerror(char *,...); /* Declare for flex and bison */ extern FILE *yyin; extern int yylex(void); /* Declare for bison */ extern int yyparse(void); /* Declare for bison user */ extern int linenum; /* Declare for error handler */ /* Use this instead of strdup() to avoid malloc() */ inline char *sdup(const char *s) { return strcpy(new char[strlen(s)+1], s); } #endif /* _PARSER_H */ /* EOF */ buddy-2.4/examples/bddcalc/slist.h0000664000076500001440000001163410067023354012660 /************************************************************************* $Header: /cvsroot/buddy/buddy/examples/bddcalc/slist.h,v 1.1.1.1 2004/06/25 13:21:48 haimcohen Exp $ FILE: slist.h DESCR: Single linked list AUTH: Jorn Lind DATE: (C) *************************************************************************/ #ifndef _SLIST_H #define _SLIST_H #include /* === Base void list ==================================================*/ class voidSList; class voidSList { protected: class voidSListElem { public: void *data; voidSListElem *next; ~voidSListElem(void) { delete next; } private: voidSListElem(void *d) { data=d; next=NULL; } friend class voidSList; }; public: voidSList(void) { head=tail=NULL; len=0; } ~voidSList(void) { delete head; } void *append(void *); void *append(voidSListElem *p, void *d); void *insert(void *); int size(void) const { return len; } int empty(void) const { return len==0; } void reverse(void); void eraseHead(void); void eraseAll(void) { delete head; head=tail=NULL; len=0; } protected: int len; voidSListElem *head, *tail; }; #ifdef IMPLEMENTSLIST void *voidSList::append(void *d) { voidSListElem *elem = new voidSListElem(d); if (tail) tail->next = elem; else head = elem; tail = elem; len++; return elem->data; } void *voidSList::append(voidSListElem *p, void *d) { voidSListElem *elem = new voidSListElem(d); if (p) { elem->next = p->next; p->next = elem; if (p == tail) tail = p->next; } else { if (tail) tail->next = elem; else head = elem; tail = elem; } len++; return elem->data; } void *voidSList::insert(void *d) { voidSListElem *elem = new voidSListElem(d); if (tail == NULL) tail = elem; elem->next = head; head = elem; len++; return elem->data; } void voidSList::reverse(void) { voidSListElem *newTail = head; voidSListElem *tmpHead = NULL; if (len < 2) return ; while (head != NULL) { voidSListElem *tmpNext = head->next; head->next = tmpHead; tmpHead = head; head = tmpNext; } tail = newTail; head = tmpHead; } void voidSList::eraseHead(void) { if (head != NULL) { head = head->next; if (head == NULL) tail = NULL; len--; } } #endif /* IMPLEMENTSLIST */ /* === Base void list ==================================================*/ //sorting template class SList : private voidSList { public: class ite { public: ite(void) { next=NULL; } ite(const ite &start) { next=start.next;} ite(voidSListElem *start) { next=start; } int more(void) const { return next!=NULL; } ite &operator=(const ite &start) { next=start.next; return *this; } ite operator++(void) { if (next) next=next->next; return *this; } ite operator++(int) { ite tmp=*this; if (next) next=next->next; return tmp; } T &operator*(void) const { return *((T*)next->data); } int operator==(ite x) { return x.next==next; } private: voidSListElem *next; friend class SList; }; ~SList(void) { for (ite x=first() ; x.more() ; x++) delete &(*x); } T &append(const T &d) { return *((T*)voidSList::append(new T(d))); } T &insert(const T &d) { return *((T*)voidSList::insert(new T(d))); } T &head(void) const { return *((T*)voidSList::head->data); } T &tail(void) const { return *((T*)voidSList::tail->data); } ite first(void) const { return ite(voidSList::head); } int empty(void) const { return voidSList::empty(); } int size(void) const { return voidSList::size(); } void reverse(void) { voidSList::reverse(); } void filter(int (*)(T&)); void append(SList &l) { for (ite x=l.first() ; x.more() ; x++) append(*x); } T &append(ite &i, const T &d) { return *((T*)voidSList::append(i.next, new T(d))); } void eraseHead(void) { delete ((T*)voidSList::head->data); voidSList::eraseHead(); } void eraseAll(void) { for (ite x=first() ; x.more() ; x++) delete &(*x); voidSList::eraseAll();} void map(void (*f)(T&)) { for (ite x=first() ; x.more() ; x++) f(*x); } }; template void SList::filter(int (*f)(T&)) { voidSListElem *prev=NULL, *next=voidSList::head; while (next) { if (f(*((T*)next->data))) { prev = next; next = next->next; } else { voidSListElem *n = next->next; if (prev == NULL) voidSList::head = next->next; else prev->next = next->next; if (voidSList::head == NULL) voidSList::tail = NULL; delete next->data; next->next = NULL; delete next; next = n; len--; } } } #endif /* _SLIST_H */ /* EOF */ buddy-2.4/examples/bddcalc/readme0000664000076500001440000000641610067023351012530 A PRIMITIVE BDD CALCULATOR -------------------------- This is a small program that parses commands for a BDD calculator. The input file contains the definition of the basic BDD variables (inputs) and a sequence of actions - typically assignments. The calculator can be used for verification of combinatorial circuits (tautology check), such as some of the ISCAS85 circuits in the "examples" directory. These ISCAS85 have been modified by another program before they where added to the BuDDy examples, so please do not compare the runtime results to other test runs. A BDD calculator file could be something like this ("example.cal"): initial 100 100; inputs a b c; actions t1 = (a | b) & c; t2 = (a & c) | (b & c); t3 = t1 <> t2; tautology t3; /* Verify that (a | b) & c == (a & c) | (b & c) */ Where the blocks are like this: initial n c ----------- Initialize the BDD package using 'n' bddnodes and 'c' elements in the caches. This part is mandatory. inputs id-seq ------------- Define all identifiers in the sequence 'id-seq' to be primary inputs. This also corresponds to the initial BDD variable ordering, starting with the first identifier in the top. outputs id-seq -------------- Define all identifiers in the sequence 'id-seq' to be primary outputs. The sequence is space separated. actions act-seq --------------- A list of all the calculations and more. This list is traversed and interpreted in the same order as written in the file. An action can be one of the following: Assignments: "id = expression" Calculate the right-hand side and assign the value to the left-hand identifier. The expression may contain: + identifiers : A previously defined identifier + true : The constant true BDD + false : The constant false BDD + ( ... ) : Parenteses + E1 & E2 : Conjunction of two sub-expressions + E1 | E2 : Disjunction of two sub-expressions + E1 ^ E2 : Xor + E1 => E2 : Implication + E1 <> E2 : Biimplication + ~E : Negation + exist V.E : + forall V. E : Existential/Universal quantification of the variables V in the expression E. V is a space separated list of input names. Tautology check: "tautology id" Check the variable 'id' for tautology (being equal to the constant true BDD). Size information: "size id" Print the number of distinct BDD nodes used to represent 'id'. Dump as a dot file: "dot "filename" id" Dump the BDD representing 'id' as commands to the graph drawing program Dot. The commands are written to the file 'filename'. Reordering: "reorder mtd" Do a dynamic variable reordering now using the method 'mtd'. The argument 'mtd' may be either: win2, win2ite or sift. Automatic reordering: "autoreorder times mtd" Enable automatic dynamic variable reordering using the method 'mtd'. The argument 'mtd' may be either: win2, win2ite, sift or none. Use none to disable automatic reordering. The 'times' argument supplies the number of times that reordering may be done. Use for example 1 if you only want a "one-shot" reordering. Cache statistics: "cache" Print various cache statistics for the BDD kernel. buddy-2.4/examples/bddcalc/example.cal0000664000076500001440000000017710067023345013465 initial 100 100; inputs a b c; actions t1 = (a | b) & c; t2 = (a & c) | (b & c); t3 = t1 <> t2; tautology t3; buddy-2.4/examples/bddcalc/runtest0000755000076500001440000000027110071324351012770 #!/bin/tcsh -f foreach calfile ( `ls {.,examples}/*.cal` ) echo "Running with cal file : $calfile" >> result ./bddcalc $calfile | egrep -v '^Garbage collection' >> result end buddy-2.4/examples/bddcalc/expected0000644000076500001440000001114710077615522013077 Running with cal file : ./example.cal Formula t3 is a tautology! Cache statistics ---------------- Unique Access: 0 Unique Chain: 0 Unique Hit: 0 Unique Miss: 0 => Hit rate = 0.00 Operator Hits: 0 Operator Miss: 0 => Hit rate = 0.00 Swap count = 0 Running with cal file : examples/c1355.cal Formula t383 is a tautology! Formula t394 is a tautology! Formula t504 is a tautology! Formula t515 is a tautology! Formula t530 is a tautology! Formula t541 is a tautology! Formula t552 is a tautology! Formula t563 is a tautology! Formula t597 is a tautology! Formula t608 is a tautology! Formula t619 is a tautology! Formula t630 is a tautology! Formula t405 is a tautology! Formula t644 is a tautology! Formula t655 is a tautology! Formula t666 is a tautology! Formula t677 is a tautology! Formula t692 is a tautology! Formula t703 is a tautology! Formula t714 is a tautology! Formula t725 is a tautology! Formula t739 is a tautology! Formula t750 is a tautology! Formula t416 is a tautology! Formula t761 is a tautology! Formula t772 is a tautology! Formula t432 is a tautology! Formula t443 is a tautology! Formula t454 is a tautology! Formula t465 is a tautology! Formula t482 is a tautology! Formula t493 is a tautology! Cache statistics ---------------- Unique Access: 0 Unique Chain: 0 Unique Hit: 0 Unique Miss: 0 => Hit rate = 0.00 Operator Hits: 0 Operator Miss: 0 => Hit rate = 0.00 Swap count = 0 Running with cal file : examples/c1908.cal Formula t476 is a tautology! Formula t498 is a tautology! Formula t515 is a tautology! Cache statistics ---------------- Unique Access: 0 Unique Chain: 0 Unique Hit: 0 Unique Miss: 0 => Hit rate = 0.00 Operator Hits: 0 Operator Miss: 0 => Hit rate = 0.00 Swap count = 0 Running with cal file : examples/c2670.cal Formula t26 is a tautology! Formula t44 is a tautology! Formula t68 is a tautology! Formula t117 is a tautology! Formula t548 is a tautology! Formula t551 is a tautology! Formula t632 is a tautology! Formula t717 is a tautology! Formula t717 is a tautology! Formula t748 is a tautology! Formula t1018 is a tautology! Formula t1196 is a tautology! Formula t1199 is a tautology! Cache statistics ---------------- Unique Access: 0 Unique Chain: 0 Unique Hit: 0 Unique Miss: 0 => Hit rate = 0.00 Operator Hits: 0 Operator Miss: 0 => Hit rate = 0.00 Swap count = 0 Running with cal file : examples/c3540.cal Formula t1034 is a tautology! Formula t1148 is a tautology! Formula t1328 is a tautology! Formula t1419 is a tautology! Formula t1497 is a tautology! Formula t1633 is a tautology! Formula t1738 is a tautology! Formula t1809 is a tautology! Formula t1830 is a tautology! Formula t1843 is a tautology! Formula t59 is a tautology! Formula t1943 is a tautology! Formula t1972 is a tautology! Formula t101 is a tautology! Formula t149 is a tautology! Formula t633 is a tautology! Formula t694 is a tautology! Formula t739 is a tautology! Formula t792 is a tautology! Formula t937 is a tautology! Cache statistics ---------------- Unique Access: 0 Unique Chain: 0 Unique Hit: 0 Unique Miss: 0 => Hit rate = 0.00 Operator Hits: 0 Operator Miss: 0 => Hit rate = 0.00 Swap count = 0 Running with cal file : examples/c432.cal Formula t229 is a tautology! Formula t245 is a tautology! Cache statistics ---------------- Unique Access: 0 Unique Chain: 0 Unique Hit: 0 Unique Miss: 0 => Hit rate = 0.00 Operator Hits: 0 Operator Miss: 0 => Hit rate = 0.00 Swap count = 0 Running with cal file : examples/c499.cal Formula t161 is a tautology! Formula t166 is a tautology! Formula t222 is a tautology! Formula t227 is a tautology! Formula t236 is a tautology! Formula t241 is a tautology! Formula t246 is a tautology! Formula t251 is a tautology! Formula t279 is a tautology! Formula t284 is a tautology! Formula t289 is a tautology! Formula t294 is a tautology! Formula t171 is a tautology! Formula t302 is a tautology! Formula t307 is a tautology! Formula t312 is a tautology! Formula t317 is a tautology! Formula t326 is a tautology! Formula t331 is a tautology! Formula t336 is a tautology! Formula t341 is a tautology! Formula t349 is a tautology! Formula t354 is a tautology! Formula t176 is a tautology! Formula t359 is a tautology! Formula t364 is a tautology! Formula t186 is a tautology! Formula t191 is a tautology! Formula t196 is a tautology! Formula t201 is a tautology! Formula t212 is a tautology! Formula t217 is a tautology! Cache statistics ---------------- Unique Access: 0 Unique Chain: 0 Unique Hit: 0 Unique Miss: 0 => Hit rate = 0.00 Operator Hits: 0 Operator Miss: 0 => Hit rate = 0.00 Swap count = 0 buddy-2.4/examples/bddtest/0000777000076500001440000000000010100060514011466 5buddy-2.4/examples/bddtest/Makefile.am0000644000076500001440000000016510074626110013452 include ../Makefile.def EXTRA_DIST = \ runtest \ expected check_PROGRAMS = bddtest bddtest_SOURCES = bddtest.cxx buddy-2.4/examples/bddtest/Makefile.in0000644000076500001440000003210510100042065013451 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(bddtest_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = bddtest$(EXEEXT) subdir = examples/bddtest ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_bddtest_OBJECTS = bddtest.$(OBJEXT) bddtest_OBJECTS = $(am_bddtest_OBJECTS) bddtest_LDADD = $(LDADD) bddtest_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bddtest.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(bddtest_SOURCES) DIST_SOURCES = $(bddtest_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ runtest \ expected bddtest_SOURCES = bddtest.cxx all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/bddtest/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/bddtest/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done bddtest$(EXEEXT): $(bddtest_OBJECTS) $(bddtest_DEPENDENCIES) @rm -f bddtest$(EXEEXT) $(CXXLINK) $(bddtest_LDFLAGS) $(bddtest_OBJECTS) $(bddtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bddtest.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/bddtest/bddtest.cxx0000664000076500001440000000525410067023345013604 #include #include #include static const int varnum = 5; /************************************************************************** Example of allsat print handler. **************************************************************************/ void allsatHandlerPrint(char* varset, int size) { using namespace std ; for (int v=0; v result buddy-2.4/examples/bddtest/expected0000644000076500001440000000666610071144062013154 Checking bdd with 32 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 14 assignments: Sum-OK. Sub-OK. Checking bdd with 14 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 24 assignments: Sum-OK. Sub-OK. Checking bdd with 12 assignments: Sum-OK. Sub-OK. Checking bdd with 8 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 24 assignments: Sum-OK. Sub-OK. Checking bdd with 12 assignments: Sum-OK. Sub-OK. Checking bdd with 8 assignments: Sum-OK. Sub-OK. Checking bdd with 4 assignments: Sum-OK. Sub-OK. Checking bdd with 20 assignments: Sum-OK. Sub-OK. Checking bdd with 28 assignments: Sum-OK. Sub-OK. Checking bdd with 14 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 8 assignments: Sum-OK. Sub-OK. Checking bdd with 24 assignments: Sum-OK. Sub-OK. Checking bdd with 12 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 0 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 8 assignments: Sum-OK. Sub-OK. Checking bdd with 4 assignments: Sum-OK. Sub-OK. Checking bdd with 18 assignments: Sum-OK. Sub-OK. Checking bdd with 32 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 24 assignments: Sum-OK. Sub-OK. Checking bdd with 12 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 8 assignments: Sum-OK. Sub-OK. Checking bdd with 20 assignments: Sum-OK. Sub-OK. Checking bdd with 10 assignments: Sum-OK. Sub-OK. Checking bdd with 24 assignments: Sum-OK. Sub-OK. Checking bdd with 32 assignments: Sum-OK. Sub-OK. Checking bdd with 32 assignments: Sum-OK. Sub-OK. Checking bdd with 32 assignments: Sum-OK. Sub-OK. Checking bdd with 32 assignments: Sum-OK. Sub-OK. Checking bdd with 16 assignments: Sum-OK. Sub-OK. Checking bdd with 8 assignments: Sum-OK. Sub-OK. Checking bdd with 4 assignments: Sum-OK. Sub-OK. Checking bdd with 4 assignments: Sum-OK. Sub-OK. buddy-2.4/examples/cmilner/0000777000076500001440000000000010100060515011467 5buddy-2.4/examples/cmilner/Makefile.am0000644000076500001440000000017310074626150013455 include ../Makefile.def EXTRA_DIST = \ readme \ runtest \ expected check_PROGRAMS = cmilner cmilner_SOURCES = cmilner.c buddy-2.4/examples/cmilner/Makefile.in0000644000076500001440000003176410100042066013464 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(cmilner_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = cmilner$(EXEEXT) subdir = examples/cmilner ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_cmilner_OBJECTS = cmilner.$(OBJEXT) cmilner_OBJECTS = $(am_cmilner_OBJECTS) cmilner_LDADD = $(LDADD) cmilner_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/cmilner.Po COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(cmilner_SOURCES) DIST_SOURCES = $(cmilner_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ readme \ runtest \ expected cmilner_SOURCES = cmilner.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/cmilner/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/cmilner/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done cmilner$(EXEEXT): $(cmilner_OBJECTS) $(cmilner_DEPENDENCIES) @rm -f cmilner$(EXEEXT) $(LINK) $(cmilner_LDFLAGS) $(cmilner_OBJECTS) $(cmilner_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmilner.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/cmilner/cmilner.c0000664000076500001440000001437710067023345013232 #include #include #include #include "bdd.h" int N; /* Number of cyclers */ int *normvar; /* Current state variables */ int *primvar; /* Next state variables */ bdd normvarset; bddPair *pairs; bdd A(bdd* x, bdd* y, int z) { bdd res = bddtrue, tmp1, tmp2; int i; for(i=0 ; i> result ./cmilner $N | egrep -v '^Garbage collection' >> result end buddy-2.4/examples/cmilner/expected0000644000076500001440000000150610074054414013144 Running with N = 4 SatCount R = 524288 Calc = 524288 Running with N = 10 SatCount R = 21990232555520 Calc = 21990232555520 Running with N = 16 SatCount R = 590295810358705651712 Calc = 590295810358705651712 Running with N = 20 SatCount R = 48357032784585166988247040 Calc = 48357032784585166988247040 Running with N = 30 SatCount R = 79753679747094952374228423616820674560 Calc = 79753679747094952374228423616820674560 Running with N = 50 SatCount R = 160693804425899027554196209234116260252220299378279283530137600 Calc = 160693804425899027554196209234116260252220299378279283530137600 Running with N = 64 SatCount R = 14821387422376473014217086081112052205218558037201992197050570753012880593911808 Calc = 14821387422376473014217086081112052205218558037201992197050570753012880593911808 buddy-2.4/examples/fdd/0000777000076500001440000000000010100060516010574 5buddy-2.4/examples/fdd/Makefile.am0000644000076500001440000000014710074626217012566 include ../Makefile.def EXTRA_DIST = \ runtest \ expected check_PROGRAMS = fdd fdd_SOURCES = fdd.cxx buddy-2.4/examples/fdd/Makefile.in0000644000076500001440000003174410100042066012566 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(fdd_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = fdd$(EXEEXT) subdir = examples/fdd ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_fdd_OBJECTS = fdd.$(OBJEXT) fdd_OBJECTS = $(am_fdd_OBJECTS) fdd_LDADD = $(LDADD) fdd_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/fdd.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(fdd_SOURCES) DIST_SOURCES = $(fdd_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ runtest \ expected fdd_SOURCES = fdd.cxx all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/fdd/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/fdd/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done fdd$(EXEEXT): $(fdd_OBJECTS) $(fdd_DEPENDENCIES) @rm -f fdd$(EXEEXT) $(CXXLINK) $(fdd_LDFLAGS) $(fdd_OBJECTS) $(fdd_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdd.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/fdd/fdd.cxx0000664000076500001440000000423610067023345012013 /* This program creates a transition relation for a finite state machine. * This transition relation is then used to find the reachable statespace * of the state machine. The state machine has 8 states with state 0 being * the initial state. The transitions form a ring: * * 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> -> 7 -> 0 */ #include "fdd.h" /* Use the transition relation "transRel" to iterate through the statespace */ void findStateSpace(bdd transRel) { using namespace std ; /* Create a new pair for renaming the next-state variables to * current-state variables */ bddPair *p = bdd_newpair(); fdd_setpair(p,1,0); /* Get a BDD that represents all the current-state variables */ bdd currentStateVar = fdd_ithset(0); /* Start with the initial state */ bdd reachedStates = fdd_ithvar(0,0); bdd tmp = bddfalse; /* Repeat until no new states are found */ do { tmp = reachedStates; /* Calculate: Newset = (exists V_cur. transRel & Reached)[cur/next] */ bdd newset; newset = reachedStates & transRel; newset = bdd_exist(newset, currentStateVar); newset = bdd_replace(newset, p); cout << "Front: " << (newset - reachedStates) << endl; /* Add the new states to the found states */ reachedStates = reachedStates | newset; } while (tmp != reachedStates); } int main() { using namespace std ; /* Initialize BuDDy and declare two interleaved FDD variable blocks * with the domain [0..7] */ int domain[2] = {8,8}; bdd_init(100,100); fdd_extdomain(domain, 2); /* Initialize the transition relation with no transitions */ bdd T = bddfalse; /* Add all the transitions (from state 'i' to state 'i+1') */ for (int i=0 ; i<8 ; i++) { /* Set the current state to be state 'i' */ bdd current = fdd_ithvar(0,i); /* Set the next state to be state 'i+1' */ bdd next = fdd_ithvar(1, (i+1) % 8); /* Add the transition */ T = T | (current & next); } cout << fddset << "Transition relation: " << T << endl << endl; /* Calculate the reachable statespace */ findStateSpace(T); } buddy-2.4/examples/fdd/runtest0000755000076500001440000000010010071326065012144 #!/bin/tcsh -f ./fdd | egrep -v '^Garbage collection' > result buddy-2.4/examples/fdd/expected0000644000076500001440000000031310071325653012246 Transition relation: <0:0, 1:1><0:4, 1:5><0:2, 1:3><0:6, 1:7><0:1, 1:2><0:5, 1:6><0:3, 1:4><0:7, 1:0> Front: <0:1> Front: <0:2> Front: <0:3> Front: <0:4> Front: <0:5> Front: <0:6> Front: <0:7> Front: F buddy-2.4/examples/milner/0000777000076500001440000000000010100060517011326 5buddy-2.4/examples/milner/Makefile.am0000644000076500001440000000017310074626202013310 include ../Makefile.def EXTRA_DIST = \ readme \ runtest \ expected check_PROGRAMS = milner milner_SOURCES = milner.cxx buddy-2.4/examples/milner/Makefile.in0000644000076500001440000003206610100042067013316 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(milner_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = milner$(EXEEXT) subdir = examples/milner ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_milner_OBJECTS = milner.$(OBJEXT) milner_OBJECTS = $(am_milner_OBJECTS) milner_LDADD = $(LDADD) milner_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/milner.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(milner_SOURCES) DIST_SOURCES = $(milner_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ readme \ runtest \ expected milner_SOURCES = milner.cxx all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/milner/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/milner/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done milner$(EXEEXT): $(milner_OBJECTS) $(milner_DEPENDENCIES) @rm -f milner$(EXEEXT) $(CXXLINK) $(milner_LDFLAGS) $(milner_OBJECTS) $(milner_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/milner.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/milner/milner.cxx0000664000076500001440000000763310067023336013301 #include #include #include #include "bdd.h" int N; // Number of cyclers bdd normvar; // Current state variables bdd primvar; // Next state variables bddPair *renamepair; // Variable pairs for renaming /* Build a BDD expressing that all other variables than 'z' is unchanged. */ bdd A(bdd* x, bdd* y, int z) { bdd res = bddtrue; int i; for(i=0 ; icp[i]) & (tp[i]>t[i]) & hp[i] & A(c,cp,i) & A(t,tp,i) & A(h,hp,i)) | ((h[i]>hp[i]) & cp[(i+1)%N] & A(c,cp,(i+1)%N) & A(h,hp,i) & A(t,tp,N)); E = t[i] & !tp[i] & A(t,tp,i) & A(h,hp,N) & A(c,cp,N); T |= P | E; } return T; } /* Create a BDD for the initial state. */ bdd initial_state(bdd* t, bdd* h, bdd* c) { int i; bdd I = c[0] & !h[0] & !t[0]; for(i=1; i slow tmp = T & bx; tmp = bdd_exist(tmp, normvar); #else // Apply and exist as one operation => fast tmp = bdd_appex(R, T, bddop_and, normvar); #endif tmp = bdd_replace(tmp, renamepair); R |= tmp; } while(prevR != R); return R; } int main(int argc, char** argv) { using namespace std ; int n; if(argc < 2) { cerr << "usage: milner N\n"; cerr << " N number of cyclers\n"; exit(1); } N = atoi(argv[1]); if (N <= 0) { cerr << "The number of cyclers must be more than zero\n"; exit(2); } bdd_init(500000, 50000); bdd_setvarnum(N*6); bdd* c = new bdd[N]; bdd* cp = new bdd[N]; bdd* t = new bdd[N]; bdd* tp = new bdd[N]; bdd* h = new bdd[N]; bdd* hp = new bdd[N]; int *nvar = new int[N*3]; int *pvar = new int[N*3]; for (n=0 ; n> result ./milner $N | egrep -v '^Garbage collection' >> result end buddy-2.4/examples/milner/expected0000644000076500001440000000241110074054577013007 Running with N = 4 SatCount R = 524288 Calc = 524288 Nodes = 1682 Number of nodes in T is 129 Number of nodes in R is 15 Nodenum: 1684 Running with N = 10 SatCount R = 2.19902e+13 Calc = 2.19902e+13 Nodes = 11867 Number of nodes in T is 357 Number of nodes in R is 39 Nodenum: 11869 Running with N = 16 SatCount R = 5.90296e+20 Calc = 5.90296e+20 Nodes = 32873 Number of nodes in T is 585 Number of nodes in R is 63 Nodenum: 32875 Running with N = 20 SatCount R = 4.8357e+25 Calc = 4.8357e+25 Nodes = 53846 Number of nodes in T is 737 Number of nodes in R is 79 Nodenum: 53848 Running with N = 30 SatCount R = 7.97537e+37 Calc = 7.97537e+37 Nodes = 134872 Number of nodes in T is 1117 Number of nodes in R is 119 Nodenum: 134874 Running with N = 50 SatCount R = 1.60694e+62 Calc = 1.60694e+62 Nodes = 450077 Number of nodes in T is 1877 Number of nodes in R is 199 Nodenum: 450079 Running with N = 64 SatCount R = 1.48214e+79 Calc = 1.48214e+79 Nodes = 842100 Number of nodes in T is 2409 Number of nodes in R is 255 Nodenum: 345916 Running with N = 80 SatCount R = 3.41758e+98 Calc = 3.41758e+98 Nodes = 1520173 Number of nodes in T is 3017 Number of nodes in R is 319 Nodenum: 47687 buddy-2.4/examples/money/0000777000076500001440000000000010100060520011161 5buddy-2.4/examples/money/Makefile.am0000644000076500001440000000015510074626235013157 include ../Makefile.def EXTRA_DIST = \ runtest \ expected check_PROGRAMS = money money_SOURCES = money.cxx buddy-2.4/examples/money/Makefile.in0000644000076500001440000003202410100042070013143 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(money_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = money$(EXEEXT) subdir = examples/money ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_money_OBJECTS = money.$(OBJEXT) money_OBJECTS = $(am_money_OBJECTS) money_LDADD = $(LDADD) money_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/money.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(money_SOURCES) DIST_SOURCES = $(money_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ runtest \ expected money_SOURCES = money.cxx all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/money/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/money/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done money$(EXEEXT): $(money_OBJECTS) $(money_DEPENDENCIES) @rm -f money$(EXEEXT) $(CXXLINK) $(money_LDFLAGS) $(money_OBJECTS) $(money_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/money.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/money/money.cxx0000664000076500001440000000446110067023345012777 #include "bvec.h" /* Find a solution to the send-more-money example * The problem is to assign values for the digits s,e,n,d,m,o,r,y * in such a way that the following equation is true: * * s e n d + * m o r e = * m o n e y * * with the additional constraints that all digits must have different values * and s>0 and m>0. */ int main(void) { using namespace std ; // Allocate 11 domains with room for up to 3*10 static int dom[11] = {30,30,30,30,30,30,30,30,30,30,30}; bdd_init(10000,10000); fdd_extdomain(dom,11); // Assign binary vectors (expressions) to the digits bvec s = bvec_varfdd(0); // The 's' digit bvec e = bvec_varfdd(1); // The 'e' digit bvec n = bvec_varfdd(2); // ... bvec d = bvec_varfdd(3); bvec m = bvec_varfdd(4); bvec o = bvec_varfdd(5); bvec r = bvec_varfdd(6); bvec y = bvec_varfdd(7); bvec m1 = bvec_varfdd(8); // Carry out 1 bvec m2 = bvec_varfdd(9); // Carry out 2 bvec m3 = bvec_varfdd(10); // Carry out 3 // Create a few constants of the right bit number (5) bvec c10 = bvec_con(5,10); bvec c2 = bvec_con(5,2); bvec c0 = bvec_con(5,0); // Create constraints // Constraint 1: addition of the last digits and constraints on // the max. value of the involved variables and carry-out bdd t1 = (d + e == y + m1*10) & d c0 & s > c0); // Make sure all digits are different bdd t6 = (s!=e & s!=n & s!=d & s!=m & s!=o & s!=r & s!=y); bdd t7 = (e!=n & e!=d & e!=m & e!=o & e!=r & e!=y); bdd t8 = (n!=d & n!=m & n!=o & n!=r & n!=y); bdd t9 = (d!=m & d!=o & d!=r & d!=y); bdd t10 = (m!=o & m!=r & m!=y); bdd t11 = (o!=r & o!=y); bdd t12 = (r!=y); // Join all constraints bdd t = t1 & t2 & t3 & t4 & t5 & t6 & t7 & t8 & t9 & t10 & t11 & t12; // Print result cout << fddset << t << endl; return 0; } buddy-2.4/examples/money/runtest0000755000076500001440000000010310071326107012536 #!/bin/tcsh -f ./money | egrep -v '^Garbage collection' >> result buddy-2.4/examples/money/expected0000644000076500001440000000007110071325454012640 <0:9, 1:5, 2:6, 3:7, 4:1, 5:0, 6:8, 7:2, 8:1, 9:1, 10:0> buddy-2.4/examples/queen/0000777000076500001440000000000010100060521011150 5buddy-2.4/examples/queen/Makefile.am0000644000076500001440000000015510074626245013146 include ../Makefile.def EXTRA_DIST = \ runtest \ expected check_PROGRAMS = queen queen_SOURCES = queen.cxx buddy-2.4/examples/queen/Makefile.in0000644000076500001440000003202410100042070013131 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(queen_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = queen$(EXEEXT) subdir = examples/queen ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_queen_OBJECTS = queen.$(OBJEXT) queen_OBJECTS = $(am_queen_OBJECTS) queen_LDADD = $(LDADD) queen_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/queen.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(queen_SOURCES) DIST_SOURCES = $(queen_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ runtest \ expected queen_SOURCES = queen.cxx all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/queen/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/queen/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done queen$(EXEEXT): $(queen_OBJECTS) $(queen_DEPENDENCIES) @rm -f queen$(EXEEXT) $(CXXLINK) $(queen_LDFLAGS) $(queen_OBJECTS) $(queen_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queen.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/queen/queen.cxx0000664000076500001440000000557410067023345012761 /************************************************************************** BDD demonstration of the N-Queen chess problem. ----------------------------------------------- The BDD variables correspond to a NxN chess board like: 0 N 2N .. N*N-N 1 N+1 2N+1 .. N*N-N+1 2 N+2 2N+2 .. N*N-N+2 .. .. .. .. .. N-1 2N-1 3N-1 .. N*N-1 So for example a 4x4 is: 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 One solution is then that 2,4,11,13 should be true, meaning a queen should be placed there: . X . . . . . X X . . . . . X . **************************************************************************/ #include #include "bdd.h" int N; /* Size of the chess board */ bdd **X; /* BDD variable array */ bdd queen; /* N-queen problem express as a BDD */ /* Build the requirements for all other fields than (i,j) assuming that (i,j) has a queen */ void build(int i, int j) { bdd a=bddtrue, b=bddtrue, c=bddtrue, d=bddtrue; int k,l; /* No one in the same column */ for (l=0 ; l> !X[i][l]; /* No one in the same row */ for (k=0 ; k> !X[k][j]; /* No one in the same up-right diagonal */ for (k=0 ; k=0 && ll> !X[k][ll]; } /* No one in the same down-right diagonal */ for (k=0 ; k=0 && ll> !X[k][ll]; } queen &= a & b & c & d; } int main(int ac, char **av) { using namespace std ; int n,i,j; if (ac != 2) { fprintf(stderr, "USAGE: queen N\n"); return 1; } N = atoi(av[1]); if (N <= 0) { fprintf(stderr, "USAGE: queen N\n"); return 1; } /* Initialize with 100000 nodes, 10000 cache entries and NxN variables */ bdd_init(N*N*256, 10000); bdd_setvarnum(N*N); queen = bddtrue; /* Build variable array */ X = new bdd*[N]; for (n=0 ; n> result ./queen $N | egrep -v '^Garbage collection' >> result end buddy-2.4/examples/queen/expected0000644000076500001440000001545010071331057012631 Running with N = 4 Adding position 0,0 Adding position 0,1 Adding position 0,2 Adding position 0,3 Adding position 1,0 Adding position 1,1 Adding position 1,2 Adding position 1,3 Adding position 2,0 Adding position 2,1 Adding position 2,2 Adding position 2,3 Adding position 3,0 Adding position 3,1 Adding position 3,2 Adding position 3,3 There are 2 solutions one is: <0:0, 1:0, 2:1, 3:0, 4:1, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:1, 12:0, 13:1, 14:0, 15:0> Running with N = 8 Adding position 0,0 Adding position 0,1 Adding position 0,2 Adding position 0,3 Adding position 0,4 Adding position 0,5 Adding position 0,6 Adding position 0,7 Adding position 1,0 Adding position 1,1 Adding position 1,2 Adding position 1,3 Adding position 1,4 Adding position 1,5 Adding position 1,6 Adding position 1,7 Adding position 2,0 Adding position 2,1 Adding position 2,2 Adding position 2,3 Adding position 2,4 Adding position 2,5 Adding position 2,6 Adding position 2,7 Adding position 3,0 Adding position 3,1 Adding position 3,2 Adding position 3,3 Adding position 3,4 Adding position 3,5 Adding position 3,6 Adding position 3,7 Adding position 4,0 Adding position 4,1 Adding position 4,2 Adding position 4,3 Adding position 4,4 Adding position 4,5 Adding position 4,6 Adding position 4,7 Adding position 5,0 Adding position 5,1 Adding position 5,2 Adding position 5,3 Adding position 5,4 Adding position 5,5 Adding position 5,6 Adding position 5,7 Adding position 6,0 Adding position 6,1 Adding position 6,2 Adding position 6,3 Adding position 6,4 Adding position 6,5 Adding position 6,6 Adding position 6,7 Adding position 7,0 Adding position 7,1 Adding position 7,2 Adding position 7,3 Adding position 7,4 Adding position 7,5 Adding position 7,6 Adding position 7,7 There are 92 solutions one is: <0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:1, 8:0, 9:0, 10:0, 11:1, 12:0, 13:0, 14:0, 15:0, 16:1, 17:0, 18:0, 19:0, 20:0, 21:0, 22:0, 23:0, 24:0, 25:0, 26:1, 27:0, 28:0, 29:0, 30:0, 31:0, 32:0, 33:0, 34:0, 35:0, 36:0, 37:1, 38:0, 39:0, 40:0, 41:1, 42:0, 43:0, 44:0, 45:0, 46:0, 47:0, 48:0, 49:0, 50:0, 51:0, 52:0, 53:0, 54:1, 55:0, 56:0, 57:0, 58:0, 59:0, 60:1, 61:0, 62:0, 63:0> Running with N = 9 Adding position 0,0 Adding position 0,1 Adding position 0,2 Adding position 0,3 Adding position 0,4 Adding position 0,5 Adding position 0,6 Adding position 0,7 Adding position 0,8 Adding position 1,0 Adding position 1,1 Adding position 1,2 Adding position 1,3 Adding position 1,4 Adding position 1,5 Adding position 1,6 Adding position 1,7 Adding position 1,8 Adding position 2,0 Adding position 2,1 Adding position 2,2 Adding position 2,3 Adding position 2,4 Adding position 2,5 Adding position 2,6 Adding position 2,7 Adding position 2,8 Adding position 3,0 Adding position 3,1 Adding position 3,2 Adding position 3,3 Adding position 3,4 Adding position 3,5 Adding position 3,6 Adding position 3,7 Adding position 3,8 Adding position 4,0 Adding position 4,1 Adding position 4,2 Adding position 4,3 Adding position 4,4 Adding position 4,5 Adding position 4,6 Adding position 4,7 Adding position 4,8 Adding position 5,0 Adding position 5,1 Adding position 5,2 Adding position 5,3 Adding position 5,4 Adding position 5,5 Adding position 5,6 Adding position 5,7 Adding position 5,8 Adding position 6,0 Adding position 6,1 Adding position 6,2 Adding position 6,3 Adding position 6,4 Adding position 6,5 Adding position 6,6 Adding position 6,7 Adding position 6,8 Adding position 7,0 Adding position 7,1 Adding position 7,2 Adding position 7,3 Adding position 7,4 Adding position 7,5 Adding position 7,6 Adding position 7,7 Adding position 7,8 Adding position 8,0 Adding position 8,1 Adding position 8,2 Adding position 8,3 Adding position 8,4 Adding position 8,5 Adding position 8,6 Adding position 8,7 Adding position 8,8 There are 352 solutions one is: <0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:1, 9:0, 10:0, 11:0, 12:0, 13:0, 14:0, 15:1, 16:0, 17:0, 18:0, 19:0, 20:0, 21:1, 22:0, 23:0, 24:0, 25:0, 26:0, 27:0, 28:1, 29:0, 30:0, 31:0, 32:0, 33:0, 34:0, 35:0, 36:0, 37:0, 38:0, 39:0, 40:0, 41:0, 42:0, 43:1, 44:0, 45:0, 46:0, 47:0, 48:0, 49:0, 50:1, 51:0, 52:0, 53:0, 54:1, 55:0, 56:0, 57:0, 58:0, 59:0, 60:0, 61:0, 62:0, 63:0, 64:0, 65:1, 66:0, 67:0, 68:0, 69:0, 70:0, 71:0, 72:0, 73:0, 74:0, 75:0, 76:1, 77:0, 78:0, 79:0, 80:0> Running with N = 10 Adding position 0,0 Adding position 0,1 Adding position 0,2 Adding position 0,3 Adding position 0,4 Adding position 0,5 Adding position 0,6 Adding position 0,7 Adding position 0,8 Adding position 0,9 Adding position 1,0 Adding position 1,1 Adding position 1,2 Adding position 1,3 Adding position 1,4 Adding position 1,5 Adding position 1,6 Adding position 1,7 Adding position 1,8 Adding position 1,9 Adding position 2,0 Adding position 2,1 Adding position 2,2 Adding position 2,3 Adding position 2,4 Adding position 2,5 Adding position 2,6 Adding position 2,7 Adding position 2,8 Adding position 2,9 Adding position 3,0 Adding position 3,1 Adding position 3,2 Adding position 3,3 Adding position 3,4 Adding position 3,5 Adding position 3,6 Adding position 3,7 Adding position 3,8 Adding position 3,9 Adding position 4,0 Adding position 4,1 Adding position 4,2 Adding position 4,3 Adding position 4,4 Adding position 4,5 Adding position 4,6 Adding position 4,7 Adding position 4,8 Adding position 4,9 Adding position 5,0 Adding position 5,1 Adding position 5,2 Adding position 5,3 Adding position 5,4 Adding position 5,5 Adding position 5,6 Adding position 5,7 Adding position 5,8 Adding position 5,9 Adding position 6,0 Adding position 6,1 Adding position 6,2 Adding position 6,3 Adding position 6,4 Adding position 6,5 Adding position 6,6 Adding position 6,7 Adding position 6,8 Adding position 6,9 Adding position 7,0 Adding position 7,1 Adding position 7,2 Adding position 7,3 Adding position 7,4 Adding position 7,5 Adding position 7,6 Adding position 7,7 Adding position 7,8 Adding position 7,9 Adding position 8,0 Adding position 8,1 Adding position 8,2 Adding position 8,3 Adding position 8,4 Adding position 8,5 Adding position 8,6 Adding position 8,7 Adding position 8,8 Adding position 8,9 Adding position 9,0 Adding position 9,1 Adding position 9,2 Adding position 9,3 Adding position 9,4 Adding position 9,5 Adding position 9,6 Adding position 9,7 Adding position 9,8 Adding position 9,9 There are 724 solutions one is: <0:0, 1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:1, 10:0, 11:0, 12:0, 13:0, 14:0, 15:0, 16:0, 17:1, 18:0, 19:0, 20:0, 21:0, 22:0, 23:0, 24:1, 25:0, 26:0, 27:0, 28:0, 29:0, 30:0, 31:0, 32:1, 33:0, 34:0, 35:0, 36:0, 37:0, 38:0, 39:0, 40:1, 41:0, 42:0, 43:0, 44:0, 45:0, 46:0, 47:0, 48:0, 49:0, 50:0, 51:0, 52:0, 53:0, 54:0, 55:1, 56:0, 57:0, 58:0, 59:0, 60:0, 61:1, 62:0, 63:0, 64:0, 65:0, 66:0, 67:0, 68:0, 69:0, 70:0, 71:0, 72:0, 73:0, 74:0, 75:0, 76:0, 77:0, 78:1, 79:0, 80:0, 81:0, 82:0, 83:0, 84:0, 85:0, 86:1, 87:0, 88:0, 89:0, 90:0, 91:0, 92:0, 93:1, 94:0, 95:0, 96:0, 97:0, 98:0, 99:0> buddy-2.4/examples/solitare/0000777000076500001440000000000010100060522011656 5buddy-2.4/examples/solitare/Makefile.am0000644000076500001440000000015110100041003013614 include ../Makefile.def EXTRA_DIST = \ readme check_PROGRAMS = solitare solitare_SOURCES = solitare.cxx buddy-2.4/examples/solitare/Makefile.in0000644000076500001440000003211710100042071013642 # Makefile.in generated by automake 1.8.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SOURCES = $(solitare_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_triplet = @host@ DIST_COMMON = $(srcdir)/../Makefile.def $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in check_PROGRAMS = solitare$(EXEEXT) subdir = examples/solitare ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/debug.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(mkdir_p) CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = am_solitare_OBJECTS = solitare.$(OBJEXT) solitare_OBJECTS = $(am_solitare_OBJECTS) solitare_LDADD = $(LDADD) solitare_DEPENDENCIES = $(top_builddir)/src/libbdd.la DEFAULT_INCLUDES = depcomp = $(SHELL) $(top_srcdir)/tools/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/solitare.Po CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(solitare_SOURCES) DIST_SOURCES = $(solitare_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) LDADD = $(top_builddir)/src/libbdd.la EXTRA_DIST = \ readme solitare_SOURCES = solitare.cxx all: all-am .SUFFIXES: .SUFFIXES: .cxx .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../Makefile.def $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/solitare/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/solitare/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done solitare$(EXEEXT): $(solitare_OBJECTS) $(solitare_DEPENDENCIES) @rm -f solitare$(EXEEXT) $(CXXLINK) $(solitare_LDFLAGS) $(solitare_OBJECTS) $(solitare_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/solitare.Po@am__quote@ .cxx.o: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cxx.obj: @am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cxx.lo: @am__fastdepCXX_TRUE@ if $(LTCXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/.. @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: buddy-2.4/examples/solitare/solitare.cxx0000664000076500001440000001103510067023345014160 #include #include #include #include "bdd.h" float dummyStateNum; // Use to remove the number of states defined by the // next-state variables #define SIZE 33 // Size of the board #define CENTER 16 // Location of the center place bdd boardC[SIZE]; // Current state variables bdd boardN[SIZE]; // Next state variables bdd I; // Initial state bdd T; // Transition relation bdd currentvar; // All current state variables bddPair *pair; // Renaming pair // All the possible moves. Note that the numbering starts from '1' int moves[][3] = { {1,4,9}, {1,2,3}, {2,5,10}, {3,2,1}, {3,6,11}, {4,5,6}, {4,9,16}, {5,10,17}, {6,5,4}, {6,11,18}, {7,8,9}, {7,14,21}, {8,9,10}, {8,15,22}, {9,8,7}, {9,10,11}, {9,4,1}, {9,16,23}, {10,9,8}, {10,11,12}, {10,5,2}, {10,17,24}, {11,10,9}, {11,12,13}, {11,6,3}, {11,18,25}, {12,11,10}, {12,19,26}, {13,12,11}, {13,20,27}, {14,15,16}, {15,16,17}, {16,15,14}, {16,17,18}, {16,9,4}, {16,23,28}, {17,16,15}, {17,18,19}, {17,10,5}, {17,24,29}, {18,17,16}, {18,19,20}, {18,11,6}, {18,25,30}, {19,18,17}, {20,19,18}, {21,22,23}, {21,14,7}, {22,23,24}, {22,15,8}, {23,22,21}, {23,24,25}, {23,16,9}, {23,28,31}, {24,23,22}, {24,25,26}, {24,17,10}, {24,29,32}, {25,24,23}, {25,26,27}, {25,18,11}, {25,30,33}, {26,25,24}, {26,19,12}, {27,26,25}, {27,20,13}, {28,29,30}, {28,23,16}, {29,24,17}, {30,29,28}, {30,25,18}, {31,32,33}, {31,28,23}, {32,29,24}, {33,32,31}, {33,30,25}, {0,0,0} }; // Setup the variables needed for the board void make_board(void) { bdd_setvarnum(SIZE*2); for (int n=0 ; n100 D109 D<003FE00001FFFC0007FFFF001FE03FC03F800FE03F0007E07E0003F07E0003F0FE0003 F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F87E0003F07F0007F03F0007E03F800F E01FE03FC007FFFF0003FFFE00007FF0001D167E9523>111 D E /Fb 3 117 df<00007F000003FFC0000FC0F0003F0038007C003800F800F801F001F803 E003F807E003F80FC003F80F8001F01F8000003F8000003F0000003F0000007F0000007E 0000007E0000007E0000007E000000FC000000FC000000FC0000007C0000007C00000C7C 00001C7C0000383E0000703E0000E01F0003C00F800F0007C07E0001FFF000007F80001E 227EA021>99 D<0007E0000003FFE0000003FFE0000003FFC00000001FC00000001FC000 00001FC00000001F800000001F800000001F800000003F800000003F000000003F000000 003F000000007F000000007E000000007E000000007E00000000FE00000000FC0FE00000 FC3FF80000FCF07E0001FFC03F0001FF001F0001FE001F0001FC001F8003FC001F8003F8 001F8003F0001F8003F0003F8007F0003F0007E0003F0007E0003F0007E0007F000FE000 7E000FC0007E000FC000FE000FC000FC001FC000FC001F8001FC001F8001F8081F8001F8 1C3F8003F8183F0003F0183F0003F0383F0007F0307F0007E0307E0007E0707E0003E0E0 7E0003E1C0FE0001E380FC0000FF003800003C0026357DB32C>104 D<000380000FC0000FC0000FC0001FC0001FC0001F80001F80003F80003F80003F00003F 00007F00007F00007E007FFFFE7FFFFEFFFFFE00FC0000FC0001FC0001FC0001F80001F8 0003F80003F80003F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0 081FC01C1FC0181F80181F80381F80701F80601F00E01F01C00F83800F870007FE0001F8 0017307FAE1C>116 D E /Fc 3 96 df<7FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FF FFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF807FFFFFFFFFFFFFFF80000000000000000F8000 0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 0000000000000F80000000000000000F80000000000000000F80000000000000000F8000 0000000000000F80000000000000000200412079A950>58 D<00000001C0000000000000 0003E00000000000000003E00000000000000007F00000000000000007F0000000000000 000FF8000000000000000FF8000000000000000FF8000000000000001FFC000000000000 001F7C000000000000003F7E000000000000003E3E000000000000007E3F000000000000 007C1F000000000000007C1F00000000000000FC1F80000000000000F80F800000000000 01F80FC0000000000001F007C0000000000003F007E0000000000003E003E00000000000 03E003E0000000000007E003F0000000000007C001F000000000000FC001F80000000000 0F8000F800000000001F8000FC00000000001F00007C00000000001F00007C0000000000 3F00007E00000000003E00003E00000000007E00003F00000000007C00001F0000000000 FC00001F8000000000F800000F8000000000F800000F8000000001F800000FC000000001 F0000007C000000003F0000007E000000003E0000003E000000007E0000003F000000007 C0000001F000000007C0000001F00000000FC0000001F80000000F80000000F80000001F 80000000FC0000001F000000007C0000003F000000007E0000003E000000003E0000003E 000000003E0000007E000000003F0000007C000000001F000000FC000000001F800000F8 000000000F800001F8000000000FC00001F00000000007C00001F00000000007C00003F0 0000000007E00003E00000000003E00007E00000000003F00007C00000000001F0000FC0 0000000001F8000F800000000000F8000F800000000000F8001F800000000000FC001F00 00000000007C003F0000000000007E003E0000000000003E007E0000000000003F007C00 00000000001F007C0000000000001F00FC0000000000001F80F80000000000000F80F800 00000000000F80700000000000000700414B79C750>94 D<700000000000000700F80000 000000000F80F80000000000000F80FC0000000000001F807C0000000000001F007C0000 000000001F007E0000000000003F003E0000000000003E003F0000000000007E001F0000 000000007C001F800000000000FC000F800000000000F8000F800000000000F8000FC000 00000001F80007C00000000001F00007E00000000003F00003E00000000003E00003F000 00000007E00001F00000000007C00001F00000000007C00001F8000000000FC00000F800 0000000F800000FC000000001F8000007C000000001F0000007E000000003F0000003E00 0000003E0000003E000000003E0000003F000000007E0000001F000000007C0000001F80 000000FC0000000F80000000F80000000FC0000001F800000007C0000001F000000007C0 000001F000000007E0000003F000000003E0000003E000000003F0000007E000000001F0 000007C000000001F800000FC000000000F800000F8000000000F800000F8000000000FC 00001F80000000007C00001F00000000007E00003F00000000003E00003E00000000003F 00007E00000000001F00007C00000000001F00007C00000000001F8000FC00000000000F 8000F800000000000FC001F8000000000007C001F0000000000007E003F0000000000003 E003E0000000000003E003E0000000000003F007E0000000000001F007C0000000000001 F80FC0000000000000F80F80000000000000FC1F800000000000007C1F00000000000000 7C1F000000000000007E3F000000000000003E3E000000000000003F7E00000000000000 1F7C000000000000001FFC000000000000000FF8000000000000000FF800000000000000 0FF80000000000000007F00000000000000007F00000000000000003E000000000000000 03E00000000000000001C000000000414B79C750>I E /Fd 1 49 df<01E003F003F003F003F007E007E007C00FC00FC00F800F801F001F001E001E003E00 3C003C007800780078007000F000E00060000C1A7E9B12>48 D E /Fe 1 62 df<7FFFFFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFF FFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC07FFFFFFFFFFFFFFFFFFFFF80000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000007FFFFFFFFFFF FFFFFFFFFF80FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFF FFFFFFFFFFC07FFFFFFFFFFFFFFFFFFFFF805A1F7AB267>61 D E /Ff 1 95 df<000000000380000000000000000007C000000000000000000FE000000000 000000000FE000000000000000000FE000000000000000001FF000000000000000001FF0 00000000000000003FF800000000000000003FF800000000000000007FFC000000000000 00007EFC00000000000000007EFC0000000000000000FEFE0000000000000000FC7E0000 000000000001FC7F0000000000000001F83F0000000000000003F83F8000000000000003 F01F8000000000000007F01FC000000000000007E00FC000000000000007E00FC0000000 0000000FE00FE00000000000000FC007E00000000000001FC007F00000000000001F8003 F00000000000003F8003F80000000000003F0001F80000000000003F0001F80000000000 007F0001FC0000000000007E0000FC000000000000FE0000FE000000000000FC00007E00 0000000001FC00007F000000000001F800003F000000000003F800003F800000000003F0 00001F800000000003F000001F800000000007F000001FC00000000007E000000FC00000 00000FE000000FE0000000000FC0000007E0000000001FC0000007F0000000001F800000 03F0000000003F80000003F8000000003F00000001F8000000003F00000001F800000000 7F00000001FC000000007E00000000FC00000000FE00000000FE00000000FC000000007E 00000001FC000000007F00000001F8000000003F00000001F8000000003F00000003F800 0000003F80000003F0000000001F80000007F0000000001FC0000007E0000000000FC000 000FE0000000000FE000000FC00000000007E000001FC00000000007F000001F80000000 0003F000001F800000000003F000003F800000000003F800003F000000000001F800007F 000000000001FC00007E000000000000FC0000FE000000000000FE0000FC000000000000 7E0001FC0000000000007F0001F80000000000003F0001F80000000000003F0003F80000 000000003F8003F00000000000001F8007F00000000000001FC007E00000000000000FC0 0FE00000000000000FE00FC000000000000007E00FC000000000000007E01FC000000000 000007F01F8000000000000003F03F8000000000000003F83F0000000000000001F87F00 00000000000001FC7E0000000000000000FCFE0000000000000000FEFC00000000000000 007EFC00000000000000007EF800000000000000003E7800000000000000001C4F5978D5 60>94 D E /Fg 8 58 df<00000FE00000003FF8000000F03E000003C01F000007800F80 000F000F80001E0007C0001C0007C000380007C00078C007E00070E007E000F06007E000 E06007E001E06007E001C06007E001C0E00FE003C0C00FC00380C00FC00381C00FC00381 801FC00383801F800387003F80038E003F0001FC007E0000F000FC00000001F800000003 F000000007E00000000FC00000001F000000007E00000000F800000003E00000000FC000 00001F000000003E000000007800000001F000038003E000038003C00007800780000700 0F00000F001E00000F001C00001E003F00003E003FF8007C007DFF80F800781FFFF800F0 0FFFF000E003FFE000E001FF8000E0007E000023347AB127>50 D<000007F00000003FFC 000000F81E000003E00F000007800780000F0007C0001E0003C0003C0003C000380003E0 00798003E00071C003E00070C007E000F0C007C000E0C007C000E0C007C000E1C00FC000 E3800F80007F001F80003C001F000000003E000000007C00000000F800000001F0000000 1FE0000007FF80000007FE00000003FF0000000007C000000003E000000003E000000001 F000000001F000000001F000000001F000000001F000000003F000180003F0007E0003F0 007E0003F0007E0007F000FC0007E000F80007E000E0000FC000E0000FC000F0001F8000 70003F000070007E00007800FC00003C01F000001E07E0000007FF80000001FC00000023 3479B127>I<0000000E0000001F0000001F0000003F0000003E0000003E0000003E0000 007E0000007C0000007C000000FC000000F8000000F8000001F8000001F0000001F00000 03E0000003E0000003E0000007C0000007C000000F8000000F8000001F0000001F000000 3E0000003E0000007C00000078000000F8000000F0000001F0000003E0E00003C1F00007 81F0000F83F0000F03E0001E03E0003C03E0007C07E000F807C001F007C003E007C007C0 0FC00F800F801FFC0F803FFFCF807FFFFF82F003FFFF60003FFF00001FF800003F000000 3E0000003E0000003E0000007E0000007C0000007C0000007C000000FC000000F8000000 F8000000F8000000F8000000600020417DB127>I<00060000C0000FC00FC0000FFFFF80 000FFFFF00000FFFFC00001FFFF000001FFFC000001CFE0000001C000000003C00000000 3800000000380000000038000000007800000000700000000070000000007000000000F0 00000000E0FE000000E3FF800000EF03C00001FC01E00001F801F00001F000F00001E000 F80003C000F800038000F800000000F800000000F800000000F800000000F800000001F8 00000001F800000001F800000001F8003C0003F800FC0003F000FC0003F000FC0003F000 FC0007E000F80007E000E0000FC000E0000FC000E0001F8000E0003F0000F0007E000070 00FC00007801F800003E07F000001FFFC000000FFF00000003F8000000223478B127>I< 000001F80000000FFE0000003FFF000000FE0F000001F807800003E00F800007C01F8000 0F803F80001F003F00003E003F00007C000E0000FC00000000F800000001F800000003F0 00000003F000000007E000000007E00000000FC1F800000FC7FF00000FDE0780001FB803 C0001FF003E0001FE001E0003FE001F0003FC001F0003F8001F0003F8001F0007F0001F8 007F0001F8007E0001F8007E0003F0007E0003F000FC0003F000FC0003F000FC0007F000 FC0007E000FC0007E000F80007E000F8000FC000F8000FC000F8000F8000F8001F8000F8 003F000078003E00007C007C00007C00F800003E01F000001F07E000001FFFC0000007FF 00000001F8000000213477B127>I<00E0F8003800E3FC003801EFFE007801FFFE00F003 FFFE01E003FE0E03E007F80E03C007F0060F800FC0071F800F8003FF001F0001EF001E00 001E003E00003C003C00003C007800007800780000F800F00000F000E00001F000E00001 E000000003E000000007C000000007C00000000F800000000F800000001F800000001F00 0000003F000000003E000000007E000000007E00000000FC00000000FC00000001F80000 0001F800000001F800000003F000000003F000000007F000000007E000000007E0000000 0FE00000000FC00000000FC00000001FC00000001FC00000001F800000003F800000003F 800000003F800000003F000000003F000000001C000000253476B127>I<000007E00000 003FFC0000007FFE000001F81F000003E00F800007800780000F0007C0001F0003C0001E 0003C0003C0003C0003C0003C0003C0007C0007C000780007C000780007C000F80007C00 0F00007E001E00007F003E00007F807C00003FC0F800003FE1E000001FFBC000000FFF00 000007FE00000003FF00000007FF8000001EFFC000007C7FE00000F01FF00001E00FF800 07C007F800078003F8000F0001F8001E0000F8003E0000F8003C000078007C0000780078 000078007800007800780000F800F80000F000F00000F000F80001E000780003E0007800 03C0007C000780003C001F00003E003E00001F81FC00000FFFF0000003FFC0000000FE00 0000223479B127>I<00000FC00000007FF0000000FFFC000003F07E000007C03E00000F 801F00001F001F00003E000F00007E000F8000FC000F8000FC000F8001F8000F8001F800 0F8003F0000F8003F0001F8003F0001F8007F0001F8007E0001F8007E0001F8007E0003F 0007E0003F000FC0003F000FC0007F000FC0007F0007C000FE0007C000FE0007C001FE00 07C003FE0003C003FC0003E007FC0001E00EFC0000F03DF800007FF1F800000FC1F80000 0003F000000003F000000007E000000007E000000007C00000000F800000001F80003800 1F00007E003E0000FE007E0000FE00FC0000FC01F80000F803F00000F007E00000781F80 00007FFF0000001FFC00000007E0000000213478B127>I E /Fh 7 104 df<00000007F00000000000003FFE000000000000FFFF00F000000003FC0F81FC 0000000FF007C3FC0000001FC003E7FC0000007F8001F7FC000000FF0000F7FC000001FE 0000FFFC000003FC00007FF8000007F800007FF800000FF800003FF800001FF000003FF8 00003FE000003FF000003FE000003FF000007FC000001FF00000FFC000003FF00000FF80 00003FE00001FF8000003FE00003FF8000003FE00003FF0000007FE00007FF0000007FC0 0007FF0000007FC0000FFE0000007FC0000FFE000000FFC0000FFE000000FF80001FFC00 0000FF80001FFC000000FF80001FFC000001FF80003FFC000001FF00003FF8000001FF00 003FF8000001FF00003FF8000003FF00007FF8000003FE00007FF0000003FE00007FF000 0003FE00007FF0000007FE00007FF0000007FC00007FE0000007FC0000FFE0000007FC00 00FFE000000FFC0000FFE000000FF80070FFE000000FF800F0FFC000000FF800F0FFC000 001FF800F07FC000001FF001F07FC000001FF001E07FC000001FF001E07FC000003FF003 E07FC000007FF003C07FC000007FE003C03FC00000FFE003C03FC00001FFE007803FC000 03FFE007801FE00007DFE00F801FE0000F9FE00F000FE0001F1FE01F0007F0003E1FE01E 0003F8007C0FE03E0003FC01F807F07C0000FE07E003F0F800007FFFC001FFF000001FFF 0000FFE0000003F800001F80003C4071BE48>97 D<000007E0000000000FFFF000000001 FFFFF000000003FFFFE000000003FFFFE000000001FFFFE00000000001FFE00000000000 FFC000000000007FC00000000000FFC00000000000FFC00000000000FF800000000000FF 800000000000FF800000000001FF800000000001FF000000000001FF000000000001FF00 0000000003FF000000000003FE000000000003FE000000000003FE000000000007FE0000 00000007FC000000000007FC000000000007FC00000000000FFC00000000000FF8000000 00000FF800000000000FF800000000001FF800000000001FF000000000001FF000000000 001FF000000000003FF000000000003FE000000000003FE000000000003FE00FF0000000 7FE03FFE0000007FC0FFFF0000007FC3F01FC000007FC7C00FE00000FFDF8007F00000FF BE0007F80000FFFC0003F80000FFF80003FC0001FFF00001FE0001FFE00001FE0001FFC0 0001FE0001FFC00001FF0003FF800000FF0003FF000000FF0003FE000000FF8003FE0000 00FF8007FE000001FF8007FC000001FF8007FC000001FF8007FC000001FF800FFC000001 FF800FF8000001FF800FF8000001FF800FF8000003FF801FF8000003FF801FF0000003FF 801FF0000003FF801FF0000007FF803FF0000007FF003FE0000007FF003FE0000007FF00 3FE000000FFF007FE000000FFE007FC000000FFE007FC000000FFE007FC000001FFE007F C000001FFC007F8000001FFC00FF8000001FF800FF8000003FF800FF8000003FF800FF80 00003FF000FF8000007FF000FF0000007FE000FF000000FFC0007F000000FFC0007F0000 00FF80007F000001FF80007F000001FF00007F000003FE00007F800007FC00003F800007 F800003F80000FF800001F80001FF000001FC0003FE000000FC0003F8000000FE000FF00 000007E001FE00000003F003FC00000001FC0FF000000000FFFFC0000000003FFF000000 000007F800000000316570E341>I<00000001FF00000000001FFFE0000000007FFFF800 000001FF01FE00000007F8003F0000001FE0001F8000003FC0000F800000FF800007C000 01FE000003C00003FC00000FC00007FC00003FC0000FF800007FC0001FF00000FFC0003F E00001FFC0007FE00001FFC000FFC00001FFC000FF800001FFC001FF800001FF8003FF00 0000FF0003FF0000007C0007FF000000000007FE00000000000FFE00000000000FFC0000 0000001FFC00000000001FFC00000000003FF800000000003FF800000000003FF8000000 00007FF800000000007FF000000000007FF000000000007FF00000000000FFF000000000 00FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFC00000000000 FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FF C00000000000FF800000000000FF800000000300FF800000000380FFC000000007C07FC0 0000000F807FC00000001F007FC00000003F003FC00000007E003FE0000000FC001FE000 0001F8000FE0000007E0000FF000000FC00007F800003F800003FC0000FE000001FE0007 F80000007F807FE00000003FFFFF800000000FFFFC0000000000FFC0000000324070BE41 >I<000000000000003F000000000000007FFF8000000000000FFFFF8000000000001FFF FF0000000000001FFFFF0000000000000FFFFF000000000000000FFF0000000000000007 FE0000000000000003FE0000000000000007FE0000000000000007FE0000000000000007 FC0000000000000007FC000000000000000FFC000000000000000FFC000000000000000F F8000000000000000FF8000000000000001FF8000000000000001FF8000000000000001F F0000000000000001FF0000000000000003FF0000000000000003FF0000000000000003F E0000000000000003FE0000000000000007FE0000000000000007FE0000000000000007F C0000000000000007FC000000000000000FFC000000000000000FFC000000000000000FF 8000000000000000FF8000000000000001FF8000000000000001FF8000000000000001FF 0000000000000001FF000000000007F003FF00000000003FFE03FF0000000000FFFF03FE 0000000003FC0F83FE000000000FF007C7FE000000001FC003E7FE000000007F8001F7FC 00000000FF0000F7FC00000001FE0000FFFC00000003FC00007FFC00000007F800007FF8 0000000FF800003FF80000001FF000003FF80000003FE000003FF80000003FE000003FF0 0000007FC000001FF0000000FFC000003FF0000000FF8000003FF0000001FF8000003FE0 000003FF8000003FE0000003FF0000007FE0000007FF0000007FE0000007FF0000007FC0 00000FFE0000007FC000000FFE000000FFC000000FFE000000FFC000001FFC000000FF80 00001FFC000000FF8000001FFC000001FF8000003FFC000001FF8000003FF8000001FF00 00003FF8000001FF0000003FF8000003FF0000007FF8000003FF0000007FF0000003FE00 00007FF0000003FE0000007FF0000007FE0000007FF0000007FE0000007FE0000007FC00 0000FFE0000007FC000000FFE000000FFC000000FFE000000FFC007000FFE000000FF800 F000FFC000000FF800F000FFC000001FF800F0007FC000001FF801F0007FC000001FF001 E0007FC000001FF001E0007FC000003FF003E0007FC000007FF003C0007FC000007FE003 C0003FC00000FFE003C0003FC00001FFE00780003FC00003FFE00780001FE00007DFE00F 80001FE0000F9FE00F00000FE0001F1FE01F000007F0003E1FE01E000003F8007C0FE03E 000003FC01F807F07C000000FE07E003F0F80000007FFFC001FFF00000001FFF0000FFE0 00000003F800001F800000416571E348>I<00000003FF00000000001FFFC000000000FF FFF000000003FE01FC0000000FF8007E0000003FE0003F0000007F80001F000001FF0000 1F800003FE00000F800007FC00000F80000FF800000F80001FF000000F80003FE000000F 80007FE000000F8000FFC000000F8000FF8000000F8001FF8000001F8003FF0000001F00 03FF0000003F0007FF0000003E000FFE0000007E000FFE000000FC001FFC000003F8001F FC00000FF0001FFC00003FC0003FFC0003FF00003FF801FFFC00003FFFFFFFE000003FFF FFFE0000007FFFFF000000007FF000000000007FF000000000007FF000000000007FF000 00000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000 000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000000 00007FC000000000007FC000000000007FC000000003007FC000000003807FC000000007 C03FC00000000F803FC00000001F003FE00000003F001FE00000007E001FE0000000FC00 0FF0000001F8000FF0000007E00007F800000FC00003F800003F800001FC0000FE000000 FE0007F80000007F807FE00000001FFFFF8000000007FFFC0000000000FFC00000003240 70BE41>I<0000000000000FE0000000000000003FFC00000000000000FFFF0000000000 0001F81F80000000000007F007C000000000000FE00FC000000000001FE03FE000000000 001FC07FE000000000003FC0FFE000000000003F80FFE000000000007F80FFE000000000 007F81FFC00000000000FF81FFC00000000000FF00FF800000000001FF00FF0000000000 01FF003C000000000001FF0000000000000001FE0000000000000003FE00000000000000 03FE0000000000000003FE0000000000000007FE0000000000000007FC00000000000000 07FC0000000000000007FC0000000000000007FC000000000000000FFC00000000000000 0FF8000000000000000FF8000000000000000FF8000000000000000FF800000000000000 1FF8000000000000001FF0000000000000001FF0000000000000001FF000000000000000 1FF0000000000000003FF0000000000000003FE0000000000000003FE0000000000003FF FFFFFF8000000007FFFFFFFFC000000007FFFFFFFFC000000007FFFFFFFF800000000000 7FC0000000000000007FC0000000000000007FC0000000000000007FC000000000000000 FFC000000000000000FF8000000000000000FF8000000000000000FF8000000000000000 FF8000000000000001FF8000000000000001FF0000000000000001FF0000000000000001 FF0000000000000001FF0000000000000003FF0000000000000003FE0000000000000003 FE0000000000000003FE0000000000000003FE0000000000000007FE0000000000000007 FC0000000000000007FC0000000000000007FC0000000000000007FC000000000000000F FC000000000000000FF8000000000000000FF8000000000000000FF8000000000000000F F8000000000000001FF8000000000000001FF0000000000000001FF0000000000000001F F0000000000000001FF0000000000000003FF0000000000000003FE0000000000000003F E0000000000000003FE0000000000000003FE0000000000000007FE0000000000000007F C0000000000000007FC0000000000000007FC0000000000000007FC000000000000000FF C000000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF 8000000000000001FF8000000000000001FF0000000000000001FF0000000000000001FF 0000000000000001FF0000000000000003FF0000000000000003FE0000000000000003FE 0000000000000003FE0000000000000003FE0000000000000007FC0000000000000007FC 0000000000000007FC0000000000000007F8000000000000000FF8000000000000000FF8 000000000000000FF8000000000000000FF0000000000000000FF0000000000000001FF0 000000000000001FE0000000000000001FE0000000000007801FC000000000001FE03FC0 00000000003FE03FC000000000007FF03F8000000000007FF03F800000000000FFE07F00 0000000000FFE07F000000000000FFE07E000000000000FFC0FC000000000000FF80FC00 00000000007E01F80000000000007C03F00000000000003F07E00000000000001FFFC000 000000000007FF0000000000000001FC00000000000000438283E42B>I<000000000FE0 0000000000007FFC000000000003FFFE01E000000007F81F03F80000001FE00F87F80000 007F8007CFF8000000FF0003EFF8000001FE0001EFF8000003FC0000FFF8000007F80000 FFF800000FF00000FFF000001FF000007FF000003FE000007FF000007FC000007FF00000 7FC000007FE00000FF8000003FE00001FF8000007FE00001FF0000007FE00003FF000000 7FC00007FF0000007FC00007FE000000FFC0000FFE000000FFC0000FFC000000FF80001F FC000000FF80001FFC000001FF80001FFC000001FF80003FF8000001FF00003FF8000001 FF00003FF8000003FF00007FF8000003FF00007FF0000003FE00007FF0000003FE00007F F0000007FE0000FFF0000007FE0000FFE0000007FC0000FFE0000007FC0000FFE000000F FC0000FFE000000FFC0000FFC000000FF80000FFC000000FF80000FFC000001FF80000FF C000001FF80000FFC000001FF00000FF8000001FF00000FF8000003FF00000FF8000003F F00000FF8000003FE00000FF8000007FE00000FF8000007FE000007F800000FFE000007F 800001FFC000007F800003FFC000003FC00003FFC000003FC00007FFC000001FC0000FFF 8000001FE0001FFF8000000FE0003FFF80000007F000F9FF80000003F801F1FF00000001 FC0FE1FF00000000FFFF83FF000000003FFE03FF0000000007F003FE00000000000003FE 00000000000007FE00000000000007FE00000000000007FC00000000000007FC00000000 00000FFC0000000000000FFC0000000000000FF80000000000000FF80000000000001FF8 0000000000001FF00000000000001FF00000000000003FF00000000000003FE000000F80 00007FE000001FC000007FC000007FE00000FFC000007FE00000FF800000FFE00001FF00 0000FFE00003FE000000FFE00007FC000000FFE0000FF8000000FFC0001FF0000000FF80 003FC00000007E0000FF800000003FC007FE000000001FFFFFF80000000007FFFFC00000 0000007FFE00000000003D5C78BE41>I E /Fi 4 50 df<0F001F801F803FC03FC03FC0 1F80018001800300030006000E000C0018007000E000C0000A1272A715>39 D<0F001F803F803F803F803F801F80018003000300070006000C00180038007000E00080 0009127A8615>44 D<0001FC000007FF00001E0F80003C03C0007003C000F001C001E001 E003C001E003C001E0078001E0078001E00F8003E00F0003E01F0003E01F0003E01F0003 E03E0007C03E0007C03E0007C03E0007C07C000F807C000F807C000F807C000F8078001F 00F8001F00F8001E00F8003E00F8003E00F8003C00F0007C00F00078007000F0007800E0 007801E0003C03C0003E0F00000FFE000003F000001B2778A523>48 D<0000180000380000780000F80001F80003F0000FF001FFF001F3F00003E00003E00007 E00007E00007C00007C0000FC0000FC0000F80000F80001F80001F80001F00001F00003F 00003F00003E00003E00007E00007E00007C00007C0000FC0000FC0000F80000F80001F8 00FFFFF0FFFFF0152678A523>I E /Fj 5 118 df98 D100 D105 D108 D 117 D E /Fk 3 52 df<00600001E0000FE000FFE000F1E00001E00001E00001E00001E0 0001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0 0001E00001E00001E00001E00001E0007FFF807FFF80111C7B9B1C>49 D<03FC000FFF003C0FC07003E07801F0FC00F0FC00F8FC00F8FC00787800780000F80000 F00000F00001E00003C0000780000F00001C0000380000E00001C0180380180600180C00 383FFFF07FFFF0FFFFF0FFFFF0151C7D9B1C>I<01FC000FFF801E07C03001E07C01F07C 00F07E00F07C01F03801E00003E00007C0001F8003FE0003FC000007800003C00001E000 00F00000F83000F87800F8FC00F8FC00F8FC00F07801F07003E03C07C00FFF0003FC0015 1D7D9B1C>I E /Fl 2 121 df<387CFEFFFF7F3B0303030606060C1838702008127A8614 >59 D<007C03C001FF0FF007079C300E03B0780C03F0F81803E1F83003E1F83003E1F060 07C0E06007C0000007C0000007C000000F8000000F8000000F8000000F8000001F000000 1F0030381F00307C1F0060FC3E0060FC3E00C0F87E00C0F06F038070C707003F83FE001F 01F8001D1B7D9926>120 D E /Fm 3 96 df<0000700001C000000000700001C0000000 00F00001E000000000E00000E000000001E00000F000000003C000007800000003800000 38000000078000003C0000000F0000001E0000001FFFFFFFFF0000003FFFFFFFFF800000 7FFFFFFFFFC00000F000000001E00003E000000000F8000FC0000000007E003F00000000 001F80FC000000000007E0FC000000000007E03F00000000001F800F80000000003E0003 C000000000780001F000000001F00000F800000003E000007FFFFFFFFFC000003FFFFFFF FF8000001FFFFFFFFF0000000F0000001E000000078000003C0000000380000038000000 03C000007800000001E00000F000000000E00000E000000000F00001E000000000700001 C000000000700001C000003B237D9F42>44 D<00E001F003F803F803F807F007F007F007 E007E00FE00FC00FC00FC01F801F801F001F003F003E003E003E007C007C007C007800F8 00F800F00010000D1E7D9F13>48 D95 D E /Fn 46 122 df<00000000FFFC0000000000001FFFFF800000000001FFFFFFE00000000007FFFF FFF0000000001FFFC00FF8000000007FFE0003FC00000000FFF00000FE00000001FFE000 03FF00000003FF800007FF00000007FF00000FFF8000000FFE00001FFF8000000FFE0000 1FFF8000001FFC00001FFF8000001FFC00003FFFC000003FFC00001FFF8000003FF80000 1FFF8000003FF800001FFF8000003FF800001FFF8000003FF800000FFF0000003FF80000 07FE0000003FF8000001F80000003FF8000000000000003FF8000000000000003FF80000 00000000003FF8000000000000003FF8000000000000003FF8000000000000003FF80000 00000000003FF8000000000000003FF8000000000000003FF80003FFFFC000FFFFFFFFFF FFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFC000FFFFFFFFFF FFFFC000003FFC000007FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0000 03FFC000003FFC000003FFC000003FFC000003FFC000003FFC000003FFC0003FFFFFFC03 FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03FFFFFFC03 FFFFFFC042547DD34B>12 D<07F0001FF8003FFC007FFE007FFF00FFFF00FFFF80FFFF80 FFFF80FFFFC0FFFFC0FFFFC07FFFC07FFFC03FFFC01FFFC007F3C00003C00003C00007C0 000780000780000780000F80000F00000F00001F00001E00003E00003C00007C0000F800 00F80001F00003E00007C0000F80001F00001E00000C00001228769025>44 DI<07F0000FF8001FFC00 3FFE007FFF00FFFF80FFFF80FFFF80FFFF80FFFF80FFFF80FFFF807FFF003FFE001FFC00 0FF80007F0001111769025>I<000000780000000000FC0000000003FC0000000007FC00 0000001FFC00000000FFFC0000000FFFFC000007FFFFFC0000FFFFFFFC0000FFFFFFFC00 00FFFF7FFC0000FFF07FFC0000F8007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC000000007FFC000000007FFC000000007FFC00 0000007FFC000000007FFC000000007FFC00007FFFFFFFFFFE7FFFFFFFFFFE7FFFFFFFFF FE7FFFFFFFFFFE7FFFFFFFFFFE2F4E76CD43>49 D<00003FFE0000000003FFFFE0000000 0FFFFFFC0000003FFFFFFF000000FFFFFFFFC00001FFC07FFFE00003FE000FFFF80007F8 0003FFFC000FE00001FFFE001FC00000FFFF003F8000007FFF003FF000007FFF807FF800 003FFFC07FFC00003FFFC0FFFE00001FFFE0FFFF00001FFFE0FFFF00001FFFE0FFFF0000 0FFFF0FFFF00000FFFF0FFFF00000FFFF0FFFF00000FFFF0FFFF00000FFFF07FFE00000F FFF07FFE00000FFFF03FFC00000FFFF00FF000000FFFF003C000000FFFF0000000000FFF E0000000001FFFE0000000001FFFE0000000001FFFC0000000003FFFC0000000003FFF80 000000003FFF80000000007FFF00000000007FFE0000000000FFFC0000000001FFF80000 000001FFF00000000003FFE00000000003FFC00000000007FF80000000000FFF00000000 001FFE00000000001FFC00000000003FF800000000007FE00000000000FFC00000000001 FF800000000003FE000000000007FC000000000007F800000000000FF00001F000001FE0 0001F000003F800001F000007F000001F00000FE000003E00001FC000003E00003F80000 03E00007F0000003E0000FE0000003E0001F80000007E0003F00000007E0003E0000000F E0007FFFFFFFFFE000FFFFFFFFFFC001FFFFFFFFFFC003FFFFFFFFFFC007FFFFFFFFFFC0 0FFFFFFFFFFFC01FFFFFFFFFFFC03FFFFFFFFFFFC07FFFFFFFFFFFC0FFFFFFFFFFFFC0FF FFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80344E79CD43>I<0000 0FFFC000000000FFFFFC00000007FFFFFF8000001FFFFFFFE000003FF807FFF00000FF80 01FFFC0001FE00007FFE0003F800003FFF0003F000003FFF8007FC00001FFF800FFF0000 1FFFC00FFF80001FFFC01FFFC0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFC0001F FFE01FFFE0001FFFE01FFFC0001FFFE01FFFC0001FFFE01FFFC0001FFFE00FFFC0001FFF C007FF80001FFFC003FF00003FFFC001FC00003FFF80000000003FFF80000000007FFF00 000000007FFE00000000007FFE0000000000FFFC0000000001FFF80000000003FFF00000 000007FFC0000000000FFF8000000000FFFE00000000FFFFF800000000FFFFE000000000 FFFFFC00000000FFFFFF800000000007FFE00000000001FFF800000000007FFE00000000 003FFF00000000001FFF80000000000FFFC0000000000FFFE00000000007FFF000000000 07FFF00000000007FFF80000000007FFF80000000003FFFC0000000003FFFC0000000003 FFFE0000000003FFFE03E0000003FFFE0FF8000003FFFE1FFC000003FFFE3FFE000003FF FE7FFF000003FFFEFFFF800003FFFEFFFF800003FFFEFFFF800003FFFEFFFF800003FFFC FFFF800003FFFCFFFF800007FFFCFFFF800007FFF8FFFF000007FFF87FFF000007FFF07F FE00000FFFF03FFC00000FFFE03FF000001FFFC01FE000003FFF800FF800007FFF0007FF 0000FFFE0003FFF007FFFC0000FFFFFFFFF000007FFFFFFFE000001FFFFFFF80000003FF FFFC000000001FFF800000374F7ACD43>I<00000000007C00000000000000FE00000000 000000FE00000000000001FE00000000000003FE00000000000007FE0000000000000FFE 0000000000000FFE0000000000001FFE0000000000003FFE0000000000007FFE00000000 00007FFE000000000000FFFE000000000001FFFE000000000003FFFE000000000003FFFE 000000000007FFFE00000000000FFFFE00000000001FBFFE00000000003F3FFE00000000 003E3FFE00000000007C3FFE0000000000FC3FFE0000000001F83FFE0000000001F03FFE 0000000003E03FFE0000000007E03FFE000000000FC03FFE000000000F803FFE00000000 1F003FFE000000003F003FFE000000007E003FFE000000007C003FFE00000000F8003FFE 00000001F8003FFE00000003F0003FFE00000007E0003FFE00000007C0003FFE0000000F 80003FFE0000001F80003FFE0000003F00003FFE0000003E00003FFE0000007C00003FFE 000000FC00003FFE000001F800003FFE000001F000003FFE000003E000003FFE000007E0 00003FFE00000FC000003FFE00001F8000003FFE00001F0000003FFE00003E0000003FFE 00007E0000003FFE0000FC0000003FFE0000FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFF FFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0000000007FFE0000000000007FFE 0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE00000000 00007FFE0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE 0000000000007FFE0000000000007FFE0000000000007FFE0000000000007FFE00000000 0FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFFFFC000000FFFFFFF FFC03A4F7CCE43>I<03800000000E0007E00000007E0007FE000003FE0007FFF0007FFE 0007FFFFFFFFFC0007FFFFFFFFF80007FFFFFFFFF00007FFFFFFFFE00007FFFFFFFFC000 07FFFFFFFF800007FFFFFFFF000007FFFFFFFE000007FFFFFFFC000007FFFFFFF0000007 FFFFFFC0000007FFFFFF00000007FFFFF800000007E1FF0000000007E0000000000007E0 000000000007E0000000000007E0000000000007E0000000000007E0000000000007E000 0000000007E0000000000007E0000000000007E0000000000007E0000000000007E00FFF 00000007E07FFFF0000007E3FFFFFE000007E7FFFFFF800007FFF807FFC00007FFC001FF E00007FE0000FFF80007FC00007FFC0007F800003FFC0007F000003FFE0007E000001FFF 0003C000001FFF80000000001FFF80000000001FFFC0000000000FFFC0000000000FFFE0 000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFF0000000000FFFF000 0000000FFFF00FE000000FFFF01FF000000FFFF03FF800000FFFF07FFC00000FFFF0FFFE 00000FFFF0FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFF0FFFE00000FFFE0FFFE00 000FFFE0FFFE00000FFFE0FFFC00000FFFE07FF800001FFFC07FF000001FFFC07FE00000 1FFF803E0000003FFF803F0000003FFF001F8000007FFE001FC000007FFC000FE00000FF F80007F80001FFF00003FE0007FFE00001FFC03FFFC00000FFFFFFFF8000003FFFFFFE00 00001FFFFFF800000003FFFFC0000000007FF8000000344F79CD43>I<0000000FFF0000 000000FFFFE000000007FFFFF00000001FFFFFFC0000007FFE03FE000001FFF0007F0000 03FFC0003F800007FF00001F80000FFE00007FC0001FFC0000FFC0003FF80001FFE0007F F00003FFE000FFF00007FFE001FFE00007FFE001FFE00007FFE003FFC00007FFE007FFC0 0007FFE007FFC00007FFE00FFFC00003FFC00FFF800001FF801FFF800000FF001FFF8000 007E001FFF80000000003FFF80000000003FFF80000000003FFF00000000007FFF000000 00007FFF00000000007FFF00080000007FFF01FFF800007FFF07FFFF0000FFFF0FFFFFC0 00FFFF1FFFFFF000FFFF3F007FF800FFFF3C003FFC00FFFF78001FFE00FFFFF0000FFF00 FFFFF00007FF80FFFFE00007FFC0FFFFE00007FFC0FFFFC00007FFE0FFFFC00003FFF0FF FF800003FFF0FFFF800003FFF8FFFF800003FFF8FFFF800003FFF8FFFF800003FFF8FFFF 000003FFFCFFFF000003FFFCFFFF000003FFFC7FFF000003FFFC7FFF000003FFFC7FFF00 0003FFFC7FFF000003FFFC7FFF000003FFFC7FFF000003FFFC3FFF000003FFFC3FFF0000 03FFFC3FFF000003FFFC3FFF000003FFFC1FFF000003FFF81FFF800003FFF81FFF800003 FFF80FFF800003FFF80FFF800003FFF007FF800007FFF007FF800007FFE003FFC00007FF C001FFC00007FFC001FFE0000FFF8000FFF0000FFF00007FF8001FFE00003FFC007FFC00 001FFF01FFF800000FFFFFFFF0000003FFFFFFC0000000FFFFFF000000003FFFFC000000 0007FFC00000364F7ACD43>I<1F000000000000001F800000000000001FC00000000000 001FFF8000000000001FFFFFFFFFFFFF801FFFFFFFFFFFFF801FFFFFFFFFFFFF801FFFFF FFFFFFFF803FFFFFFFFFFFFF803FFFFFFFFFFFFF003FFFFFFFFFFFFE003FFFFFFFFFFFFC 003FFFFFFFFFFFF8003FFFFFFFFFFFF8003FFFFFFFFFFFF0003FFFFFFFFFFFE0003FFFFF FFFFFFC0007FFFFFFFFFFF80007F800000007F00007E00000000FF00007E00000001FE00 007C00000003FC00007C00000003F800007C00000007F000007C0000000FF000007C0000 001FE00000F80000003FC00000F80000007F800000F80000007F000000F8000000FE0000 0000000001FE00000000000003FC00000000000003F800000000000007F0000000000000 0FF00000000000001FE00000000000001FE00000000000003FC00000000000003FC00000 000000007F80000000000000FF80000000000000FF80000000000001FF00000000000001 FF00000000000003FF00000000000003FE00000000000007FE00000000000007FE000000 0000000FFE0000000000000FFE0000000000000FFC0000000000001FFC0000000000001F FC0000000000003FFC0000000000003FFC0000000000003FFC0000000000003FFC000000 0000007FFC0000000000007FF80000000000007FF80000000000007FF8000000000000FF F8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000 000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FF F8000000000001FFF8000000000001FFF8000000000001FFF8000000000001FFF8000000 000001FFF8000000000001FFF8000000000001FFF8000000000000FFF0000000000000FF F00000000000003FC00000000000001F8000000000395279D043>I<000007FFC0000000 007FFFFC00000003FFFFFF8000000FFFFFFFE000001FFC01FFF800003FE0003FFC00007F 80000FFE0000FF000007FF0001FE000003FF0003FC000001FF8007FC000001FFC007F800 0000FFC00FF8000000FFC00FF8000000FFE00FF80000007FE00FF80000007FE01FF80000 007FE01FFC0000007FE01FFC0000007FE01FFE0000007FE01FFF0000007FE01FFF800000 FFE01FFFE00000FFC01FFFF80000FFC01FFFFE0001FF800FFFFF0001FF800FFFFFC003FF 000FFFFFF007FE0007FFFFF807FC0007FFFFFE1FF80003FFFFFFBFF00001FFFFFFFFE000 01FFFFFFFF800000FFFFFFFE0000007FFFFFFF0000003FFFFFFF8000000FFFFFFFE00000 07FFFFFFF0000001FFFFFFFC000007FFFFFFFE00001FFFFFFFFF00003FFFFFFFFF8000FF E7FFFFFF8001FF81FFFFFFC003FF007FFFFFE007FE001FFFFFF00FFC000FFFFFF01FF800 03FFFFF01FF80000FFFFF83FF000007FFFF83FF000001FFFF87FE0000007FFFC7FE00000 01FFFC7FE0000000FFFCFFC00000007FFCFFC00000003FFCFFC00000003FFCFFC0000000 1FFCFFC00000001FFCFFC00000000FFCFFC00000000FFCFFC00000000FF8FFC00000000F F8FFE00000000FF87FE00000000FF07FF00000001FF07FF00000001FF03FF80000003FE0 1FF80000003FC01FFC0000007FC00FFE000000FF8007FF800003FF0003FFE0000FFE0001 FFFC00FFFC00007FFFFFFFF000003FFFFFFFE000000FFFFFFF80000001FFFFFC00000000 0FFFC00000364F7ACD43>I<00000000001F00000000000000000000003F800000000000 00000000007FC0000000000000000000007FC000000000000000000000FFE00000000000 0000000000FFE000000000000000000000FFE000000000000000000001FFF00000000000 0000000001FFF000000000000000000003FFF800000000000000000003FFF80000000000 0000000003FFF800000000000000000007FFFC00000000000000000007FFFC0000000000 0000000007FFFC0000000000000000000FFFFE0000000000000000000FFFFE0000000000 000000001FFFFF0000000000000000001FFFFF0000000000000000001FFFFF0000000000 000000003FFFFF8000000000000000003F7FFF8000000000000000007F7FFFC000000000 000000007E7FFFC000000000000000007E3FFFC00000000000000000FE3FFFE000000000 00000000FC1FFFE00000000000000001FC1FFFF00000000000000001F81FFFF000000000 00000001F80FFFF00000000000000003F80FFFF80000000000000003F007FFF800000000 00000007F007FFFC0000000000000007E007FFFC0000000000000007E003FFFC00000000 0000000FE003FFFE000000000000000FC001FFFE000000000000001FC001FFFF00000000 0000001F8001FFFF000000000000001F8000FFFF000000000000003F8000FFFF80000000 0000003F00007FFF800000000000007F00007FFFC00000000000007E00007FFFC0000000 0000007E00003FFFC0000000000000FE00003FFFE0000000000000FC00001FFFE0000000 000001FC00001FFFF0000000000001F800001FFFF0000000000001F800000FFFF0000000 000003F800000FFFF8000000000003F0000007FFF8000000000007F0000007FFFC000000 000007E0000007FFFC000000000007E0000003FFFC00000000000FFFFFFFFFFFFE000000 00000FFFFFFFFFFFFE00000000001FFFFFFFFFFFFF00000000001FFFFFFFFFFFFF000000 00001FFFFFFFFFFFFF00000000003F80000000FFFF80000000003F000000007FFF800000 00007F000000007FFFC0000000007F000000007FFFC0000000007E000000003FFFC00000 0000FE000000003FFFE000000000FC000000001FFFE000000001FC000000001FFFF00000 0001FC000000001FFFF000000001F8000000000FFFF000000003F8000000000FFFF80000 0003F00000000007FFF800000007F00000000007FFFC00000007F00000000007FFFC0000 0007E00000000003FFFC0000000FE00000000003FFFE0000000FC00000000003FFFE0000 001FC00000000001FFFF000000FFFC0000000001FFFF0000FFFFFFF800000FFFFFFFFFE0 FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0FFFFFFF800000FFFFFFFFFE0 FFFFFFF800000FFFFFFFFFE05B547BD366>65 DI<0000000001FFFC 000001C0000000007FFFFFC00003C000000007FFFFFFF80007C00000003FFFFFFFFE001F C0000000FFFFFFFFFF803FC0000003FFFFE003FFC07FC000000FFFFC00003FF0FFC00000 3FFFE000000FF9FFC000007FFF80000003FFFFC00001FFFE00000000FFFFC00003FFF800 0000007FFFC00007FFF0000000003FFFC0000FFFE0000000001FFFC0001FFFC000000000 0FFFC0003FFF800000000007FFC0007FFF000000000003FFC000FFFE000000000001FFC0 00FFFE000000000001FFC001FFFC000000000000FFC003FFF8000000000000FFC003FFF8 0000000000007FC007FFF00000000000007FC00FFFF00000000000003FC00FFFF0000000 0000003FC01FFFE00000000000001FC01FFFE00000000000001FC01FFFE0000000000000 1FC03FFFC00000000000001FC03FFFC00000000000000FC03FFFC00000000000000FC07F FFC00000000000000FC07FFFC00000000000000FC07FFFC000000000000000007FFF8000 000000000000007FFF800000000000000000FFFF800000000000000000FFFF8000000000 00000000FFFF800000000000000000FFFF800000000000000000FFFF8000000000000000 00FFFF800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF 800000000000000000FFFF800000000000000000FFFF800000000000000000FFFF800000 000000000000FFFF800000000000000000FFFF8000000000000000007FFF800000000000 0000007FFF8000000000000000007FFFC000000000000000007FFFC00000000000000000 7FFFC000000000000007C03FFFC000000000000007C03FFFC000000000000007C03FFFC0 00000000000007C01FFFE000000000000007C01FFFE000000000000007C01FFFE0000000 0000000FC00FFFF00000000000000F800FFFF00000000000000F8007FFF0000000000000 1F8003FFF80000000000001F8003FFF80000000000001F0001FFFC0000000000003F0000 FFFE0000000000007E0000FFFE0000000000007E00007FFF000000000000FC00003FFF80 0000000001F800001FFFC00000000003F800000FFFE00000000007F0000007FFF0000000 000FE0000003FFFC000000001FC0000001FFFE000000007F800000007FFF80000000FF00 0000003FFFE0000007FE000000000FFFFE00001FF80000000003FFFFE001FFF000000000 00FFFFFFFFFFC000000000003FFFFFFFFF00000000000007FFFFFFFC000000000000007F FFFFE00000000000000001FFFC00000000525479D261>I69 D75 D77 D<000000000FFFC00000000000000003FFFFFF000000 000000001FFFFFFFE0000000000000FFFFFFFFFC000000000003FFFC00FFFF0000000000 0FFFC0000FFFC0000000003FFF000003FFF0000000007FFC000000FFF800000001FFF000 00003FFE00000003FFE00000001FFF00000007FFC00000000FFF8000000FFF8000000007 FFC000001FFF0000000003FFE000003FFE0000000001FFF000007FFC0000000000FFF800 00FFFC0000000000FFFC0000FFF800000000007FFC0001FFF800000000007FFE0003FFF0 00000000003FFF0003FFF000000000003FFF0007FFE000000000001FFF8007FFE0000000 00001FFF800FFFE000000000001FFFC00FFFC000000000000FFFC01FFFC000000000000F FFE01FFFC000000000000FFFE01FFF80000000000007FFE03FFF80000000000007FFF03F FF80000000000007FFF03FFF80000000000007FFF07FFF80000000000007FFF87FFF8000 0000000007FFF87FFF00000000000003FFF87FFF00000000000003FFF87FFF0000000000 0003FFF8FFFF00000000000003FFFCFFFF00000000000003FFFCFFFF00000000000003FF FCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF 00000000000003FFFCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF000000 00000003FFFCFFFF00000000000003FFFCFFFF00000000000003FFFCFFFF000000000000 03FFFCFFFF00000000000003FFFCFFFF00000000000003FFFC7FFF00000000000003FFF8 7FFF00000000000003FFF87FFF80000000000007FFF87FFF80000000000007FFF87FFF80 000000000007FFF83FFF80000000000007FFF03FFF80000000000007FFF03FFF80000000 000007FFF01FFFC000000000000FFFE01FFFC000000000000FFFE01FFFC000000000000F FFE00FFFC000000000000FFFC00FFFE000000000001FFFC007FFE000000000001FFF8007 FFF000000000003FFF8003FFF00001FE00003FFF0001FFF80007FF80007FFE0001FFF800 0FFFE0007FFE0000FFFC003FFFF000FFFC00007FFC007F03F800FFF800003FFE007C00FC 01FFF000001FFF00F8007E03FFE000000FFF80F8003F07FFC0000007FFC0F0001F8FFF80 000003FFE0F0001F9FFF00000001FFF0F0000FFFFE00000000FFFCF8000FFFFC00000000 3FFFF80007FFF0000000000FFFFC000FFFC00000000003FFFF00FFFF000000000000FFFF FFFFFC0000000000001FFFFFFFFC00000C00000003FFFFFFFC00001E000000001FFFE3FE 00001E00000000000001FF00001E00000000000001FF80003E00000000000001FFC0007E 00000000000001FFE000FE00000000000001FFF807FE00000000000000FFFFFFFE000000 00000000FFFFFFFC00000000000000FFFFFFFC000000000000007FFFFFFC000000000000 007FFFFFFC000000000000007FFFFFF8000000000000007FFFFFF8000000000000003FFF FFF8000000000000003FFFFFF0000000000000001FFFFFE0000000000000001FFFFFE000 0000000000000FFFFFC00000000000000007FFFF800000000000000003FFFF0000000000 00000001FFFE0000000000000000007FF80000000000000000001FE000576A79D265>81 DI<00000FFF 800007000000FFFFF8000F000007FFFFFF001F00001FFFFFFFC03F00003FFFFFFFF07F00 00FFFC00FFF8FF0001FFE0000FFDFF0003FF800001FFFF0007FE0000007FFF000FFC0000 003FFF000FF80000000FFF001FF800000007FF001FF000000003FF003FF000000003FF00 3FE000000001FF007FE000000000FF007FE000000000FF007FE0000000007F00FFE00000 00007F00FFE0000000003F00FFE0000000003F00FFF0000000003F00FFF0000000003F00 FFF8000000001F00FFF8000000001F00FFFC000000001F00FFFE000000001F00FFFF0000 00000000FFFFC000000000007FFFF000000000007FFFFF00000000007FFFFFF800000000 3FFFFFFF800000003FFFFFFFFC0000001FFFFFFFFFC000001FFFFFFFFFF000000FFFFFFF FFFC000007FFFFFFFFFF000003FFFFFFFFFFC00001FFFFFFFFFFE00000FFFFFFFFFFF000 007FFFFFFFFFF800003FFFFFFFFFFC00000FFFFFFFFFFE000003FFFFFFFFFE000000FFFF FFFFFF0000001FFFFFFFFF80000000FFFFFFFF800000000FFFFFFFC0000000007FFFFFC0 0000000007FFFFE00000000000FFFFE000000000003FFFE000000000000FFFF000000000 0007FFF0000000000003FFF0000000000003FFF0780000000001FFF0F80000000000FFF0 F80000000000FFF0F80000000000FFF0F800000000007FF0F800000000007FF0FC000000 00007FF0FC00000000007FF0FC00000000007FE0FE00000000007FE0FE00000000007FE0 FF0000000000FFC0FF0000000000FFC0FF8000000000FFC0FFC000000001FF80FFE00000 0001FF00FFF000000003FF00FFFC00000007FE00FFFF0000000FFC00FFFFC000001FF800 FFFFF800007FF000FF1FFFC003FFE000FE0FFFFFFFFFC000FC03FFFFFFFF0000F8007FFF FFFC0000F0000FFFFFF00000E000007FFF0000003C5479D24B>I<3FFFFFFFFFFFFFFFFF FF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFF803F FFFFFFFFFFFFFFFFFF803FFFC0003FFFC0007FFF803FFE00003FFFC00007FF807FF80000 3FFFC00001FFC07FE000003FFFC00000FFC07FC000003FFFC000007FC07F8000003FFFC0 00003FC07F0000003FFFC000001FC07F0000003FFFC000001FC07E0000003FFFC000000F C07E0000003FFFC000000FC07E0000003FFFC000000FC07C0000003FFFC0000007C07C00 00003FFFC0000007C07C0000003FFFC0000007C07C0000003FFFC0000007C07C0000003F FFC0000007C0FC0000003FFFC0000007E0F80000003FFFC0000003E0F80000003FFFC000 0003E0F80000003FFFC0000003E0F80000003FFFC0000003E0F80000003FFFC0000003E0 F80000003FFFC0000003E0000000003FFFC000000000000000003FFFC000000000000000 003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFF C000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000 0000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000 0000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000000000 3FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0 00000000000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000 00000000003FFFC000000000000000003FFFC000000000000000003FFFC0000000000000 00003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003F FFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000 000000000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000 000000003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000 003FFFC000000000000000003FFFC000000000000000003FFFC000000000000000003FFF C000000000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000 0000000000003FFFC000000000000000003FFFC000000000000000003FFFC00000000000 00FFFFFFFFFFFFF000000000FFFFFFFFFFFFF000000000FFFFFFFFFFFFF000000000FFFF FFFFFFFFF000000000FFFFFFFFFFFFF0000053517BD05E>I<00007FFF000000000007FF FFF0000000003FFFFFFE00000000FFFFFFFF80000001FFE00FFFC0000003FE0001FFF000 0007FF0000FFF8000007FF80003FFC00000FFF80003FFE00000FFFC0001FFE00000FFFC0 001FFF00000FFFC0000FFF80000FFFC0000FFF80000FFFC0000FFF800007FF800007FFC0 0007FF800007FFC00003FF000007FFC00001FE000007FFC0000000000007FFC000000000 0007FFC0000000000007FFC0000000000007FFC0000000000007FFC0000000000007FFC0 000000007FFFFFC00000000FFFFFFFC0000000FFFFFFFFC0000007FFFF87FFC000003FFF F007FFC000007FFF8007FFC00001FFFC0007FFC00003FFF00007FFC00007FFE00007FFC0 000FFFC00007FFC0001FFF800007FFC0003FFF000007FFC0007FFF000007FFC0007FFE00 0007FFC0007FFE000007FFC000FFFC000007FFC000FFFC000007FFC000FFFC000007FFC0 00FFFC000007FFC000FFFC00000FFFC000FFFC00000FFFC000FFFE00001FFFC0007FFE00 001DFFC0007FFE00003DFFC0003FFF000079FFE0001FFF8000F1FFF8000FFFC003E1FFFF E007FFF81FC0FFFFF003FFFFFF807FFFF000FFFFFF001FFFF0001FFFFC0007FFE00001FF E0000000003C387CB641>97 D<003FF0000000000000FFFFF0000000000000FFFFF00000 00000000FFFFF0000000000000FFFFF0000000000000FFFFF000000000000003FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF001FFE000000000FFF00FFF FE00000000FFF03FFFFFC0000000FFF0FFFFFFF0000000FFF3FF01FFF8000000FFF7F800 3FFE000000FFFFE0000FFF000000FFFF800007FF800000FFFF000003FFC00000FFFE0000 01FFE00000FFFC000001FFF00000FFF8000000FFF80000FFF8000000FFF80000FFF80000 007FFC0000FFF80000007FFC0000FFF80000007FFE0000FFF80000007FFE0000FFF80000 007FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000 003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000003FFF0000FFF80000 007FFE0000FFF80000007FFE0000FFF80000007FFE0000FFF80000007FFC0000FFF80000 00FFFC0000FFF8000000FFF80000FFFC000001FFF00000FFFC000001FFF00000FFFE0000 03FFE00000FFFF000007FFC00000FFFF80000FFF800000FFCFC0001FFF000000FF87F000 7FFC000000FF03FE03FFF8000000FE00FFFFFFE0000000FC007FFFFF80000000F8001FFF FC00000000000003FFC000000041547BD24B>I<000001FFF8000000001FFFFF80000000 FFFFFFF0000003FFFFFFFC00000FFFC00FFE00001FFE0001FF00007FFC0003FF8000FFF0 0007FF8001FFF00007FFC003FFE0000FFFC003FFC0000FFFC007FFC0000FFFC00FFF8000 0FFFC00FFF80000FFFC01FFF800007FF801FFF000007FF803FFF000003FF003FFF000001 FE007FFF00000000007FFE00000000007FFE00000000007FFE0000000000FFFE00000000 00FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000 FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FFFE0000000000FF FE0000000000FFFE00000000007FFE00000000007FFF00000000007FFF00000000003FFF 00000000003FFF00000000003FFF00000003E01FFF80000003E01FFF80000007E00FFFC0 000007C007FFC0000007C007FFE000000FC003FFE000001F8001FFF000003F0000FFF800 007E00007FFE0000FC00003FFF0003F800000FFFE01FF0000003FFFFFFE0000000FFFFFF 800000003FFFFE0000000001FFE0000033387CB63C>I<000000000001FF800000000000 07FFFF80000000000007FFFF80000000000007FFFF80000000000007FFFF800000000000 07FFFF800000000000001FFF8000000000000007FF8000000000000007FF800000000000 0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 0007FF8000000000000007FF8000000000000007FF8000000000000007FF800000000000 0007FF8000000000000007FF8000000000000007FF8000000000000007FF8000000001FF E007FF800000001FFFFC07FF80000000FFFFFF07FF80000003FFFFFFC7FF8000000FFFE0 3FE7FF8000001FFF0007F7FF8000007FFC0001FFFF800000FFF80000FFFF800001FFF000 003FFF800003FFE000001FFF800007FFC000001FFF800007FFC000000FFF80000FFF8000 000FFF80001FFF8000000FFF80001FFF0000000FFF80003FFF0000000FFF80003FFF0000 000FFF80003FFF0000000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000 000FFF80007FFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000 000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000 000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000000FFF8000FFFE0000 000FFF8000FFFE0000000FFF80007FFE0000000FFF80007FFE0000000FFF80007FFE0000 000FFF80003FFF0000000FFF80003FFF0000000FFF80003FFF0000000FFF80001FFF0000 000FFF80001FFF0000000FFF80000FFF8000000FFF80000FFF8000001FFF800007FFC000 003FFF800003FFC000003FFF800001FFE000007FFF800000FFF00001FFFF8000007FF800 03FFFFE000003FFE000FEFFFFF80000FFFC07FCFFFFF800007FFFFFF8FFFFF800001FFFF FE0FFFFF8000003FFFF80FFFFF80000003FFC00FFE000041547CD24B>I<000003FFC000 0000003FFFFC00000001FFFFFF00000007FFFFFFC000000FFF81FFE000003FFC007FF800 007FF8003FFC0000FFF0001FFE0001FFE0000FFE0003FFC00007FF0007FFC00007FF800F FF800003FF800FFF800003FFC01FFF800001FFC01FFF000001FFC03FFF000001FFE03FFF 000001FFE07FFF000000FFE07FFE000000FFE07FFE000000FFF07FFE000000FFF0FFFE00 0000FFF0FFFE000000FFF0FFFE000000FFF0FFFE000000FFF0FFFFFFFFFFFFF0FFFFFFFF FFFFF0FFFFFFFFFFFFF0FFFFFFFFFFFFE0FFFE0000000000FFFE0000000000FFFE000000 0000FFFE0000000000FFFE0000000000FFFE00000000007FFE00000000007FFE00000000 007FFF00000000003FFF00000000003FFF00000000003FFF00000000E01FFF00000001F0 1FFF80000003F00FFF80000003F007FFC0000007E007FFC0000007E003FFE000000FC001 FFF000001FC000FFF800003F80007FFC0000FF00001FFE0003FE00000FFFC03FF8000003 FFFFFFF0000000FFFFFFC00000001FFFFE0000000001FFF0000034387CB63D>I<000000 3FFC00000003FFFF0000000FFFFFC000003FFFFFE00000FFF81FF00001FFC03FF80003FF 807FF80007FF00FFFC000FFE00FFFC001FFC00FFFC001FFC00FFFC003FF800FFFC003FF8 00FFFC003FF8007FF8007FF0007FF8007FF0003FF0007FF0000FC0007FF0000000007FF0 000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0 000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0 000000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000FFFFFFFFE000007FF8 000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8000000007FF8 0000007FFFFFFE00007FFFFFFE00007FFFFFFE00007FFFFFFE00007FFFFFFE00002E547C D329>I<00003FFF0000FF000003FFFFF007FFC0000FFFFFFC1FFFE0003FFFFFFF7FFFE0 007FFC0FFFFF9FF000FFE001FFF83FF001FFC000FFE03FF003FF80007FF01FF007FF0000 3FF81FE00FFF00003FFC0FC00FFF00003FFC07801FFE00001FFE00001FFE00001FFE0000 3FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE0000 1FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF00003FFE00001FFF0000 1FFE00001FFE00001FFE00001FFE00000FFF00003FFC00000FFF00003FFC000007FF0000 3FF8000003FF80007FF0000001FFC000FFE0000000FFE001FFC0000000FFFC0FFF800000 01FFFFFFFF00000003EFFFFFFC00000003C3FFFFF000000007C03FFF0000000007C00000 0000000007C00000000000000FC00000000000000FC00000000000000FC0000000000000 0FE00000000000000FE00000000000000FF80000000000000FFE0000000000000FFFFFFF FF00000007FFFFFFFFF8000007FFFFFFFFFF000007FFFFFFFFFFC00003FFFFFFFFFFE000 01FFFFFFFFFFF00000FFFFFFFFFFF800007FFFFFFFFFFC00007FFFFFFFFFFE0001FFFFFF FFFFFF0007FFFFFFFFFFFF000FFE000003FFFF801FF80000003FFF803FF000000007FF80 7FE000000003FFC07FE000000001FFC0FFC000000001FFC0FFC000000000FFC0FFC00000 0000FFC0FFC000000000FFC0FFC000000000FFC0FFC000000000FFC0FFE000000001FFC0 7FE000000001FF807FF000000003FF803FF000000003FF001FF800000007FE000FFE0000 001FFC0007FF8000007FF80003FFE00001FFF00001FFFE001FFFE000007FFFFFFFFF8000 000FFFFFFFFC00000001FFFFFFE0000000000FFFFC0000003C4F7CB543>I<003FF00000 00000000FFFFF0000000000000FFFFF0000000000000FFFFF0000000000000FFFFF00000 00000000FFFFF000000000000003FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF000000000000000FFF000000000000000FFF000000000000000FFF00000 0000000000FFF0001FFC00000000FFF000FFFFC0000000FFF003FFFFF0000000FFF00FFF FFF8000000FFF01FE07FFC000000FFF03F001FFE000000FFF07C001FFF000000FFF0F000 0FFF000000FFF1E0000FFF800000FFF3C0000FFF800000FFF7800007FF800000FFF78000 07FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC00000FFFC0000 07FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF80000 07FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807 FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042537BD24B>I<007F000000FF80 0003FFE00007FFF00007FFF0000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8000FFFF8 000FFFF80007FFF00007FFF00003FFE00000FF8000007F00000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000003FF000FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FFF0 0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 0000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF0 0000FFF00000FFF00000FFF00000FFF00000FFF000FFFFFFE0FFFFFFE0FFFFFFE0FFFFFF E0FFFFFFE01B547BD325>I<0000007F00000000FF80000003FFE0000007FFF0000007FF F000000FFFF800000FFFF800000FFFF800000FFFF800000FFFF800000FFFF800000FFFF8 000007FFF0000007FFF0000003FFE0000000FF800000007F000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001FF80000FFFFF80000FFFFF80000FF FFF80000FFFFF80000FFFFF8000001FFF80000007FF80000007FF80000007FF80000007F F80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8 0000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF800 00007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000 007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8000000 7FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007F F80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80000007FF8 0000007FF80000007FF80000007FF80000007FF80000007FF80000007FF80780007FF81F E0007FF83FF0007FF87FF8007FF8FFFC00FFF8FFFC00FFF0FFFC00FFF0FFFC00FFE0FFFC 01FFE0FFFC01FFC0FFFC03FF807FF807FF007FF00FFE003FF01FFC000FFFFFF00007FFFF E00001FFFF8000001FFC0000256C87D329>I<003FF00000000000FFFFF00000000000FF FFF00000000000FFFFF00000000000FFFFF00000000000FFFFF0000000000003FFF00000 00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000 FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000 00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000 FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000 00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF0000000000000 FFF0000000000000FFF00001FFFFF800FFF00001FFFFF800FFF00001FFFFF800FFF00001 FFFFF800FFF00001FFFFF800FFF000003FFE0000FFF000001FF00000FFF000003FC00000 FFF000007F800000FFF00000FF000000FFF00003FE000000FFF00007F8000000FFF0000F F0000000FFF0001FE0000000FFF0007FC0000000FFF000FF00000000FFF001FE00000000 FFF003FC00000000FFF00FF800000000FFF01FE000000000FFF03FF000000000FFF07FF8 00000000FFF1FFF800000000FFF3FFFC00000000FFF7FFFE00000000FFFFFFFF00000000 FFFFFFFF80000000FFFF9FFF80000000FFFF0FFFC0000000FFFE0FFFE0000000FFF807FF F0000000FFF003FFF0000000FFF001FFF8000000FFF000FFFC000000FFF000FFFE000000 FFF0007FFF000000FFF0003FFF000000FFF0001FFF800000FFF0001FFFC00000FFF0000F FFE00000FFF00007FFF00000FFF00003FFF00000FFF00001FFF80000FFF00001FFFC0000 FFF00000FFFE0000FFF000007FFE0000FFF000003FFF0000FFF000007FFFC0FFFFFFF003 FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFFFFFFFFF003FFFFFF40 537CD247>I<003FF000FFFFF000FFFFF000FFFFF000FFFFF000FFFFF00001FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FF F00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF00000FFF000FFFFFFF0FFFF FFF0FFFFFFF0FFFFFFF0FFFFFFF01C537BD225>I<003FF0001FFC000000FFE00000FFFF F000FFFFC00007FFFE0000FFFFF003FFFFF0001FFFFF8000FFFFF00FFFFFF8007FFFFFC0 00FFFFF01FE07FFC00FF03FFE000FFFFF03F001FFE01F800FFF00003FFF07C001FFF03E0 00FFF80000FFF0F0000FFF0780007FF80000FFF1E0000FFF8F00007FFC0000FFF3C0000F FF9E00007FFC0000FFF7800007FFBC00003FFC0000FFF7800007FFFC00003FFE0000FFFF 000007FFF800003FFE0000FFFE000007FFF000003FFE0000FFFE000007FFF000003FFE00 00FFFC000007FFE000003FFE0000FFFC000007FFE000003FFE0000FFFC000007FFE00000 3FFE0000FFFC000007FFE000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FF C000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF800 0007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000 FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003F FE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC0 00003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF80000 07FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FF F8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE 0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000 003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007 FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8000007FFC000003FFE0000FFF8 000007FFC000003FFE00FFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFE FFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03FFFFFFEFFFFFFF807FFFFFFC03F FFFFFE67367BB570>I<003FF0001FFC000000FFFFF000FFFFC00000FFFFF003FFFFF000 00FFFFF00FFFFFF80000FFFFF01FE07FFC0000FFFFF03F001FFE000003FFF07C001FFF00 0000FFF0F0000FFF000000FFF1E0000FFF800000FFF3C0000FFF800000FFF7800007FF80 0000FFF7800007FFC00000FFFF000007FFC00000FFFE000007FFC00000FFFE000007FFC0 0000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC00000FFFC000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC0 0000FFF8000007FFC00000FFF8000007FFC000FFFFFFF807FFFFFFC0FFFFFFF807FFFFFF C0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC0FFFFFFF807FFFFFFC042367BB54B>I<00 0001FFE000000000001FFFFE0000000000FFFFFFC000000003FFFFFFF00000000FFF807F FC0000001FFC000FFE0000007FF80007FF800000FFF00003FFC00001FFE00001FFE00003 FFC00000FFF00003FF8000007FF00007FF8000007FF8000FFF0000003FFC000FFF000000 3FFC001FFF0000003FFE001FFF0000003FFE003FFE0000001FFF003FFE0000001FFF003F FE0000001FFF007FFE0000001FFF807FFE0000001FFF807FFE0000001FFF807FFE000000 1FFF80FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FF FE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE000000 1FFFC0FFFE0000001FFFC0FFFE0000001FFFC0FFFE0000001FFFC07FFE0000001FFF807F FE0000001FFF807FFE0000001FFF803FFE0000001FFF003FFF0000003FFF003FFF000000 3FFF001FFF0000003FFE001FFF0000003FFE000FFF0000003FFC000FFF8000007FFC0007 FF8000007FF80003FFC00000FFF00001FFE00001FFE00000FFF00003FFC000007FF80007 FF8000003FFE001FFF0000000FFF807FFC00000007FFFFFFF800000000FFFFFFC0000000 003FFFFF000000000001FFE00000003A387CB643>I<003FF001FFE0000000FFFFF00FFF FE000000FFFFF03FFFFFC00000FFFFF0FFFFFFF00000FFFFF3FF01FFF80000FFFFF7F800 7FFE000003FFFFE0001FFF000000FFFF80000FFF800000FFFF000007FFC00000FFFE0000 07FFE00000FFFC000003FFF00000FFF8000001FFF80000FFF8000001FFF80000FFF80000 00FFFC0000FFF8000000FFFC0000FFF8000000FFFE0000FFF80000007FFE0000FFF80000 007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000 003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000003FFF8000FFF80000 003FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000007FFF0000FFF80000 007FFE0000FFF8000000FFFE0000FFF8000000FFFE0000FFF8000000FFFC0000FFF80000 01FFFC0000FFF8000001FFF80000FFFC000003FFF00000FFFC000003FFF00000FFFE0000 07FFE00000FFFF00000FFFC00000FFFF80001FFF800000FFFFC0003FFF000000FFFFF000 FFFC000000FFFBFE07FFF8000000FFF8FFFFFFE0000000FFF87FFFFF80000000FFF81FFF FC00000000FFF803FFC000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF80000 0000000000FFF800000000000000FFF8000000000000FFFFFFF80000000000FFFFFFF800 00000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000414D7BB54B >I<000001FFE00007800000001FFFF8000F80000000FFFFFE001F80000003FFFFFF801F 8000000FFFF03FC03F8000001FFF800FE07F8000007FFE0003F07F800000FFFC0001F8FF 800001FFF80000FDFF800003FFF000007FFF800003FFE000003FFF800007FFE000003FFF 80000FFFC000001FFF80001FFFC000001FFF80001FFF8000000FFF80003FFF8000000FFF 80003FFF8000000FFF80003FFF00000007FF80007FFF00000007FF80007FFF00000007FF 80007FFF00000007FF80007FFE00000007FF8000FFFE00000007FF8000FFFE00000007FF 8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF 8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF8000FFFE00000007FF 8000FFFE00000007FF8000FFFE00000007FF80007FFF00000007FF80007FFF00000007FF 80007FFF00000007FF80003FFF00000007FF80003FFF00000007FF80003FFF80000007FF 80001FFF8000000FFF80001FFF8000000FFF80000FFFC000001FFF80000FFFC000001FFF 800007FFE000003FFF800003FFF000007FFF800001FFF00000FFFF800000FFF80001FFFF 8000007FFC0003FFFF8000003FFF000FEFFF8000000FFFC07FCFFF80000007FFFFFF0FFF 80000001FFFFFE0FFF800000003FFFF80FFF8000000003FF800FFF800000000000000FFF 800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF 800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF 800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF 800000000000000FFF800000000000000FFF800000000000000FFF800000000000000FFF 8000000000000FFFFFFF80000000000FFFFFFF80000000000FFFFFFF80000000000FFFFF FF80000000000FFFFFFF80414D7CB547>I<007FE003FE00FFFFE00FFF80FFFFE03FFFE0 FFFFE07FFFF0FFFFE0FE1FF8FFFFE1F83FFC03FFE3E03FFE00FFE3C07FFE00FFE7807FFE 00FFEF807FFE00FFEF007FFE00FFEE007FFE00FFFE003FFC00FFFC003FFC00FFFC001FF8 00FFFC000FF000FFF800000000FFF800000000FFF800000000FFF800000000FFF8000000 00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 00FFF000000000FFF000000000FFF000000000FFF0000000FFFFFFFC0000FFFFFFFC0000 FFFFFFFC0000FFFFFFFC0000FFFFFFFC00002F367CB537>I<0003FFF00F00003FFFFE1F 0000FFFFFFFF0003FFFFFFFF0007FF003FFF000FF80007FF001FE00001FF003FC00000FF 003F8000007F007F8000007F007F0000003F007F0000003F00FF0000001F00FF0000001F 00FF8000001F00FF8000001F00FFC000001F00FFF000000000FFFC00000000FFFFC00000 007FFFFF0000007FFFFFF800003FFFFFFF00003FFFFFFFC0001FFFFFFFF0000FFFFFFFF8 0007FFFFFFFC0003FFFFFFFE0000FFFFFFFF00003FFFFFFF80000FFFFFFFC00000FFFFFF C0000007FFFFE00000003FFFE000000007FFF000000001FFF0780000007FF0F80000003F F0F80000001FF0FC0000001FF0FC0000000FF0FC0000000FF0FE0000000FF0FE0000000F E0FF0000000FE0FF8000001FE0FF8000001FC0FFC000001FC0FFE000003F80FFF800007F 00FFFE0001FE00FFFFC00FFC00FF7FFFFFF800FC1FFFFFE000F807FFFF8000F000FFF800 002C387CB635>I<00003E00000000003E00000000003E00000000003E00000000003E00 000000003E00000000007E00000000007E00000000007E00000000007E0000000000FE00 00000000FE0000000001FE0000000001FE0000000001FE0000000003FE0000000007FE00 00000007FE000000000FFE000000001FFE000000003FFE00000000FFFE00000001FFFE00 00000FFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFFFFFFF00003FFE00 0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 0000003FFE000000003FFE000000003FFE000000003FFE000000003FFE000000003FFE00 0000003FFE000000003FFE000000003FFE0007C0003FFE0007C0003FFE0007C0003FFE00 07C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE0007C0003FFE00 07C0003FFE0007C0001FFE000F80001FFF000F80001FFF000F80000FFF001F00000FFF80 1F000007FFC03E000003FFF0FC000001FFFFF80000007FFFF00000001FFFE000000003FF 80002A4D7ECB34>I<003FF8000001FFC000FFFFF80007FFFFC000FFFFF80007FFFFC000 FFFFF80007FFFFC000FFFFF80007FFFFC000FFFFF80007FFFFC00003FFF800001FFFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC00000FFF8000007FFC000 00FFF800000FFFC00000FFF800000FFFC00000FFF800000FFFC00000FFF800001FFFC000 00FFF800001FFFC000007FF800003FFFC000007FF800003BFFC000007FF800007BFFC000 003FFC0000F3FFC000003FFC0001E3FFF000001FFE0007C3FFFFC0000FFFC03F83FFFFC0 0007FFFFFF03FFFFC00001FFFFFE03FFFFC000007FFFF803FFFFC0000007FFE003FF0000 42377BB54B>II<7FFFFFF0007FFFFE007FFFFFF0007FFFFE007FFFFFF0 007FFFFE007FFFFFF0007FFFFE007FFFFFF0007FFFFE00007FFE00000FFF0000003FFF00 0007F80000001FFF800007F00000000FFFC0000FE000000007FFC0001FC000000007FFE0 003F8000000003FFF0003F0000000001FFF8007E0000000000FFFC00FC00000000007FFE 01FC00000000007FFE03F800000000003FFF07F000000000001FFF8FE000000000000FFF CFC0000000000007FFFF80000000000003FFFF00000000000003FFFF00000000000001FF FE00000000000000FFFC000000000000007FFE000000000000003FFF000000000000003F FF000000000000001FFF800000000000001FFFC00000000000003FFFE00000000000007F FFF0000000000000FFFFF0000000000001FDFFF8000000000001F8FFFC000000000003F0 7FFE000000000007E03FFF00000000000FE01FFF00000000001FC01FFF80000000003F80 0FFFC0000000007F0007FFE000000000FE0003FFF000000000FC0001FFF800000001F800 01FFF800000003F00000FFFC00000007F000007FFE0000000FE000003FFF0000001FC000 001FFF800000FFF000001FFF8000FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE00 01FFFFFFC0FFFFFE0001FFFFFFC0FFFFFE0001FFFFFFC042357EB447>120 DI E /Fo 19 120 df<03800FE01FE01FE01FF01FF01FE00760 006000E000C001C001800380070006000E001C003800F000C0000C157B8716>44 D<00007F000003FFC0000783E0001F00F0003C00F80078007800F8007800F0007C01F000 7C03E0007C03E0007C07C0007C07C0007C0FC000FC0F8000FC1F8000FC1F8000FC1F8000 F83F0001F83F0001F83F0001F83F0001F87E0003F07E0003F07E0003F07E0003F0FC0007 E0FC0007E0FC0007E0FC0007C0FC000FC0F8000FC0F8000F80F8001F80F8001F00F8001F 00F8003E00F8003C00F80078007800F8007801F0003C03E0001F0F80000FFE000003F800 001E2D78AB24>48 D<00000300000700000F00001E00003E00007E0000FE0003FC001F7C 007CFC0060FC0000F80000F80001F80001F80001F00001F00003F00003F00003E00003E0 0007E00007E00007C00007C0000FC0000FC0000F80000F80001F80001F80001F00001F00 003F00003F00003E00003E00007E00007E00007C00007C0000FC00FFFFF8FFFFF8182C79 AB24>I<00007F000001FFC00007C1F0000F00F8001E007C0038007C0078003E00F3003E 00E3803E01E1803F01C1803F03C1803F0381803F0383807F0783007E0707007E0706007E 070E00FE071C00FC03F801F801E003F0000007E000000FC000001F8000003F000000FC00 0001F8000007E000000F8000003E0000007C000001F0000003E0001C07C0003C07800038 0F0000381E0000783C0000F03FC001F07FFE03E078FFFFC0703FFFC0F00FFF00E003FE00 E000F800202D7AAB24>I<00007F800001FFE00007C0F8001E007C003C003C0078003E00 F0001E01E6001E01C7001E01C3003E03C3003E0383003E0387003E01CE007E01FC007C00 7800F8000000F8000001F0000003E000000F8000003F00000FFC00000FFC0000001E0000 001F0000000F8000000F8000000FC000000FC000000FC000000FC018000FC07C000FC07C 001FC0FC001F80FC001F80F8003F80E0003F00E0007E00F000FC007001F8007803F0003C 0FC0000FFF000003F800001F2D79AB24>I<0000003800000078000000F8000000F80000 00F8000001F8000001F0000001F0000001F0000003E0000003E0000003E0000007C00000 07C000000F8000000F8000000F8000001F0000001F0000003E0000003C0000007C000000 78000000F8000000F0000001E0000001E0000003C0000007838000078780000F0F80001E 0F80001C0F8000381F8000701F0000E01F0001E01F0003803F0007003E000E003E001FF8 3E007FFF7E00F007FC18C000FFF800007FE00000FC000000F8000000F8000000F8000001 F8000001F0000001F0000001F0000003F0000003E0000003E0000001C0001D397DAB24> I<00180006001F007E001FFFFC001FFFF0003FFFE0003FFF80003BFC0000380000007800 0000700000007000000070000000F0000000E0000000E0000000E0000001E3F80001CFFE 0001FC0F0001F00F8003E007C003C007C0038007C0000003E0000007E0000007E0000007 E0000007E0000007E000000FE03C000FC07E000FC07E000FC07E001FC0FE001F80F8001F 80E0003F00E0007E0070007C007000F8007801F0003803E0001E0F80000FFE000003F800 001F2D79AB24>I<00001FC000007FF00001F0780007C038000F8078001F00F8003E01F8 007C01F800F801F801F000E001F0000003E0000007E0000007C000000FC000000FC00000 1F87E0001F9FF8003FF83C003FE01E003FC01F003FC01F007F800F007F000F807F000F80 7E001F80FE001F80FC001F80FC001F80FC003F80FC003F00F8003F00F8003F00F8007F00 F8007E00F8007E00F800FC00F800F800F801F8007801F0007803E0003C07C0001E1F0000 0FFC000003F000001D2D77AB24>I<01C3E001C001CFF003C003FFF8078003FFF80F0007 FFF81F0007F8383E000FE01C7C000FC00FFC001F8007F8001E0000F8003E0000F0003C00 01E000780001E000700003C000F00007C000E00007800000000F800000001F000000001F 000000003E000000003E000000007C000000007C00000000FC00000000F800000001F800 000001F000000003F000000003F000000007E000000007E00000000FE00000000FC00000 000FC00000001FC00000001F800000001F800000003F800000003F800000003F00000000 7F000000007F000000007E000000007E0000000038000000222D77AB24>I<00003F8000 01FFE00007C0F0000F0078001E003C003C003E0078001E00F0001E00F0001E00F0003E01 F0003C01F0003C01F0007C01F8007801FC00F001FE01E001FF03C000FFCF80007FFE0000 3FF800001FF800000FFC00003FFE0000FBFF0001E0FF8003C07FC007803FC00F001FC01E 000FC03E0007C03C0007C07C0007C0780003C0780007C0F8000780F0000780F0000F00F0 000F0078001E0078003C007C0078003C00F0001F03C00007FF800001FC00001F2D79AB24 >I<0007C000001FF000007C39C000F81FC001F01FC003E00FC007C00FC00FC00FC01F80 0F801F800F803F000F803F001F807F001F007E001F007E001F007E003F00FE003E00FC00 3E00FC003E00FC007E18FC007C38F8007C38F8007C38F800FC387801FC787C03F8707C03 F8703C0F78E01E1E3DE00FF81FC003E00F001D1F799D24>97 D<0000F8000003FE00000F 8738001F03F8007E03F8007C01F800F801F801F801F803F001F803F001F007E001F007E0 03F00FE003F00FC003E00FC003E00FC007E01FC007E01F8007C01F8007C01F800FC01F80 0FC01F800F801F801F800F801F800F803F800F807F0007C0FF0003C3FF0001FFBF00007E 3E0000003E0000007E0000007E0000007C0000007C000000FC003800F800FC01F800FC01 F000FC03E000F807C000F01F80007FFE00001FF000001D2C7C9D21>103 D<001F000003FF000003FF0000003F0000003F0000003E0000003E0000007E0000007E00 00007C0000007C000000FC000000FC000000F8000000F8000001F8000001F87E0001F3FF 8001F787C003FE03E003FC03E003F803E003F803E007F003E007E003E007E003E007C003 E00FC007E00FC007C00F8007C00F8007C01F800FC01F800F801F000F801F001F803F001F 063F001F0E3E003F0E3E003E0E7E003E1E7E007E1C7C007C1C7C003C38FC003C38FC003C 70F8001FE0700007801F2F7BAD24>I<000E00001F00003F80003F80001F00000E000000 0000000000000000000000000000000000000000000000000003E0000FF0001E78001C7C 00387C00787C00707C0070FC00F0F800E0F800E1F800C1F00001F00003F00003E00007E0 0007C00007C0000FC0000F83000F87001F87001F07001F0F003F0E003E0E001E1C001E3C 001E38000FF00003C000112E7AAC16>I<007C0FFC0FFC00FC00FC00F800F801F801F801 F001F003F003F003E003E007E007E007C007C00FC00FC00F800F801F801F801F001F003F 003F003E003E007E007E007C007C00FC30FC70F870F870F8F0F8E0F0E0F1E0F1C0FBC07F 801E000E2F7AAD12>108 D<0003F800000FFE00003E0F8000FC07C001F003C003E003E0 07E003E00FC001F00F8001F01F8001F03F0001F03F0003F07F0003F07E0003F07E0003F0 7E0007F0FE0007E0FC0007E0FC0007E0FC000FC0FC000FC0FC001F80FC001F807C003F00 7C003E007C007C003E00F8001E01F0000F07C00007FF000001FC00001C1F799D24>111 D<07803E001FE0FF803CF3C1C038F781E078FF07E070FE07E070FC07E0F1FC07E0E1F803 80E1F80000E1F00000C3F0000003F0000003E0000003E0000007E0000007E0000007C000 0007C000000FC000000FC000000F8000000F8000001F8000001F8000001F0000001F0000 003F0000003F0000003E0000001C0000001B1F7A9D1E>114 D<03C001C00FF003E01E78 07F01C7C07F0387C07F0787C03F0707C01F070FC01F0F0F801E0E0F801E0E1F800E0C1F0 01E001F001C003F001C003E001C003E003C007E0038007C0038007C0038007C007000FC0 07000F8007000F800E000F800E000F801C0007801C0007C0380003C0700003E0E00000FF C000003F00001C1F7A9D21>118 D<03C0000007000FF000700F801E7800F81FC01C7C01 F81FC0387C01F01FC0787C01F00FC0707C01F007C070FC03F007C0F0F803E00780E0F803 E00780E1F803E00380C1F007E0078001F007E0070003F007C0070003E007C0070003E00F C00F0007E00FC00E0007C00F800E0007C00F800E0007C00F801E000FC01F801C000F801F 001C000F801F003C000F801F0038000F801F00780007803F00700007C07F80F00003C07F 81E00001E0E7C3C00000FFC1FF8000003F007E00002A1F7A9D2F>I E /Fp 4 101 df<000001FC000000000007FF00000000001FFFC0E00000007F03E3F800 0001FC01F3F8000003F800FFF8000007F0007FF800000FE0007FF000001FC0003FF00000 3F80003FF000007F80003FF00000FF00001FE00000FE00001FE00001FE00001FE00003FC 00001FE00003FC00001FC00007FC00001FC00007F800003FC0000FF800003FC0000FF000 003F80001FF000003F80001FF000007F80003FF000007F80003FE000007F00003FE00000 7F00003FE00000FF00007FE00000FF00007FC00000FE00007FC00000FE00007FC00001FE 00007FC00001FE0000FF800001FC0000FF800001FC0000FF800003FC0000FF800003FC03 C0FF800003F803C0FF000003F803C0FF000007F803C0FF000007F807C07F00000FF00780 7F00000FF007807F00001FF00F807F00003FF00F003F80007FE00F003F8000FFE01F001F 8001F7E01E001FC003E7E03E000FC007C3F03C0007E00F83F07C0003F03F01F8F80001FF FC00FFF000007FF0007FE000001FC0001F8000323574B33C>97 D<0003FE000003FFFE00 0007FFFC000007FFFC000007FFFC00000007FC00000007F800000003F800000007F80000 0007F800000007F000000007F00000000FF00000000FF00000000FE00000000FE0000000 1FE00000001FE00000001FC00000001FC00000003FC00000003FC00000003F800000003F 800000007F800000007F800000007F000000007F00000000FF00000000FF00000000FE00 000000FE01FC0001FE0FFF0001FE1FFFC001FC7E07E001FCF803F003FFF001F803FFC001 FC03FF8000FC03FF0000FE07FE0000FE07FE0000FE07FC00007F07F800007F0FF800007F 0FF000007F0FE00000FF0FE00000FF1FE00000FF1FE00000FF1FC00000FF1FC00000FF3F C00001FF3FC00001FF3F800001FF3F800001FF7F800003FF7F800003FE7F000003FE7F00 0003FE7F000007FE7F000007FCFE000007FCFE000007FCFE00000FF8FE00000FF8FE0000 0FF0FE00001FF0FE00001FE0FC00003FE0FE00003FC07E00007F807E00007F007E0000FF 007E0001FE003E0001FC003F0003F8001F0007F0001F800FE0000FC03F800007E07F0000 03FFFC000000FFF00000003F800000285473D236>I<0000003FC000000001FFF8000000 0FFFFE0000003FE07F0000007F001F800001FE000F800003F80007C00007F00003C0000F E0001FC0001FC0003FC0003F80007FC0007F80007FC000FF00007FC001FE00007FC001FE 00007F8003FC00003F0007FC0000080007F8000000000FF8000000000FF8000000001FF0 000000001FF0000000003FF0000000003FE0000000003FE0000000003FE0000000007FE0 000000007FC0000000007FC0000000007FC0000000007FC000000000FF8000000000FF80 00000000FF8000000000FF8000000000FF80000000007F80000000007F80000000007F80 000001807F80000003C07F80000007C03F8000000F803F8000001F803F8000003F001FC0 00007E001FC00000FC000FE00003F00007F0000FE00003F8003F800001FE03FE0000007F FFF80000001FFFE000000007FE0000002A3574B336>I<000000000007FC0000000007FF FC000000000FFFF8000000000FFFF8000000000FFFF800000000000FF800000000000FF0 000000000007F000000000000FF000000000000FF000000000000FE000000000000FE000 000000001FE000000000001FE000000000001FC000000000001FC000000000003FC00000 0000003FC000000000003F8000000000003F8000000000007F8000000000007F80000000 00007F0000000000007F000000000000FF000000000000FF000000000000FE0000000000 00FE000000000001FE000000000001FE000000000001FC00000001FC01FC00000007FF03 FC0000001FFFC3FC0000007F03E3F8000001FC01F3F8000003F800FFF8000007F0007FF8 00000FE0007FF000001FC0003FF000003F80003FF000007F80003FF00000FF00001FE000 00FE00001FE00001FE00001FE00003FC00001FE00003FC00001FC00007FC00001FC00007 F800003FC0000FF800003FC0000FF000003F80001FF000003F80001FF000007F80003FF0 00007F80003FE000007F00003FE000007F00003FE00000FF00007FE00000FF00007FC000 00FE00007FC00000FE00007FC00001FE00007FC00001FE0000FF800001FC0000FF800001 FC0000FF800003FC0000FF800003FC03C0FF800003F803C0FF000003F803C0FF000007F8 03C0FF000007F807C07F00000FF007807F00000FF007807F00001FF00F807F00003FF00F 003F80007FE00F003F8000FFE01F001F8001F7E01E001FC003E7E03E000FC007C3F03C00 07E00F83F07C0003F03F01F8F80001FFFC00FFF000007FF0007FE000001FC0001F800036 5474D23C>I E /Fq 8 122 df<00000FFFFFFFF000000FFFFFFFF000001FFFFFFFE00000 1FFFFFFFE000000007FF800000000003FF000000000003FE000000000007FE0000000000 07FE000000000007FC000000000007FC00000000000FFC00000000000FFC00000000000F F800000000000FF800000000001FF800000000001FF800000000001FF000000000001FF0 00000000003FF000000000003FF000000000003FE000000000003FE000000000007FE000 000000007FE000000000007FC000000000007FC00000000000FFC00000000000FFC00000 000000FF800000000000FF800000000001FF800000000001FF800000000001FF00000000 0001FF000000000003FF000000000003FF000000000003FE000000000003FE0000000000 07FE000000000007FE000000000007FC000000000007FC00000000000FFC00000000000F FC00000000000FF800000000000FF800000000001FF800000000001FF800000000001FF0 00000000001FF000000000003FF000000000003FF000000000003FE000000000003FE000 000000007FE000000000007FE000000000007FC000000000007FC00000000000FFC00000 000000FFC00000000000FF800000000000FF800000000001FF800000000001FF80000000 0001FF000000000001FF000000000003FF000000000003FF000000000003FE0000000000 03FE000000000007FE000000000007FE000000000007FC000000000007FC00000000000F FC00000000000FFC00000000003FFE00000000FFFFFFFF000000FFFFFFFF000000FFFFFF FF000000FFFFFFFF00000034527BD134>73 D<00000FFFFFFFFFF800000000000FFFFFFF FFFFC0000000000FFFFFFFFFFFF8000000000FFFFFFFFFFFFE000000000007FF00001FFF 000000000003FE000001FFC00000000003FE0000007FE00000000007FE0000003FF00000 000007FE0000001FF80000000007FC0000000FFC0000000007FC00000007FE000000000F FC00000007FE000000000FFC00000003FF000000000FF800000003FF000000000FF80000 0003FF000000001FF800000003FF000000001FF800000003FF800000001FF000000003FF 800000001FF000000003FF800000003FF000000003FF000000003FF000000007FF000000 003FE000000007FF000000003FE000000007FF000000007FE000000007FE000000007FE0 0000000FFE000000007FC00000000FFE000000007FC00000001FFC00000000FFC0000000 1FF800000000FFC00000003FF800000000FF800000003FF000000000FF800000007FE000 000001FF80000000FFC000000001FF80000001FF8000000001FF00000003FE0000000001 FF00000007FC0000000003FF0000001FF00000000003FF0000007FE00000000003FE0000 03FF800000000003FE00003FFC000000000007FFFFFFFFF0000000000007FFFFFFFF0000 0000000007FFFFFFFF00000000000007FC00007FC000000000000FFC00001FE000000000 000FFC000007F800000000000FF8000003FC00000000000FF8000001FE00000000001FF8 000001FE00000000001FF8000000FF00000000001FF0000000FF00000000001FF0000000 FF80000000003FF00000007F80000000003FF00000007F80000000003FE00000007F8000 0000003FE00000007F80000000007FE0000000FF80000000007FE0000000FF8000000000 7FC0000000FF80000000007FC0000000FF8000000000FFC0000001FF8000000000FFC000 0001FF8000000000FF80000001FF8000000000FF80000001FF8000000001FF80000003FF 8000000001FF80000003FF8000000001FF00000003FF8000000001FF00000003FF800000 0003FF00000003FF8000000003FF00000007FF8000000003FE00000007FF8000000003FE 00000007FF0001C00007FE00000007FF0003C00007FE00000007FF0003800007FC000000 07FF0003800007FC00000007FF000780000FFC00000007FF800700000FFC00000003FF80 0F00003FFE00000003FF801E007FFFFFFF000001FF803C00FFFFFFFF000000FFC07C00FF FFFFFF0000007FE0F800FFFFFFFE0000003FFFE000000000000000000FFFC00000000000 00000000FF000052547AD159>82 D<0000007F000000000007FFC0000000001FFFE03C00 00007F81F87E000000FE0078FF000001FC003DFF000007F0001FFF00000FE0000FFE0000 1FE0000FFE00003FC00007FE00007F800007FC0000FF000007FC0000FF000007FC0001FE 000007FC0003FE000007F80003FC000007F80007FC000007F80007F800000FF8000FF800 000FF0000FF800000FF0001FF000000FF0001FF000001FF0003FF000001FE0003FE00000 1FE0003FE000001FE0003FE000003FE0007FE000003FC0007FC000003FC0007FC000003F C0007FC000007FC0007FC000007F8000FF8000007F8000FF8000007F8000FF800000FF80 00FF800000FF0038FF800000FF0038FF000000FF0038FF000001FF00387F000001FE0078 7F000001FE00707F000003FE00707F800007FE00F03F800007FE00E03F80000FFE00E03F 80001FFC01E01FC0003DFC01C00FC00079FE03C00FE001F0FE038007F003E0FE078003F8 1F807F0F0000FFFF003FFE00007FFC000FFC00000FE00003F00035357CB33D>97 D<0001FF00000003FFFF00000003FFFE00000007FFFE00000007FFFE0000000007FE0000 000007FC0000000003FC0000000007FC0000000007FC0000000007F80000000007F80000 00000FF8000000000FF8000000000FF0000000000FF0000000001FF0000000001FF00000 00001FE0000000001FE0000000003FE0000000003FE0000000003FC0000000003FC00000 00007FC0000000007FC0000000007F80000000007F8000000000FF8000000000FF800000 0000FF0000000000FF00FE000001FF03FFC00001FF0FFFE00001FE3F03F80001FE7C01FC 0003FEF000FE0003FFE0007E0003FFC0007F0003FF80003F8007FF00003F8007FE00003F 8007FC00003FC007F800003FC00FF800003FC00FF800003FC00FF000003FC00FF000003F C01FF000003FC01FF000003FC01FE000003FC01FE000003FC03FE000007FC03FE000007F C03FC000007FC03FC000007FC07FC00000FFC07FC00000FF807F800000FF807F800000FF 807F800001FF807F800001FF00FF000001FF00FF000001FF00FF000003FE00FF000003FE 00FF000003FC00FF000007FC00FE000007F800FE00000FF0007E00000FF0007F00001FE0 007F00001FC0007F00003FC0003F00007F80003F0000FF00001F8000FE00001F8001FC00 000FC007F0000007E00FE0000003F03FC0000001FFFF000000007FFC000000001FE00000 002A547BD232>I<0000001FF000000001FFFE00000007FFFF8000001FF00FC000007F80 01E00000FE0000F00003FC0000780007F80001F8000FF00007F8001FE0000FF8003FC000 1FF8007F80001FF800FF00001FF801FF00001FF801FE00001FF003FC00001FE007FC0000 078007F8000000000FF8000000000FF8000000001FF0000000001FF0000000003FF00000 00003FE0000000003FE0000000003FE0000000007FE0000000007FC0000000007FC00000 00007FC0000000007FC0000000007F8000000000FF8000000000FF8000000000FF800000 00007F80000000007F80000000007F80000000007F80000000307F80000000387F800000 00783F80000000F03F80000001E01FC0000003C01FC000000F800FE000001F0007F00000 7E0007F00001F80001FC000FE00000FF00FF8000007FFFFE0000001FFFF000000003FF00 00002D357CB332>I<000000FFC000000007FFF80000003FFFFE0000007F003F000001FC 000F800003F00003C00007E00001E0000FC00001E0000FC00003E0001F80000FE0001F80 001FE0003F00001FE0003F00001FE0003F00001FE0007F00001FC0007F80000F80007F80 000000007FC0000000007FE0000000007FFC000000007FFFE00000003FFFFE0000003FFF FF8000001FFFFFE000000FFFFFF0000007FFFFF8000001FFFFFC0000007FFFFE0000000F FFFE000000007FFF000000000FFF0000000003FF0000000001FF0000000000FF00070000 007F001F8000007F007FC000007F007FC000007F00FFC000007E00FFC000007E00FFC000 007E00FF800000FC00FF800000FC00FE000001F800F0000003F000F0000003F000780000 07E0003C00001F80001F00007F00000FF003FE000003FFFFF8000000FFFFC00000001FFC 0000002B357AB337>115 D<00003F80003F800000FFE000FFE00003FFF803FFF8000FC0 FC07C0FC001F007E0F001E003C003F1E007E0078003F9C01FF00F0003FBC03FF00E0001F F803FF01E0001FF007FF03C0001FF007FF0380001FE007FE0780001FE007FE0700003FE0 03FC0F00003FC000F00E00003FC000000E00003FC000001E00007FC000001E00007FC000 000000007F8000000000007F800000000000FF800000000000FF000000000000FF000000 000000FF000000000001FF000000000001FE000000000001FE000000000001FE00000000 0003FE000000000003FC000000000003FC000000000003FC000000000007FC0000000000 07F8000070000007F8000070000007F800007000000FF80000F00F000FF80000E03FC00F F00001E07FC00FF00001C07FC01FF00003C0FFC01FF0000380FFC03FF0000780FFC03FF0 000F00FF807BF0001E00FF0073F8003C00FC00F1F8007C007801E0FC00F0003E07C07E07 E0001FFF803FFFC0000FFE000FFF000001F80003F8000038357CB343>120 D<000FE000000000003FF8000000E0007FFC000003F800F07E000007F801E07F000007F8 03C03F00000FF807803F80000FF00F003F80000FF00E007F80000FF01E007F80001FF01C 007F80001FE03C007F80001FE03800FF80001FE03800FF00003FE07800FF00003FC07001 FF00003FC07001FE00003FC0F001FE00007FC0F003FE00007F800003FC00007F800007FC 00007F800007F80000FF800007F80000FF00000FF80000FF00000FF00000FF00000FF000 01FF00001FF00001FE00001FE00001FE00001FE00001FE00001FE00003FE00003FE00003 FC00003FC00003FC00003FC00003FC00003FC00007FC00007FC00007F800007F800007F8 00007F800007F800007F80000FF800007F80000FF000007F80000FF000007F80000FF000 007F80001FF000007F80001FE000007F80003FE000003F80007FE000003F80007FE00000 3FC000FFC000001FC003FFC000000FE007FFC0000007F81FFFC0000003FFFE7F80000000 FFF87F800000001FE07F800000000000FF800000000000FF000000000000FF0000000000 01FF000000000001FE000000000001FE000007E00003FC00000FF00003FC00001FF00007 F800003FF00007F800003FF0000FF000003FF0001FE000003FF0001FC000003FE0003F80 00003F80007F0000003C0000FE0000003C0001FC0000001E0003F80000000F000FF00000 000FE03FC000000003FFFF0000000000FFFC00000000003FE000000000354C7DB339>I E /Fr 33 122 df<00000FF8000000007FFE00000001F80780000007E001C000001F8000 E000003F0007E000007E000FF000007E000FF00000FC000FF00000FC000FF00001F8000F F00001F80007E00001F80001800001F80000000001F80000000001F80000000001F80000 000001F80000000001F80000000001F80000000001F80000000001F80000000001F80003 F000FFFFFFFFF000FFFFFFFFF000FFFFFFFFF00001F8000FF00001F80003F00001F80003 F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003F00001F80003 F00001F80003F00001F80003F00003FC0007F8007FFFE0FFFFC07FFFE0FFFFC07FFFE0FF FFC02A3B7FBA2E>12 D<1C007F00FF80FF80FF80FF80FF807F001C000909798817>46 D<0003F80000001FFF0000007E0FC00000F803E00001E000F00003C000780007C0007C00 0F80003E000F80003E001F00001F001F00001F003F00001F803F00001F803F00001F807E 00000FC07E00000FC07E00000FC07E00000FC07E00000FC07E00000FC0FE00000FE0FE00 000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE0000 0FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000F E0FE00000FE0FE00000FE0FE00000FE07E00000FC07E00000FC07E00000FC07E00000FC0 7F00001FC03F00001F803F00001F803F00001F801F00001F001F80003F000F80003E000F 80003E0007C0007C0003E000F80001F001F00000F803E000007E0FC000001FFF00000003 F80000233A7DB72A>48 D<0001C0000003C0000007C000001FC00000FFC000FFFFC000FF FFC000FF1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC00000 1FC000003FE0007FFFFFF07FFFFFF07FFFFFF01C3879B72A>I<000FF00000007FFE0000 01FFFF800003E03FE0000F000FF0000E0007F8001C0003FC00380001FE00300001FE0070 0000FF00600000FF00FC0000FF00FF00007F80FF80007F80FF80007F80FF80007F80FF80 007F80FF80007F807F00007F801C00007F800000007F80000000FF00000000FF00000000 FF00000001FE00000001FC00000003FC00000003F800000007F000000007E00000000FE0 0000001FC00000003F800000003F000000007C00000000F800000001F000000003E00000 0007C00000000F800000000F000000001E000180003C000180007800018000F000038001 E000030003C000030007800003000E000007000FFFFFFF001FFFFFFF003FFFFFFF007FFF FFFE00FFFFFFFE00FFFFFFFE00FFFFFFFE0021387CB72A>I<0007F80000003FFF000000 7FFFC00001F80FF00003C007F800078003FC000E0001FC000F0001FE001FE000FE001FF0 00FF001FF000FF001FF000FF001FF000FF001FF000FF000FE000FF0007C000FF00000000 FE00000001FE00000001FE00000001FC00000003F800000003F800000007F000000007E0 0000000F800000007E0000001FFC0000001FFF800000000FE000000007F000000001FC00 000001FE00000000FF000000007F800000007F800000007FC00000007FC00000003FC000 00003FE00000003FE01E00003FE07F80003FE0FFC0003FE0FFC0003FE0FFC0003FE0FFC0 003FE0FFC0003FC0FF80007FC07F80007F807E00007F80700000FF00380001FE001E0001 FE000F8003F80007F00FF00001FFFFC000007FFF0000000FF80000233A7DB72A>I66 D68 D<000003FF00000000001FFFE000000000 FE01FC00000001F8007E00000007E0001F8000000FC0000FC000003F800007F000007F00 0003F80000FE000001FC0001FC000000FE0001F80000007E0003F80000007F0007F00000 003F8007F00000003F800FE00000001FC00FE00000001FC01FE00000001FE01FC0000000 0FE03FC00000000FF03FC00000000FF03FC00000000FF07FC00000000FF87F8000000007 F87F8000000007F87F8000000007F8FF8000000007FCFF8000000007FCFF8000000007FC FF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF8000000007FCFF 8000000007FCFF8000000007FCFF8000000007FCFF8000000007FC7F8000000007F87FC0 0000000FF87FC00000000FF87FC00000000FF83FC00000000FF03FC00000000FF01FE000 00001FE01FE00000001FE01FE00000001FE00FF00000003FC007F00000003F8007F80000 007F8003F80000007F0001FC000000FE0001FC000000FE0000FE000001FC00007F000003 F800003F800007F000001FC0000FE0000007E0001F80000003F8007F00000000FE01FC00 0000001FFFE00000000003FF000000363D7BBA41>79 D82 D<000FF800C0003FFE01C000FFFF81C003F807E3C007E000F7C00FC0007FC01F80003FC0 3F00001FC03E00000FC07E000007C07E000007C07C000003C0FC000003C0FC000001C0FC 000001C0FC000001C0FE000000C0FE000000C0FE000000C0FF000000C0FF800000007FC0 0000007FE00000007FF80000003FFF8000001FFFF800001FFFFF80000FFFFFE00007FFFF F80003FFFFFE0000FFFFFF00003FFFFF800007FFFFC000007FFFC0000007FFE00000007F E00000003FF00000001FF00000000FF000000007F800000007F8C0000003F8C0000003F8 C0000001F8C0000001F8C0000001F8E0000001F8E0000001F8E0000001F0F0000001F0F0 000003F0F8000003E0FC000007E0FE000007C0FF00000FC0FF80001F80FBF0003F00F0FE 00FE00E03FFFF800E00FFFE000C001FF0000253D7CBA2E>I<001FE0000000FFFC000003 E03F000007000F80000F8007E0001FC003F0001FE003F0001FE001F8001FE001F8001FE0 00FC000FC000FC00078000FC00000000FC00000000FC00000000FC00000000FC0000007F FC000007FFFC00003FE0FC0000FE00FC0003F800FC000FF000FC001FC000FC003FC000FC 007F8000FC007F0000FC007F0000FC0CFE0000FC0CFE0000FC0CFE0000FC0CFE0001FC0C FE0001FC0CFF0003FC0C7F00077C0C7F80063E183FC01E3E180FE0781FF003FFF00FE000 7F8007C026277DA52A>97 D<03F0000000FFF0000000FFF0000000FFF00000000FF00000 0003F000000003F000000003F000000003F000000003F000000003F000000003F0000000 03F000000003F000000003F000000003F000000003F000000003F000000003F000000003 F000000003F000000003F01FE00003F07FF80003F1E03E0003F3801F8003F7000FC003FE 0007E003FC0003F003F80001F803F00001F803F00000FC03F00000FC03F00000FE03F000 00FE03F000007E03F000007F03F000007F03F000007F03F000007F03F000007F03F00000 7F03F000007F03F000007F03F000007F03F000007F03F000007E03F00000FE03F00000FE 03F00000FC03F00001FC03F80001F803F80003F003FC0003F003EE0007E003C6000FC003 C7801F000381E07E000300FFF80000001FC000283B7EB92E>I<0003FC00001FFF80007E 03E001F8007003F000F807E001FC0FC003FC0FC003FC1F8003FC3F8003FC3F0001F87F00 00F07F0000007F0000007E000000FE000000FE000000FE000000FE000000FE000000FE00 0000FE000000FE000000FE000000FE0000007E0000007F0000007F0000003F0000063F80 00061F80000E1FC0000C0FC0001C07E0003803F0007001F800E0007C07C0001FFF000007 F8001F277DA525>I<0000000FC0000003FFC0000003FFC0000003FFC00000003FC00000 000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC0000000 0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F C00000000FC00003F80FC0001FFF0FC0007E078FC000F801EFC003F0007FC007E0003FC0 0FC0001FC00FC0001FC01F80000FC03F80000FC03F00000FC07F00000FC07F00000FC07E 00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00 000FC0FE00000FC0FE00000FC0FE00000FC07E00000FC07F00000FC07F00000FC03F0000 0FC03F00000FC01F80001FC01F80001FC00FC0003FC007E0007FC003F000EFF001F801CF FF007C078FFF001FFE0FFF0007F80FC0283B7DB92E>I<0007F800001FFF00007C0FC001 F803E003F001F007E001F80FC000F81F80007C1F80007C3F00007E3F00003E7F00003E7F 00003F7E00003FFE00003FFE00003FFE00003FFFFFFFFFFFFFFFFFFE000000FE000000FE 000000FE000000FE0000007E0000007E0000007F0000007F0000003F0000033F8000031F 8000070FC0000607C0000E07E0001C01F0003800F80070007E03E0001FFF800003FC0020 277EA525>I<00007E000003FF80000FC1E0001F87E0003F0FF0007E0FF0007E0FF000FC 0FF000FC0FF001F803C001F8000001F8000001F8000001F8000001F8000001F8000001F8 000001F8000001F8000001F8000001F8000001F8000001F80000FFFFFC00FFFFFC00FFFF FC0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8 000001F8000001F8000003FC00007FFFF8007FFFF8007FFFF8001C3B7FBA19>I<000000 03F0000FF00FF8003FFC3C3C00F81F707C01F00FE07C03E007C07C07C003E0100FC003F0 000FC003F0001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F8001F800 1F8001F8001F8001F8000FC003F0000FC003F00007C003E00003E007C00003F00F800003 F81F0000073FFC0000060FF000000E000000000E000000000E000000000E000000000F00 0000000F000000000FC000000007FFFFC00007FFFFF80003FFFFFE0001FFFFFF8003FFFF FFC00F80007FE01F00000FF03E000003F07C000001F07C000001F8F8000000F8F8000000 F8F8000000F8F8000000F8F8000000F8FC000001F87C000001F03E000003E03F000007E0 0F80000F8007E0003F0001FC01FC00007FFFF0000007FF000026387EA52A>I<03F00000 0000FFF000000000FFF000000000FFF0000000000FF00000000003F00000000003F00000 000003F00000000003F00000000003F00000000003F00000000003F00000000003F00000 000003F00000000003F00000000003F00000000003F00000000003F00000000003F00000 000003F00000000003F00000000003F00FF0000003F03FFC000003F0F03F000003F1C01F 800003F3800FC00003F7000FC00003FE000FC00003FC0007E00003FC0007E00003F80007 E00003F80007E00003F80007E00003F00007E00003F00007E00003F00007E00003F00007 E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007 E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007 E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00007F8000F F000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF80293A7EB92E>I<0380000FE0001FF000 1FF0001FF0001FF0001FF0000FE000038000000000000000000000000000000000000000 00000000000000000000000003F000FFF000FFF000FFF00007F00003F00003F00003F000 03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 03F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F000 03F00007F800FFFFC0FFFFC0FFFFC012387EB717>I<03F000FFF000FFF000FFF0000FF0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F00003F0 0003F00007F800FFFFC0FFFFC0FFFFC0123A7EB917>108 D<03F00FF0001FE000FFF03F FC007FF800FFF0F03F01E07E00FFF1C01F83803F000FF3800FC7001F8003F7000FCE001F 8003FE000FDC001F8003FC0007F8000FC003FC0007F8000FC003F80007F0000FC003F800 07F0000FC003F80007F0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F C003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F000 07E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F C003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F000 07E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000FC003F00007E0000F C007F8000FF0001FE0FFFFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40257E A445>I<03F00FF00000FFF03FFC0000FFF0F03F0000FFF1C01F80000FF3800FC00003F7 000FC00003FE000FC00003FC0007E00003FC0007E00003F80007E00003F80007E00003F8 0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0 0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0 0007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F0 0007E00003F00007E00003F00007E00003F00007E00007F8000FF000FFFFC1FFFF80FFFF C1FFFF80FFFFC1FFFF8029257EA42E>I<0003FE0000000FFF8000003E03E00000F800F8 0001F0007C0003E0003E0007C0001F000F80000F801F80000FC01F000007C03F000007E0 3F000007E07E000003F07E000003F07E000003F07E000003F0FE000003F8FE000003F8FE 000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F8FE000003F87E00 0003F07E000003F07F000007F03F000007E03F000007E01F80000FC00F80000F800FC000 1F8007E0003F0003F0007E0000F800F800007E03F000001FFFC0000003FE000025277EA5 2A>I<03F01FE000FFF07FF800FFF1E07E00FFF3801F8007F7000FC003FE0007E003FC00 03F003F80003F803F00001F803F00001FC03F00000FC03F00000FE03F00000FE03F00000 FE03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F03F000007F 03F000007F03F000007F03F000007F03F00000FE03F00000FE03F00000FE03F00001FC03 F00001FC03F80003F803F80003F003FC0007F003FE000FE003F6000FC003F7803F0003F1 E07E0003F0FFF80003F01FC00003F000000003F000000003F000000003F000000003F000 000003F000000003F000000003F000000003F000000003F000000003F000000007F80000 00FFFFC00000FFFFC00000FFFFC0000028357EA42E>I<0003F800C0001FFE01C0007E07 81C000FC01C3C003F000E3C007F00077C00FE00037C00FC0003FC01FC0001FC03F80001F C03F80000FC07F00000FC07F00000FC07F00000FC0FE00000FC0FE00000FC0FE00000FC0 FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC0FE00000FC07F 00000FC07F00000FC07F00000FC03F00000FC03F80001FC01F80001FC01FC0003FC00FC0 003FC007E0007FC003F000EFC001F801CFC0007E078FC0001FFE0FC00007F80FC0000000 0FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000FC00000000F C00000000FC00000000FC00000000FC00000001FE0000003FFFF000003FFFF000003FFFF 28357DA42C>I<07E01F00FFE07FC0FFE1E3E0FFE387F00FE707F003E607F003EE07F003 EC03E003FC008003F8000003F8000003F8000003F8000003F0000003F0000003F0000003 F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000003 F0000003F0000003F0000003F0000003F0000003F0000003F0000003F0000007F80000FF FFF000FFFFF000FFFFF0001C257EA421>I<00FF030003FFE7000F80FF001E003F003C00 1F0078000F0070000700F0000700F0000700F0000300F8000300F8000300FC000300FF00 00007FE000007FFF00003FFFE0001FFFF8000FFFFC0003FFFE0000FFFF000007FF800000 7F8000001F80C0000FC0C00007C0C00007C0E00003C0E00003C0E00003C0F00003C0F000 0380F8000780FC000780FC000F00FF001E00F3C07C00E1FFF000C03F80001A277DA521> I<0018000000180000001800000018000000180000003800000038000000380000007800 00007800000078000000F8000001F8000003F8000007F800001FFFFF00FFFFFF00FFFFFF 0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800 0001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F800 0001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800C001F800 C000FC01C000FC0180007C0380007E0300003F0700000FFE000001F8001A347FB220>I< 03F00007E000FFF001FFE000FFF001FFE000FFF001FFE0000FF0001FE00003F00007E000 03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 03F00007E00003F00007E00003F00007E00003F00007E00003F00007E00003F00007E000 03F00007E00003F00007E00003F00007E00003F0000FE00003F0000FE00003F0000FE000 03F0001FE00001F0001FE00001F8003FE00000F80077F80000FC00E7FF80003F03C7FF80 001FFF87FF800003FC07E00029267EA42E>III121 D E /Fs 7 53 df<0006000C00180030006000E001C00380038007000F000E001E001E00 1C003C003C003C0078007800780078007800F800F000F000F000F000F000F000F000F000 F000F000F000F800780078007800780078003C003C003C001C001E001E000E000F000700 0380038001C000E0006000300018000C00060F3B7AAB1A>40 DI<003F800001FFF00003E0F80007803C000F001E001E000F003E000F803E 000F803C0007807C0007C07C0007C07C0007C07C0007C0FC0007E0FC0007E0FC0007E0FC 0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC0007E0FC 0007E0FC0007E07C0007C07C0007C07C0007C03E000F803E000F803E000F801F001F000F 001E0007803C0003E0F80001FFF000003F80001B277EA521>48 D<00380000780001F800 1FF800FEF800E0F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 00F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F800 00F80000F80000F80000F80000F80000F80000F80000F80001FC00FFFFF8FFFFF815267B A521>I<00FF000003FFE0000E03F0001800F80030007C0060007E0078003F00FC003F00 FE001F80FE001F80FE001F80FE001F807C001F8000001F8000001F0000003F0000003E00 00007E0000007C000000F8000001F0000003E0000003C00000078000000E0000001C0000 003800000070018000E001800180018003000300060003000C0003001FFFFF003FFFFF00 7FFFFE00FFFFFE00FFFFFE0019267DA521>I<00FF000003FFE0000F01F8001C007C0030 007E003C003E007E003F007E003F007E003F007E003F003C003F0000003E0000007E0000 007C000000F8000001F0000007E00001FF800001FF00000001E0000000F00000007C0000 003E0000003F0000001F0000001F8000001F8038001F807C001F80FE001F80FE001F80FE 001F00FC003F0078003E0070007C003800F8001F01F00007FFC00000FF000019277DA521 >I<0000380000003800000078000000F8000001F8000001F8000003F8000007F8000006 F800000CF800001CF8000018F8000030F8000070F8000060F80000C0F80001C0F8000180 F8000300F8000700F8000E00F8000C00F8001C00F8003800F8003000F8006000F800E000 F800FFFFFFE0FFFFFFE00000F8000000F8000000F8000000F8000000F8000000F8000000 F8000001FC00003FFFE0003FFFE01B277EA621>I E /Ft 7 123 df<0000000000038000000000000FC000000000003FC00000000000FF800000000003FE 00000000000FF800000000003FE00000000000FF800000000003FE00000000000FF80000 0000003FE00000000000FF800000000003FE00000000000FF800000000003FE000000000 00FF800000000003FE00000000000FF800000000003FE00000000000FF800000000003FE 00000000000FF800000000003FE000000000007F800000000000FE000000000000FE0000 000000007F8000000000003FE000000000000FF8000000000003FE000000000000FF8000 000000003FE000000000000FF8000000000003FE000000000000FF8000000000003FE000 000000000FF8000000000003FE000000000000FF8000000000003FE000000000000FF800 0000000003FE000000000000FF8000000000003FE000000000000FF8000000000003FE00 0000000000FF8000000000003FC000000000000FC000000000000380323279AD41>60 D<0000E00003F80003F80007F80007F80007F80007F00001C00000000000000000000000 0000000000000000000000000000000000000000000000F80003FE00070F000E0F801C0F 80180F80380F80300F80701F80601F80603F80E03F00C03F00C07F00007E00007E0000FE 0000FC0001FC0001FC0001F80003F80003F00003F00007F01807E01807E0380FE0300FC0 300FC0700F80600F80E00F80C00F81C00F838007870003FE0000F80015397EB71D>105 D<00001FC0000000FFF8000007E07E00000F801F00003F000F80007E000FC000FC0007C0 01F80007E003F00007E007E00003F00FE00003F00FC00003F01FC00003F03F800007F03F 800007F07F800007F07F000007F07F000007F07F00000FF0FF00000FF0FE00000FE0FE00 000FE0FE00001FE0FE00001FC0FE00001FC0FC00003F80FC00003F00FC00007F00FC0000 7E007E0000FC007E0001F8003E0003F0003F0007E0001F000FC0000F801F000007E07E00 0001FFF00000003F80000024267DA428>111 D<0001C0000003E0000007E0000007E000 0007E0000007E000000FE000000FC000000FC000000FC000001FC000001F8000001F8000 001F8000003F8000003F00007FFFFF807FFFFF80FFFFFF80007E0000007E0000007E0000 00FE000000FC000000FC000000FC000001FC000001F8000001F8000001F8000003F80000 03F0000003F0000003F0000007F0000007E0000007E0000007E000000FE000000FC00600 0FC006000FC00E001FC00C001F801C001F8018001F8038001F8070001F8060001F80E000 0F81C0000787800003FE000000F8000019357EB31E>116 D<0007E001F000001FF807FC 0000783E0E0F0000E01F1C1F0001C01F383F8003800FF07F8003000FE0FF8007000FE0FF 800E000FC0FF000C000FC07E000C001FC03C001C001F80000018001F80000018001F8000 0000003F80000000003F80000000003F00000000003F00000000007F00000000007F0000 0000007E00000000007E0000000000FE0000000000FE0000000000FC000C000000FC000C 000001FC001C001E01FC0018003F01F80018007F81F80038007F83F8007000FF83F80060 00FF07F800E000FE0E7C01C0007C1C7C03800078383E0F00001FF00FFC000007C003F000 0029267EA42F>120 D<00F800000003FE000070070F0000F80E0F8001F81C0F8001F818 0F8001F8380F8003F8300F8003F0701F8003F0601F8003F0603F8007F0E03F0007E0C03F 0007E0C07F0007E0007E000FE0007E000FC000FE000FC000FC000FC000FC001FC001FC00 1F8001F8001F8001F8001F8001F8003F8003F8003F0003F0003F0003F0003F0003F0007F 0003F0007E0003F0007E0003F0007E0003F000FE0003F000FC0003F001FC0001F003FC00 00F807FC00007C1FF800003FF9F800000FE1F800000003F800000003F000000003F0000E 0007F0003F8007E0007F800FC0007F800FC0007F801F80007F801F00007F003E00007C00 7C00007000F800003801F000001E07C000000FFF00000001FC00000025367EA429>I<00 01E00060000FF800E0001FFC00C0003FFE01C0007FFF038000FFFF070000F81FFF0001E0 03FE0001C0001C0001800038000180007000000000E000000001C0000000038000000007 000000000E000000001C000000003800000000F000000001E00000000380000000070000 00000E000000001C0000000038000300007000030000E000070001C00006000380000E00 0700001C000FFC007C001FFF81F8001E0FFFF8003807FFF0007003FFE0006003FFC000E0 01FF0000C0007C000023267DA427>I E /Fu 1 4 df<7FFFFFFFFFFFFFFF80FFFFFFFFFF FFFFFFC0FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0F000000000000003C0F000000000 000003C0F000000000000003C0F000000000000003C0FFFFFFFFFFFFFFFFC0FFFFFFFFFF FFFFFFC0FFFFFFFFFFFFFFFFC07FFFFFFFFFFFFFFF8042447BC34D>3 D E /Fv 7 96 df<0000000000007C000000000000FC000000000001F8000000000001F8 000000000003F0000000000007E000000000000FC000000000001FC000000000001F8000 000000003F0000000000007F0000000000007E000000000000FE000000000001FC000000 000001F8000000000003F8000000000007F0000000000007F000000000000FE000000000 001FC000000000001FC000000000003F8000000000007F8000000000007F000000000000 FF000000000000FE000000000001FE000000000001FC000000000003FC000000000007F8 000000000007F800000000000FF000000000000FF000000000001FE000000000001FE000 000000003FC000000000003FC000000000007FC000000000007F800000000000FF800000 000000FF000000000000FF000000000001FE000000000001FE000000000003FE00000000 0003FC000000000007FC000000000007F8000000000007F800000000000FF80000000000 0FF000000000001FF000000000001FF000000000001FE000000000003FE000000000003F E000000000007FC000000000007FC000000000007FC00000000000FF800000000000FF80 0000000000FF800000000001FF000000000001FF000000000001FF000000000003FF0000 00000003FE000000000003FE000000000007FE000000000007FC000000000007FC000000 000007FC00000000000FFC00000000000FF800000000000FF800000000001FF800000000 001FF800000000001FF000000000001FF000000000003FF000000000003FF00000000000 3FF000000000003FE000000000007FE000000000007FE000000000007FE000000000007F E00000000000FFC00000000000FFC00000000000FFC00000000000FFC00000000000FFC0 0000000001FF800000000001FF800000000001FF800000000001FF800000000001FF8000 00000003FF800000000003FF000000000003FF000000000003FF000000000003FF000000 000003FF000000000007FF000000000007FE000000000007FE000000000007FE00000000 0007FE000000000007FE00000000000FFE00000000000FFE00000000000FFE0000000000 0FFC00000000000FFC00000000000FFC00000000000FFC00000000001FFC00000000001F FC00000000001FFC00000000001FFC00000000001FFC00000000001FF800000000001FF8 00000000001FF800000000001FF800000000003FF800000000003FF800000000003FF800 000000003FF800000000003FF800000000003FF800000000003FF800000000003FF00000 0000003FF000000000003FF000000000003FF000000000007FF000000000007FF0000000 00007FF000000000007FF000000000007FF000000000007FF000000000007FF000000000 007FF000000000007FF000000000007FF000000000007FF000000000007FF00000000000 7FF000000000007FF000000000007FF000000000007FE000000000007FE00000000000FF E00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0 0000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000 00000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000 000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000000 0000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000000 0036B3638257>48 DI64 D<00000000001FFC00000000001FFC00000000001FFC0000000000 1FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001F FC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC 00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00 000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0000 0000001FFC00000000001FFC00000000001FF800000000001FF800000000003FF8000000 00003FF800000000003FF800000000003FF800000000003FF800000000003FF800000000 003FF800000000003FF800000000003FF800000000003FF800000000003FF80000000000 3FF800000000003FF800000000003FF800000000003FF800000000003FF000000000003F F000000000003FF000000000003FF000000000007FF000000000007FF000000000007FF0 00000000007FF000000000007FF000000000007FF000000000007FF000000000007FE000 000000007FE000000000007FE000000000007FE00000000000FFE00000000000FFE00000 000000FFE00000000000FFE00000000000FFE00000000000FFC00000000000FFC0000000 0000FFC00000000000FFC00000000001FFC00000000001FFC00000000001FFC000000000 01FF800000000001FF800000000001FF800000000001FF800000000001FF800000000003 FF800000000003FF000000000003FF000000000003FF000000000003FF000000000003FF 000000000007FF000000000007FE000000000007FE000000000007FE000000000007FE00 0000000007FE00000000000FFC00000000000FFC00000000000FFC00000000000FFC0000 0000000FFC00000000001FF800000000001FF800000000001FF800000000001FF8000000 00001FF000000000003FF000000000003FF000000000003FF000000000003FE000000000 003FE000000000007FE000000000007FE000000000007FC000000000007FC00000000000 FFC00000000000FF800000000000FF800000000000FF800000000001FF800000000001FF 000000000001FF000000000003FF000000000003FE000000000003FE000000000003FE00 0000000007FC000000000007FC000000000007FC00000000000FF800000000000FF80000 0000000FF800000000001FF000000000001FF000000000001FE000000000003FE0000000 00003FE000000000003FC000000000007FC000000000007F8000000000007F8000000000 00FF800000000000FF000000000001FF000000000001FE000000000001FE000000000003 FC000000000003FC000000000007FC000000000007F800000000000FF800000000000FF0 00000000000FF000000000001FE000000000001FE000000000003FC000000000003FC000 000000007F8000000000007F800000000000FF000000000000FE000000000001FE000000 000001FC000000000003FC000000000003F8000000000007F8000000000007F000000000 000FE000000000000FE000000000001FC000000000003F8000000000003F800000000000 7F0000000000007E000000000000FE000000000001FC000000000001F8000000000003F8 000000000003F0000000000007E000000000000FE000000000000FC000000000001F8000 000000003F0000000000007E0000000000007E000000000000FC000000000000F8000000 00000036B37D8457>I<000000003C00000000000000007E00000000000000007F000000 0000000000FF0000000000000000FF0000000000000001FF8000000000000001FF800000 0000000001FF8000000000000003FFC000000000000003FFC000000000000003FFC00000 0000000007FFE000000000000007FFE000000000000007FFE00000000000000FFFF00000 000000000FFFF00000000000000FE7F00000000000001FE7F80000000000001FE7F80000 000000001FC3F80000000000003FC3FC0000000000003FC3FC0000000000003F81FC0000 000000007F81FE0000000000007F81FE000000000000FF00FF000000000000FF00FF0000 00000000FE007F000000000001FE007F800000000001FE007F800000000001FC003F8000 00000003FC003FC00000000003FC003FC00000000003F8001FC00000000007F8001FE000 00000007F8001FE00000000007F0000FE0000000000FF0000FF0000000000FF0000FF000 0000000FE00007F0000000001FE00007F8000000001FE00007F8000000001FC00003F800 0000003FC00003FC000000003FC00003FC000000007F800001FE000000007F800001FE00 0000007F000000FE00000000FF000000FF00000000FF000000FF00000000FE0000007F00 000001FE0000007F80000001FE0000007F80000001FC0000003F80000003FC0000003FC0 000003FC0000003FC0000003F80000001FC0000007F80000001FE0000007F80000001FE0 000007F00000000FE000000FF00000000FF000000FF00000000FF000000FE000000007F0 00001FE000000007F800001FE000000007F800003FC000000003FC00003FC000000003FC 00003F8000000001FC00007F8000000001FE00007F8000000001FE00007F0000000000FE 0000FF0000000000FF0000FF0000000000FF0000FE00000000007F0001FE00000000007F 8001FE00000000007F8001FC00000000003F8003FC00000000003FC003FC00000000003F C003F800000000001FC007F800000000001FE007F800000000001FE007F000000000000F E00FF000000000000FF00FF000000000000FF01FE0000000000007F81FE0000000000007 F81FC0000000000003F83FC0000000000003FC3FC0000000000003FC3F80000000000001 FC7F80000000000001FE7F80000000000001FE7F00000000000000FEFF00000000000000 FFFF00000000000000FFFE000000000000007FFE000000000000007F7C00000000000000 3E7C000000000000001E48647B7F53>86 D<000000000000F00000000000000000000000 01FC000000000000000000000003FC000000000000000000000003FC0000000000000000 00000007FE000000000000000000000007FE000000000000000000000007FE0000000000 0000000000000FFF00000000000000000000000FFF00000000000000000000000FFF0000 0000000000000000001FFF80000000000000000000001FFF80000000000000000000003F FFC0000000000000000000003FFFC0000000000000000000003FFFC00000000000000000 00007FFFE0000000000000000000007FFFE0000000000000000000007FFFE00000000000 0000000000FFFFF000000000000000000000FF9FF000000000000000000000FF9FF00000 0000000000000001FF9FF800000000000000000001FF0FF800000000000000000001FF0F F800000000000000000003FF0FFC00000000000000000003FE07FC000000000000000000 03FE07FC00000000000000000007FE07FE00000000000000000007FC03FE000000000000 00000007FC03FE0000000000000000000FFC03FF0000000000000000000FF801FF000000 0000000000001FF801FF8000000000000000001FF801FF8000000000000000001FF000FF 8000000000000000003FF000FFC000000000000000003FE0007FC000000000000000003F E0007FC000000000000000007FE0007FE000000000000000007FC0003FE0000000000000 00007FC0003FE00000000000000000FFC0003FF00000000000000000FF80001FF0000000 0000000000FF80001FF00000000000000001FF80001FF80000000000000001FF00000FF8 0000000000000001FF00000FF80000000000000003FF00000FFC0000000000000003FE00 0007FC0000000000000003FE000007FC0000000000000007FE000007FE00000000000000 07FC000003FE000000000000000FFC000003FF000000000000000FFC000003FF00000000 0000000FF8000001FF000000000000001FF8000001FF800000000000001FF0000000FF80 0000000000001FF0000000FF800000000000003FF0000000FFC00000000000003FE00000 007FC00000000000003FE00000007FC00000000000007FE00000007FE00000000000007F C00000003FE00000000000007FC00000003FE0000000000000FFC00000003FF000000000 0000FF800000001FF0000000000000FF800000001FF0000000000001FF800000001FF800 0000000001FF000000000FF8000000000001FF000000000FF8000000000003FF00000000 0FFC000000000003FE0000000007FC000000000007FE0000000007FE000000000007FE00 00000007FE000000000007FC0000000003FE00000000000FFC0000000003FF0000000000 0FF80000000001FF00000000000FF80000000001FF00000000001FF80000000001FF8000 0000001FF00000000000FF80000000001FF00000000000FF80000000003FF00000000000 FFC0000000003FE000000000007FC0000000003FE000000000007FC0000000007FE00000 0000007FE0000000007FC000000000003FE0000000007FC000000000003FE000000000FF C000000000003FF000000000FF8000000000001FF000000000FF8000000000001FF00000 0001FF8000000000001FF800000001FF0000000000000FF800000003FF0000000000000F FC00000003FF0000000000000FFC00000003FE00000000000007FC00000007FE00000000 000007FE00000007FC00000000000003FE00000007FC00000000000003FE0000000FFC00 000000000003FF0000000FF800000000000001FF0000000FF800000000000001FF000000 1FF800000000000001FF8000001FF000000000000000FF8000001FF000000000000000FF 8000003FF000000000000000FFC000003FE0000000000000007FC000003FE00000000000 00007FC000007FE0000000000000007FE000007FC0000000000000003FE000007FC00000 00000000003FE00000FFC0000000000000003FF00000FF80000000000000001FF00001FF 80000000000000001FF80001FF80000000000000001FF80001FF00000000000000000FF8 0003FF00000000000000000FFC0003FE000000000000000007FC0003FE00000000000000 0007FC0007FE000000000000000007FE0007FC000000000000000003FE0007FC00000000 0000000003FE000FFC000000000000000003FF000FF8000000000000000001FF000FF800 0000000000000001FF001FF8000000000000000001FF801FF0000000000000000000FF80 1FF0000000000000000000FF803FF0000000000000000000FFC03FE00000000000000000 007FC03FE00000000000000000007FC07FE00000000000000000007FE07FC00000000000 000000003FE0FFC00000000000000000003FF0FFC00000000000000000003FF0FF800000 000000000000001FF0FF800000000000000000001FF0FF000000000000000000000FF07F 000000000000000000000FE03E0000000000000000000007C0648B7B7F6F>94 D<3E0000000000000000000007C07F000000000000000000000FE0FF0000000000000000 00000FF0FF800000000000000000001FF0FF800000000000000000001FF0FFC000000000 00000000003FF0FFC00000000000000000003FF07FC00000000000000000003FE07FE000 00000000000000007FE03FE00000000000000000007FC03FE00000000000000000007FC0 3FF0000000000000000000FFC01FF0000000000000000000FF801FF00000000000000000 00FF801FF8000000000000000001FF800FF8000000000000000001FF000FF80000000000 00000001FF000FFC000000000000000003FF0007FC000000000000000003FE0007FC0000 00000000000003FE0007FE000000000000000007FE0003FE000000000000000007FC0003 FE000000000000000007FC0003FF00000000000000000FFC0001FF00000000000000000F F80001FF80000000000000001FF80001FF80000000000000001FF80000FF800000000000 00001FF00000FFC0000000000000003FF000007FC0000000000000003FE000007FC00000 00000000003FE000007FE0000000000000007FE000003FE0000000000000007FC000003F E0000000000000007FC000003FF000000000000000FFC000001FF000000000000000FF80 00001FF000000000000000FF8000001FF800000000000001FF8000000FF8000000000000 01FF0000000FF800000000000001FF0000000FFC00000000000003FF00000007FC000000 00000003FE00000007FC00000000000003FE00000007FE00000000000007FE00000003FE 00000000000007FC00000003FF0000000000000FFC00000003FF0000000000000FFC0000 0001FF0000000000000FF800000001FF8000000000001FF800000000FF8000000000001F F000000000FF8000000000001FF000000000FFC000000000003FF0000000007FC0000000 00003FE0000000007FC000000000003FE0000000007FE000000000007FE0000000003FE0 00000000007FC0000000003FE000000000007FC0000000003FF00000000000FFC0000000 001FF00000000000FF80000000001FF00000000000FF80000000001FF80000000001FF80 000000000FF80000000001FF00000000000FF80000000001FF00000000000FFC00000000 03FF000000000007FC0000000003FE000000000007FE0000000007FE000000000007FE00 00000007FE000000000003FE0000000007FC000000000003FF000000000FFC0000000000 01FF000000000FF8000000000001FF000000000FF8000000000001FF800000001FF80000 00000000FF800000001FF0000000000000FF800000001FF0000000000000FFC00000003F F00000000000007FC00000003FE00000000000007FC00000003FE00000000000007FE000 00007FE00000000000003FE00000007FC00000000000003FE00000007FC0000000000000 3FF0000000FFC00000000000001FF0000000FF800000000000001FF0000000FF80000000 0000001FF8000001FF800000000000000FF8000001FF000000000000000FFC000003FF00 0000000000000FFC000003FF0000000000000007FC000003FE0000000000000007FE0000 07FE0000000000000003FE000007FC0000000000000003FE000007FC0000000000000003 FF00000FFC0000000000000001FF00000FF80000000000000001FF00000FF80000000000 000001FF80001FF80000000000000000FF80001FF00000000000000000FF80001FF00000 000000000000FFC0003FF000000000000000007FC0003FE000000000000000007FC0003F E000000000000000007FE0007FE000000000000000003FE0007FC000000000000000003F E0007FC000000000000000003FF000FFC000000000000000001FF000FF80000000000000 00001FF801FF8000000000000000001FF801FF8000000000000000000FF801FF00000000 00000000000FFC03FF00000000000000000007FC03FE00000000000000000007FC03FE00 000000000000000007FE07FE00000000000000000003FE07FC00000000000000000003FE 07FC00000000000000000003FF0FFC00000000000000000001FF0FF80000000000000000 0001FF0FF800000000000000000001FF9FF800000000000000000000FF9FF00000000000 0000000000FF9FF000000000000000000000FFFFF0000000000000000000007FFFE00000 00000000000000007FFFE0000000000000000000007FFFE0000000000000000000003FFF C0000000000000000000003FFFC0000000000000000000003FFFC0000000000000000000 001FFF80000000000000000000001FFF80000000000000000000000FFF00000000000000 000000000FFF00000000000000000000000FFF000000000000000000000007FE00000000 0000000000000007FE000000000000000000000007FE000000000000000000000003FC00 0000000000000000000003FC000000000000000000000001FC0000000000000000000000 00F0000000000000648B7B7F6F>I E /Fw 5 111 df<00FFE000FFF000FFE000FFF00007 F0000F000007F0000E00000DF8000C00000CF8000C00000CFC000C00000C7C000C000018 7C00180000183E00180000183E00180000181F00180000301F00300000300F8030000030 0F803000003007C03000006007C06000006007E06000006003E06000006003F0600000C0 01F0C00000C001F8C00000C000F8C00000C000FCC0000180007D80000180007F80000180 003F80000180003F80000300001F00000300001F00000300000F00000F80000F0000FFF0 00060000FFF0000600002C227CA130>78 D<0038007C007C007800700000000000000000 00000000000007801FC038E030E060F0C1E0C1E0C1E003C003C003C0078007800F000F04 0F061E0C1E0C1E181C181E700FE007800F237DA116>105 D<00001800003C00007C0000 7C000038000000000000000000000000000000000000000000000780001FE00038E00060 F000C0F000C0F00180F00180F00001E00001E00001E00001E00003C00003C00003C00003 C0000780000780000780000780000F00000F00000F00000F00001E00001E00381E00783C 00F83800F8780070F0007FC0001F0000162D81A119>I<01F01FE01FE001E001E003C003 C003C003C007800780078007800F000F000F000F001E001E001E001E003C003C003C003C 007800780078407860F0C0F0C0F0C0F18071803F001E000C247DA214>108 D<0F00FC001FC3FF0031C7078061EC038061F803C0C1F003C0C1F003C0C1E003C003C007 8003C0078003C0078003C00F0007800F0007800F0007801E0407801E060F001E0C0F003C 0C0F003C180F003C381E001C701E001FE00C0007801F177D9526>110 D E /Fx 14 112 df<000C0038007000E001C00380030007000E000E001C001C00380038 0038007800700070007000F000F000F000F000F000F000F000F000F000F000F000700070 00700078003800380038001C001C000E000E0007000300038001C000E000700038000C0E 317AA418>40 DI<0000380000000038000000003800000000380000000038000000003800000000 380000000038000000003800000000380000000038000000003800000000380000000038 00000000380000000038000000003800000000380000FFFFFFFFFEFFFFFFFFFEFFFFFFFF FE0000380000000038000000003800000000380000000038000000003800000000380000 000038000000003800000000380000000038000000003800000000380000000038000000 0038000000003800000000380000000038000027277C9F2F>43 D<00FF0003FFC00781E0 0F00F01E00783C003C3C003C78001E78001E78001E78001EF8001FF8001FF8001FF8001F F8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001FF8001F78001E78001E7C003E 3C003C3C003C1E00780F00F00781E003FFC000FF0018227DA01E>48 D<00E00001E00007E000FFE000F9E00001E00001E00001E00001E00001E00001E00001E0 0001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E00001E0 0001E00001E00001E00001E00001E00001E00003F000FFFFC0FFFFC012217AA01E>I<01 FC0007FF801C0FC03003E06001F06000F8F800F8FC00FCFC00FCFC007C78007C3000FC00 00FC0000F80000F80001F00003E00003C0000780000F00001E0000380000700000E00001 C00C03800C0600180C00181800183FFFF87FFFF8FFFFF0FFFFF016217CA01E>I<00FF00 03FFC00F03E01C00F01C00F83E00FC3E007C3E007C1E00FC0C00FC0000F80000F80001F0 0003E0000FC001FF0001FF000003E00000F000007800007C00003E00003F30003F78003F FC003FFC003FFC003EF8007E60007C3800F81E03F00FFFC001FF0018227DA01E>I<0000 E00001E00001E00003E00007E00007E0000DE0001DE00039E00031E00061E000E1E000C1 E00181E00381E00701E00601E00C01E01C01E01801E03001E07001E0E001E0FFFFFFFFFF FF0001E00001E00001E00001E00001E00001E00003F0003FFF003FFF18227DA11E>I<10 00301E01F01FFFE01FFFC01FFF801FFE001BF00018000018000018000018000018000018 FE001BFF801F03C01C01E01800F01800F800007800007800007C00007C30007C78007CF8 007CF8007CF80078F000F86000F07001E03801E01E078007FF0001F80016227CA01E>I< 00000F000000FF000000FF0000001F0000000F0000000F0000000F0000000F0000000F00 00000F0000000F0000000F0000000F0000FF0F0003FFCF0007C0FF000F003F001E001F00 3C000F007C000F0078000F00F8000F00F8000F00F8000F00F8000F00F8000F00F8000F00 F8000F0078000F007C000F003C000F003E001F001F003F800FC1EFF003FF8FF000FE0F00 1C247DA222>100 D<00FC0003FF800F83C01F01E03E00F03C00F07C00F07C0078F80078 F80078FFFFF8FFFFF8F80000F80000F80000F800007C00007C00183E00181E00381F0070 0781E003FF80007E0015187D961B>I<000F80007FC000F1E001E3E003C3E003C1C00780 00078000078000078000078000078000078000078000078000FFFE00FFFE000780000780 000780000780000780000780000780000780000780000780000780000780000780000780 000780000780000780007FFC007FFC0013247EA313>I<0F07F007F000FF1FFC1FFC00FF 703E703E001FC01EC01E000F800F800F000F800F800F000F000F000F000F000F000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F 000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F00FF F0FFF0FFF0FFF0FFF0FFF02C167D9532>109 D<007E0003FFC00781E00F00F01E00783C 003C3C003C78001E78001EF8001FF8001FF8001FF8001FF8001FF8001FF8001F78001E7C 003E3C003C3E007C1F00F80F81F003FFC000FF0018187D961E>111 D E /Fy 10 111 df0 D<0000030000000000038000000000038000000000038000000000038000000000038000 000000038000000000038000000000038000000000038000000000038000000000038000 000000038000000000038000000000038000000000038000000000038000000000038000 00000003800000000003800000000003800000000003800000FFFFFFFFFFFCFFFFFFFFFF FCFFFFFFFFFFFC0000038000000000038000000000038000000000038000000000038000 000000038000000000038000000000038000000000038000000000038000000000038000 000000038000000000038000000000038000000000038000000000038000000000038000 00000003800000000003800000FFFFFFFFFFFCFFFFFFFFFFFCFFFFFFFFFFFC2E2F7CAD37 >6 D<0000000001C00000000007C0000000001FC0000000007F0000000001FC00000000 07F0000000001FC0000000007F0000000001FC0000000007F0000000000FC0000000003F 0000000000FC0000000003F8000000000FE0000000003F8000000000FE0000000003F800 0000000FE0000000003F8000000000FE0000000000F80000000000FE00000000003F8000 0000000FE00000000003F80000000000FE00000000003F80000000000FE00000000003F8 0000000000FC00000000003F00000000000FC00000000007F00000000001FC0000000000 7F00000000001FC00000000007F00000000001FC00000000007F00000000001FC0000000 0007C00000000001C0000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000007FFFFFFFFF80FFFFFFFFFFC0FFFFFFFFFFC02A3B7A AB37>20 D<007800FE01FE01FE01FE03FE03FC03FC03FC07F807F807F807F007F00FE00F E00FE00FC01FC01F801F801F803F003F003F003E007E007C007C007C00F800F800F800F0 000F227EA413>48 D<0000FFFFC00007FFFFC0001FFFFFC0007F80000000FC00000001F0 00000003C000000007800000000F000000000E000000001E000000003C00000000380000 0000780000000070000000007000000000F000000000E000000000E000000000E0000000 00FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0E000000000E000000000E000000000F000000000 70000000007000000000780000000038000000003C000000001E000000000E000000000F 00000000078000000003C000000001F000000000FC000000007F800000001FFFFFC00007 FFFFC00000FFFFC0222B7AA52F>50 D<00000001C000000001C000000003C00000000380 000000078000000007000000000F000000000E000000001E000000003C00000000380000 000078000000007000000000F000000000E000000001E000000001C000000003C0000000 0380000000078000000007000000000F000000000E000000001E000000003C0000000038 0000000078000000007000000000F000000000E000000001E000000001C000000003C000 00000380000000078000000007000000000F000000001E000000001C000000003C000000 00380000000078000000007000000000F000000000E000000001E000000001C000000003 C00000000380000000078000000007000000000F000000001E000000001C000000003C00 000000380000000078000000007000000000F000000000E0000000006000000000223D76 AE00>54 D<00001F0000FF0003F0000FC0001F80001F00003F00003E00003E00003E0000 3E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0000 3E00003E00003E00003E00003E00007E00007C0000FC0001F80003F0007FC000FF00007F C00003F00001F80000FC00007C00007E00003E00003E00003E00003E00003E00003E0000 3E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0000 3E00003E00003F00001F00001F80000FC00003F00000FF00001F18437BB123>102 DI106 D110 D E /Fz 1 67 df<7FFFFFFFFF800000FFFFFFFFFFF80000FFFFFFFFFFFF00007FFFFFFFFFFF 800000FC03F83FFFE000007C03E00F8FF000003C03C007C1F800003C03C007C0FC00003C 03C003E07C00003C03C003E03E00003C03C001E03E00003C03C001F01E00003C03C001F0 1F00003C03C000F01F00003C03C000F00F00003C03C000F00F00003C03C000F00F00003C 03C000F00F00003C03C000F00F00003C03C000F01F00003C03C000F01F00003C03C000F0 1E00003C03C001F03E00003C03C001F07E00003C03C001E0FC00003C03C003E1F800003C 03C003E3F000003C03C007CFE000003C03C00FFFC000003C03C03FFF8000003C03C3FFFE 0000003C03FFFFFC0000003C03FFFFFF0000003C03FFFFFFC000003C03FFFFFFF000003C 03C00FF7F800003C03C001F1FE00003C03C000F87F00003C03C000F81F80003C03C0007C 0F80003C03C0007C07C0003C03C0003C07C0003C03C0003E03E0003C03C0003E03E0003C 03C0001E01F0003C03C0001E01F0003C03C0001E00F0003C03C0001E00F0003C03C0001E 00F0003C03C0001E00F0003C03C0001E00F0003C03C0001E00F0003C03C0001E01F0003C 03C0001E01F0003C03C0003E01E0003C03C0003E03E0003C03C0003C07E0003C03C0003C 07C0003C03C0007C0F80003C03C0007C1F80003C03C000F87F00003C03C001F9FE00007C 03E003FFF80000FC03F81FFFF0007FFFFFFFFFFFC000FFFFFFFFFFFF0000FFFFFFFFFFF8 00007FFFFFFFFF0000003C447FC32D>66 D E /FA 19 127 df<3C7EFFFFFFFF7E3C0808 7A8714>58 D<3C007E00FF00FF00FF80FF807F803D800180018001800380030003000700 06000E001C0038007000600009157A8714>I<003FFE0000FFFF003FFE0000FFFF0000FF 000007E00000FF000007C00000FF800003800000DF800003000001DFC00007000001CFC0 00060000018FE0000600000187E0000600000387F0000E00000387F0000C00000303F000 0C00000303F8000C00000701F8001C00000701FC001800000600FC001800000600FE0018 00000E007E003800000E007F003000000C003F003000000C003F003000001C003F807000 001C001F8060000018001FC060000018000FC060000038000FE0E00000380007E0C00000 300007F0C00000300003F0C00000700003F1C00000700003F9800000600001F980000060 0001FD800000E00000FF800000E00000FF000000C000007F000000C000007F000001C000 003F000001C000003E0000018000003E000003C000001E00000FE000001E0000FFFE0000 0C0000FFFE00000C0000382D7CAC38>78 D<000007F00600003FFE0E0000F80F9E0003E0 01FE00078000FE000F00007C001E00007C003C00003C003C00003C007800003800780000 38007800003800F800003800F800003000F800003000FC00000000FC00000000FE000000 007F800000007FF80000003FFF8000003FFFF000001FFFFC000007FFFE000000FFFF0000 001FFF00000001FF800000003F800000001F800000000F800000000F8000000007801800 000780180000078018000007801800000F803800000F003800000F003800001E00380000 1E007C00003C007E000078007F0000F0007B8003E000F1F00F8000E07FFE0000C00FF000 00272F7CAD2B>83 D<00F800001FF800001FF8000001F8000001F8000001F0000001F000 0003F0000003F0000003E0000003E0000007E0000007E0000007C0000007C000000FC000 000FC7E0000F9FF8000FB83C001FF01E001FE01F001FC01F001F800F803F000F803F000F 803E000F803E000F807E001F807E001F807C001F807C001F807C003F80FC003F00F8003F 00F8003F00F8007E00F8007E00F8007C00F800FC00F800F8007801F0007803F0007807E0 003C0F80001E1F00000FFC000003F00000192F7DAD1E>98 D<0001F800000FFE00003E07 80007C018001F801C003F007C007E00FC00FC00FC00F800F801F800F803F0000003F0000 007F0000007E0000007E0000007E000000FE000000FC000000FC000000FC000000FC0000 00FC000000FC0000607C0000E07C0001C07C0003803E000F001E001C000F81F80007FFE0 0000FE00001B1F7D9D1F>I<0000001F000003FF000003FF0000003F0000003F0000003E 0000003E0000007E0000007E0000007C0000007C000000FC000000FC000000F8000000F8 000001F80007E1F8001FF9F0007C1DF000F80FF001F00FF003E007E007C007E00FC007E0 1F8007E01F8007C03F0007C03F000FC07F000FC07E000F807E000F807E001F80FE001F80 FC001F00FC001F00FC003F02FC003F06FC003E06F8003E06F8007E0E7C00FE0C7C00FC0C 7C01FC1C3E07BE181F0E1E380FFC0FF003F003C0202F7DAD24>I<001F00000003FF0000 0003FF000000003F000000003F000000003E000000003E000000007E000000007E000000 007C000000007C00000000FC00000000FC00000000F800000000F800000001F800000001 F83F000001F1FFC00001F3C1F00003FF00F00003FC00F80003F800F80003F800F80007F0 00F80007E000F80007E000F80007C000F8000FC001F8000FC001F0000F8001F0000F8001 F0001F8003F0001F8003E0001F0003E0001F0007E0003F0007C0403F0007C0C03E000FC0 C03E000F80C07E000F81C07E001F01807C001F03807C001F0700FC000F0600FC000F1E00 F80007F800700001E000222F7DAD29>104 D<000700000F80001FC0001FC0000F800007 0000000000000000000000000000000000000000000000000000000001E00007F8000E3C 001C3E00383E00303E00703E00607E00E07C00C07C00C0FC0080F80000F80001F80001F0 0003F00003E00003E00007E00007C04007C0C00FC0C00F80C00F81C01F01801F03801F07 000F06000F1E0007F80001F000122E7EAC18>I<000000E0000001F0000003F0000003F0 000003F0000001C000000000000000000000000000000000000000000000000000000000 000000000000000000007C000003FE0000078F80000E0780001C0780003807C0003007C0 00700FC000600F8000E00F8000C00F8000801F8000001F8000001F0000001F0000003F00 00003F0000003E0000003E0000007E0000007E0000007C0000007C000000FC000000FC00 0000F8000000F8000001F8000001F8000001F0000001F0000003F0000003F0000003E000 0003E0000007E0003807C000FC0FC000FC0F8000FC1F0000F83E0000F0F800007FF00000 1F8000001C3B81AC1D>I<001F000003FF000003FF0000003F0000003F0000003E000000 3E0000007E0000007E0000007C0000007C000000FC000000FC000000F8000000F8000001 F8000001F800F801F003FC01F00F0E03F01C1E03F0387E03E0707E03E0E07E07E1C07E07 E3803807C7000007CE00000FDC00000FF800000FF800000FFF80001F9FE0001F83F0001F 01F8001F00F8003F00F8043F00F80C3E00F80C3E00F80C7E00F81C7E00F8187C00F0387C 00F830FC00F870FC0078E0F8003FC070000F801F2F7DAD25>I<007C0FFC0FFC00FC00FC 00F800F801F801F801F001F003F003F003E003E007E007E007C007C00FC00FC00F800F80 1F801F801F001F003F003F003E003E007E007E007C007C00FC08FC18F818F818F838F830 F030F070F86078E03FC00F000E2F7DAD15>I<07C007E0001FE03FF80018F8783E003879 E01E00307B801F00707F001F00607F001F0060FE001F00E0FC001F00C0FC001F00C0F800 1F0081F8003F0001F8003E0001F0003E0001F0003E0003F0007E0003F0007C0003E0007C 0003E000FC0007E000F80807E000F81807C001F81807C001F0180FC001F0380FC003E030 0F8003E0700F8003E0E01F8001E0C01F8001E3C01F0000FF000E00003E00251F7E9D2B> 110 D<0001F800000FFF00003F0780007C03C001F803E003F001F007E001F00FC001F80F 8000F81F8000F83F0000F83F0001F87F0001F87E0001F87E0001F87E0003F8FE0003F0FC 0003F0FC0003F0FC0007E0FC0007E0FC000FC0FC000FC07C001F807C001F007C003E003E 007C001F01F8000F83E00003FF800000FC00001D1F7D9D22>I<000E00001F00001F0000 3F00003F00003E00003E00007E00007E00007C00007C0000FC0000FC00FFFFF8FFFFF801 F80001F80001F00001F00003F00003F00003E00003E00007E00007E00007C00007C0000F C0000FC0000F80000F80001F80101F80301F00301F00701F00601F00E01E01C01E03801F 07000F0E0007FC0001F000152B7EA919>116 D<01E000000007F8000E000E3C001F001C 3E003F00383E003E00303E003E00703E003E00607E007E00E07C007C00C07C007C00C0FC 007C0080F800FC0000F800F80001F800F80001F000F80001F001F80003F001F00003E001 F00003E001F00003E003F02007E003E06007C003E06007C003E06007C003E0E007C007E0 C003C00FC0C003E01FC1C003E03BE18001F071E380007FE0FF00001F803C00231F7E9D29 >I<01E0007007F800F80E3C01F81C3E01FC383E01FC303E00FC703E007C607E007CE07C 0038C07C0038C0FC003880F8003800F8003001F8003001F0003001F0007003F0006003E0 006003E000E003E000C007E000C007C001C007C0018007C0038007C0070003C0060003E0 0E0001E01C0001F07800007FE000001F80001E1F7E9D22>I<003F007C0000FFC1FF0001 C1E383800380F703C00700F60FC00E00FE0FC01C00FC0FC01800FC0FC03800FC07003000 F800003000F800002001F800000001F000000001F000000001F000000003F000000003E0 00000003E000000003E000000007E001000007E003000007C003003807C007007C0FC006 00FC0FC00E00FC1FC00C00FC1BC01C00F03BE038007071E0F0003FE0FFC0000F803F0000 221F7E9D28>120 D<000000C0000001E0000000E0000000F0000000707FFFFFFCFFFFFF FC7FFFFFFC000001F0000003E00000078000000700000006001E0D74AE23>126 D E /FB 11 62 df<00030007000E001C0038007000F001E001C003C0078007800F000F 001E001E001E003C003C003C003C0078007800780078007800F800F800F000F000F000F0 00F000F000F000F000F000F000F000F800F800780078007800780078003C003C003C003C 001E001E001E000F000F000780078003C001C001E000F000700038001C000E0007000310 437AB11B>40 DI<0000038000000000038000000000038000000000038000000000038000000000 038000000000038000000000038000000000038000000000038000000000038000000000 038000000000038000000000038000000000038000000000038000000000038000000000 03800000000003800000000003800000000003800000000003800000FFFFFFFFFFFCFFFF FFFFFFFCFFFFFFFFFFFC0000038000000000038000000000038000000000038000000000 038000000000038000000000038000000000038000000000038000000000038000000000 038000000000038000000000038000000000038000000000038000000000038000000000 038000000000038000000000038000000000038000000000038000000000038000002E2F 7CA737>43 D<003FC00000FFF00003E07C0007C03E000F801F000F000F001E0007801E00 07803E0007C03E0007C07C0003E07C0003E07C0003E07C0003E07C0003E0FC0003F0FC00 03F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F0FC00 03F0FC0003F0FC0003F0FC0003F0FC0003F0FC0003F07C0003E07C0003E07C0003E07E00 07E03E0007C03E0007C03E0007C01F000F800F000F000F801F0007C03E0003F0FC0000FF F000003FC0001C2D7DAB23>48 D<000C00003C00007C0003FC00FFFC00FC7C00007C0000 7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000 7C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000 7C00007C00007C00007C00007C00007C00007C00007C00007C00007C0000FE007FFFFE7F FFFE172C7AAB23>I<007F800001FFF0000780FC000E003F001C001F8038000FC070000F C0600007E0F00007E0FC0007F0FE0007F0FE0003F0FE0003F0FE0003F07C0007F0000007 F0000007F0000007E000000FE000000FC000001FC000001F8000003F0000007E0000007C 000000F8000001F0000003E0000007C000000F8000001E0000003C00000078000000F000 3000E0003001C0003003800060070000600E0000E01FFFFFE03FFFFFE07FFFFFC0FFFFFF C0FFFFFFC01C2C7DAB23>I<003FC00001FFF00007C0FC000E007E001C003F001C001F80 3F001FC03F001FC03F800FC03F000FC03F000FC00C001FC000001FC000001F8000001F80 00003F0000003E0000007C000000F8000003F00000FFC00000FFF0000000FC0000003F00 00001F8000001FC000000FC000000FE000000FE0000007F0000007F0380007F07C0007F0 FE0007F0FE0007F0FE0007F0FE000FE0F8000FE060000FC070001FC038001F801E003F00 0780FC0001FFF000007FC0001C2D7DAB23>I<00000E0000000E0000001E0000003E0000 003E0000007E000000FE000000FE000001BE000003BE0000033E0000063E00000E3E0000 0C3E0000183E0000383E0000303E0000603E0000E03E0000C03E0001803E0003803E0003 003E0006003E000E003E000C003E0018003E0038003E0030003E0060003E00E0003E00FF FFFFFCFFFFFFFC00003E0000003E0000003E0000003E0000003E0000003E0000003E0000 003E0000003E0000007F00001FFFFC001FFFFC1E2D7EAC23>I<0C0001800FC01F800FFF FF000FFFFE000FFFFC000FFFF0000FFFC0000C7E00000C0000000C0000000C0000000C00 00000C0000000C0000000C0000000C0000000C1FC0000C7FF8000DE07C000F801F000F00 1F800E000F800C0007C0000007E0000007E0000003E0000003F0000003F0000003F00000 03F0780003F0FC0003F0FC0003F0FC0003F0FC0003F0F80007E0E00007E0600007C07000 0FC038000F801C001F000E003E000780F80001FFE000007F80001C2D7DAB23>I<0003F8 00000FFE00003E078000F8018001F007C003E00FC007C00FC00F800FC00F800FC01F0007 801F0000003E0000003E0000007E0000007E0000007C0000007C0FC000FC3FF000FCF07C 00FDC01E00FF800F00FF000F80FF0007C0FE0007E0FE0007E0FE0003E0FC0003F0FC0003 F0FC0003F0FC0003F07C0003F07C0003F07C0003F07E0003F07E0003F03E0003E03E0007 E01E0007E01F0007C00F000F8007801F0003C03E0001E07C00007FF000001FC0001C2D7D AB23>I61 D E /FC 41 127 df<00000007F0000000001F FE000000007C1F00000001F00FC0000007C007E000000F8003E000001F0003F000003E00 01F800007E0001F80000FC0001F80000F80001FC0001F80001FC0003F00001FC0003F000 01FC0007E00001FC0007E00001FC000FC00001FC000FC00003FC001FC00003FC001F8000 03FC001F800003FC001F800007FC003F800007F8003F000007F8003F000007F8007F0000 0FF8007F00000FF0007E00000FF0007E00000FE000FE00001FE000FE00001FC000FC0000 3FC000FC00003F8001FC00007F8001FC00007F0001FC0000FE0001FC0000FC0003FE0001 F80003FE0003F00003F70007E00003F3800FC00007F1C01F000007F0E07E000007E07FF8 000007E01FC000000FE0000000000FE0000000000FC0000000000FC0000000001FC00000 00001FC0000000001F80000000001F80000000003F80000000003F80000000003F000000 00003F00000000007F00000000007F00000000007E00000000007E0000000000FE000000 0000FE0000000000FC00000000003800000000002E417DAB32>26 D<1E007F807F80FFC0FFC0FFC0FFC07F807F801E000A0A78891B>58 D<1E007F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60006000600060006000E000C000C000 C001C0018003800300070006000E001C003800700060000B1D78891B>I<000000000000 01C000000000000007E00000000000001FE00000000000007FC0000000000001FF000000 00000007FC0000000000001FF00000000000007FC0000000000001FF0000000000000FFC 0000000000003FF0000000000000FFC0000000000003FF0000000000000FF80000000000 003FE0000000000000FF80000000000003FE0000000000001FF80000000000007FE00000 00000001FF80000000000007FE0000000000001FF00000000000007FC0000000000001FF 00000000000007FC0000000000001FF00000000000007FC0000000000000FF0000000000 0000FF000000000000007FC00000000000001FF000000000000007FC00000000000001FF 000000000000007FC00000000000001FF000000000000007FE00000000000001FF800000 000000007FE00000000000001FF800000000000003FE00000000000000FF800000000000 003FE00000000000000FF800000000000003FF00000000000000FFC00000000000003FF0 0000000000000FFC00000000000001FF000000000000007FC00000000000001FF0000000 00000007FC00000000000001FF000000000000007FC00000000000001FE0000000000000 07E000000000000001C03B3878B44C>I<0000000018000000003C000000007C00000000 7C000000007800000000F800000000F800000000F000000001F000000001F000000001E0 00000003E000000003E000000003C000000007C000000007C000000007800000000F8000 00000F800000001F000000001F000000001E000000003E000000003E000000003C000000 007C000000007C000000007800000000F800000000F800000000F000000001F000000001 F000000003E000000003E000000003C000000007C000000007C000000007800000000F80 0000000F800000000F000000001F000000001F000000001E000000003E000000003E0000 00003C000000007C000000007C00000000F800000000F800000000F000000001F0000000 01F000000001E000000003E000000003E000000003C000000007C000000007C000000007 800000000F800000000F800000000F000000001F000000001F000000003E000000003E00 0000003C000000007C000000007C000000007800000000F800000000F800000000F00000 0001F000000001F000000001E000000003E000000003E000000007C000000007C0000000 07800000000F800000000F800000000F000000001F000000001F000000001E000000003E 000000003E000000003C000000007C000000007C000000007800000000F800000000F800 000000F000000000600000000026647BCA31>I<7000000000000000FC00000000000000 FF000000000000007FC00000000000001FF000000000000007FC00000000000001FF0000 00000000007FC00000000000001FF000000000000007FE00000000000001FF8000000000 00007FE00000000000001FF800000000000003FE00000000000000FF800000000000003F E00000000000000FF800000000000003FF00000000000000FFC00000000000003FF00000 000000000FFC00000000000001FF000000000000007FC00000000000001FF00000000000 0007FC00000000000001FF000000000000007FC00000000000001FE00000000000001FE0 0000000000007FC0000000000001FF00000000000007FC0000000000001FF00000000000 007FC0000000000001FF0000000000000FFC0000000000003FF0000000000000FFC00000 00000003FF0000000000000FF80000000000003FE0000000000000FF80000000000003FE 0000000000001FF80000000000007FE0000000000001FF80000000000007FE0000000000 001FF00000000000007FC0000000000001FF00000000000007FC0000000000001FF00000 000000007FC0000000000000FF00000000000000FC000000000000007000000000000000 3B3878B44C>I<000000000000300000000000000000700000000000000000F000000000 00000000F00000000000000001F00000000000000003F00000000000000003F000000000 00000007F80000000000000007F8000000000000000FF8000000000000001FF800000000 0000001FF80000000000000037F80000000000000037F80000000000000067F800000000 000000E7F800000000000000C7F80000000000000187FC0000000000000187FC00000000 00000307FC0000000000000703FC0000000000000603FC0000000000000C03FC00000000 00000C03FC0000000000001803FC0000000000003803FC0000000000003003FC00000000 00006003FE0000000000006003FE000000000000C003FE000000000001C001FE00000000 00018001FE0000000000030001FE0000000000030001FE0000000000060001FE00000000 000E0001FE00000000000C0001FE0000000000180001FE0000000000180001FF00000000 00300001FF0000000000700000FF0000000000600000FF0000000000C00000FF00000000 00C00000FF0000000001800000FF0000000003FFFFFFFF0000000003FFFFFFFF00000000 07FFFFFFFF0000000006000000FF800000000C000000FF800000001C0000007F80000000 180000007F80000000300000007F80000000300000007F80000000600000007F80000000 E00000007F80000000C00000007F80000001800000007F80000001800000007FC0000003 000000007FC0000007000000003FC0000006000000003FC000000E000000003FC000001C 000000003FC000003C000000003FC000007C000000003FC00000FE000000007FE00007FF 00000001FFE0007FFFF000007FFFFFC0FFFFF000007FFFFFC0FFFFE000007FFFFFC04247 7DC649>65 D<0000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFC000000 FFC000003FFC0000007F80000003F8000000FF80000001F8000000FF80000000F8000000 FF0000000078000000FF0000000078000000FF0000000038000001FF0000000038000001 FE0000000038000001FE0000000038000001FE0000000038000003FE0000000030000003 FC0000000030000003FC0000000030000003FC0000000030000007FC0000000030000007 F80000600030000007F80000600030000007F80000E0003000000FF80000C0000000000F F00000C0000000000FF00000C0000000000FF00001C0000000001FF0000180000000001F E0000380000000001FE0000780000000001FE0000F80000000003FE0007F00000000003F FFFFFF00000000003FFFFFFF00000000003FFFFFFF00000000007FC0007E00000000007F 80001E00000000007F80001E00000000007F80000E0000000000FF80000C0000000000FF 00000C0000000000FF00000C0000000000FF00001C0000000001FF0000180003000001FE 0000180003000001FE0000180007000001FE0000180006000003FE0000000006000003FC 000000000E000003FC000000000C000003FC000000001C000007FC0000000018000007F8 0000000038000007F80000000030000007F8000000007000000FF8000000007000000FF0 00000000E000000FF000000001E000000FF000000001C000001FF000000003C000001FE0 00000007C000001FE00000000F8000003FE00000003F8000003FE00000007F0000003FC0 000003FF000000FFC000003FFE0000FFFFFFFFFFFFFE0000FFFFFFFFFFFFFE0000FFFFFF FFFFFFFC000046447CC348>69 D<0000000001FF800018000000003FFFF0003800000001 FFFFFC003800000007FF007E00780000001FF0000F80F00000007F800003C1F0000001FE 000001C3F0000003FC000000E7F000000FF00000007FE000001FE00000003FE000003FC0 0000003FE00000FF000000001FE00001FE000000001FC00003FC000000000FC00007F800 0000000FC0000FF8000000000FC0000FF0000000000F80001FE0000000000780003FC000 0000000780007FC000000000078000FF8000000000070000FF0000000000070001FF0000 000000070003FE0000000000070003FE0000000000060007FC0000000000060007FC0000 00000006000FF8000000000006000FF8000000000000001FF8000000000000001FF00000 00000000001FF0000000000000003FF0000000000000003FE0000000000000003FE00000 00000000003FE0000000000000007FE0000000000000007FC0000000000000007FC00000 00000000007FC0000000000000007FC000000000000000FF8000000000000000FF800000 01FFFFFF80FF80000003FFFFFF80FF80000003FFFFFF80FF8000000000FFE000FF800000 00007FC000FF80000000007FC000FF80000000007FC0007F80000000007F80007F800000 00007F80007F8000000000FF80007F8000000000FF00007F8000000000FF00003FC00000 0000FF00003FC000000001FF00003FC000000001FE00001FE000000001FE00001FE00000 0001FE00000FE000000003FE00000FF000000003FC000007F800000007FC000003F80000 000FFC000001FC0000001FFC000000FE0000003DF80000007F80000078F80000003FC000 01E0F80000001FF00007C07800000007FE007F007000000001FFFFFC0030000000003FFF F000000000000007FF000000000045487CC54D>71 D<0000FFFFFFE003FFFFFF800000FF FFFFE003FFFFFF800000FFFFFFE003FFFFFF80000000FFE0000003FF80000000007F8000 0001FE0000000000FF80000003FE0000000000FF80000003FE0000000000FF00000003FC 0000000000FF00000003FC0000000000FF00000007FC0000000001FF00000007FC000000 0001FE00000007F80000000001FE00000007F80000000001FE0000000FF80000000003FE 0000000FF80000000003FC0000000FF00000000003FC0000000FF00000000003FC000000 1FF00000000007FC0000001FF00000000007F80000001FE00000000007F80000001FE000 00000007F80000003FE0000000000FF80000003FE0000000000FF00000003FC000000000 0FF00000003FC0000000000FF00000007FC0000000001FF00000007FC0000000001FE000 00007F80000000001FE00000007F80000000001FE0000000FF80000000003FE0000000FF 80000000003FFFFFFFFFFF00000000003FFFFFFFFFFF00000000003FFFFFFFFFFF000000 00007FC0000001FF00000000007F80000001FE00000000007F80000001FE00000000007F 80000003FE0000000000FF80000003FE0000000000FF00000003FC0000000000FF000000 03FC0000000000FF00000007FC0000000001FF00000007FC0000000001FE00000007F800 00000001FE00000007F80000000001FE0000000FF80000000003FE0000000FF800000000 03FC0000000FF00000000003FC0000000FF00000000003FC0000001FF00000000007FC00 00001FF00000000007F80000001FE00000000007F80000001FE00000000007F80000003F E0000000000FF80000003FE0000000000FF00000003FC0000000000FF00000003FC00000 00000FF00000007FC0000000001FF00000007FC0000000001FE00000007F80000000001F E00000007F80000000003FE0000000FF80000000003FE0000000FF80000000003FC00000 00FF0000000000FFE0000003FF80000000FFFFFFE003FFFFFF800000FFFFFFE003FFFFFF 800000FFFFFFE003FFFFFF80000051447CC351>I<00007FFFFFF800007FFFFFF800007F FFFFF00000007FF0000000003FC0000000007FC0000000007FC0000000007F8000000000 7F80000000007F8000000000FF8000000000FF0000000000FF0000000000FF0000000001 FF0000000001FE0000000001FE0000000001FE0000000003FE0000000003FC0000000003 FC0000000003FC0000000007FC0000000007F80000000007F80000000007F8000000000F F8000000000FF0000000000FF0000000000FF0000000001FF0000000001FE0000000001F E0000000001FE0000000003FE0000000003FC0000000003FC0000000003FC0000000007F C0000000007F80000000007F80000000007F8000000000FF8000000000FF0000000000FF 0000000000FF0000000001FF0000000001FE0000000001FE0000000001FE0000000003FE 0000000003FC0000000003FC0000000003FC0000000007FC0000000007F80000000007F8 0000000007F8000000000FF8000000000FF0000000000FF0000000001FF0000000001FF0 000000001FE0000000007FF00000007FFFFFF00000FFFFFFF00000FFFFFFF000002D447D C32B>I<0000FFFFC00000000003FFFE0000FFFFC00000000007FFFE0000FFFFC0000000 000FFFFE000000FFC0000000000FFE000000006FE0000000001BF800000000EFE0000000 001FF800000000EFE00000000037F800000000CFE00000000067F000000000CFE0000000 0067F000000000CFE000000000CFF000000001CFE0000000018FF0000000018FE0000000 018FE00000000187F0000000030FE00000000187F0000000031FE00000000387F0000000 061FE00000000307F00000000C1FC00000000307F00000000C1FC00000000307F0000000 183FC00000000707F0000000303FC00000000607F0000000303F800000000603F8000000 603F800000000603F8000000607F800000000E03F8000000C07F800000000C03F8000001 807F000000000C03F8000001807F000000000C03F800000300FF000000001C03F8000006 00FF000000001803F800000600FE000000001801FC00000C00FE000000001801FC00000C 01FE000000003801FC00001801FE000000003001FC00003001FC000000003001FC000030 01FC000000003001FC00006003FC000000007001FC0000C003FC000000006001FC0000C0 03F8000000006000FE00018003F8000000006000FE00018007F800000000E000FE000300 07F800000000C000FE00060007F000000000C000FE00060007F000000000C000FE000C00 0FF000000001C000FE0018000FF0000000018000FE0018000FE00000000180007F003000 0FE00000000180007F0030001FE00000000380007F0060001FE00000000300007F00C000 1FC00000000300007F00C0001FC00000000300007F0180003FC00000000700007F030000 3FC00000000600007F0300003F800000000600003F8600003F800000000600003F860000 7F800000000E00003F8C00007F800000000C00003F9800007F000000000C00003F980000 7F000000000C00003FB00000FF000000001C00003FE00000FF000000001800003FE00000 FE000000003800001FC00000FE000000003800001FC00001FE000000007800001F800001 FE00000000FC00001F000001FC00000003FF00001F000007FE000000FFFFF8001E0007FF FFFE0000FFFFF8001C0007FFFFFE0000FFFFF8000C0007FFFFFE00005F447BC35E>77 D<0000FFFFC000000FFFFF800000FFFFE000000FFFFF800000FFFFE000000FFFFF800000 007FE00000007FE0000000007FF00000001F80000000007FF00000000F0000000000EFF8 0000000E0000000000CFF80000000E0000000000C7F80000000C0000000000C7FC000000 1C0000000001C7FC0000001C000000000183FE00000018000000000183FE000000180000 00000181FF00000038000000000381FF00000038000000000300FF000000300000000003 00FF80000030000000000300FF800000700000000007007FC00000700000000006007FC0 0000600000000006003FC00000600000000006003FE00000E0000000000E003FE00000E0 000000000C001FF00000C0000000000C001FF00000C0000000000C000FF80001C0000000 001C000FF80001C000000000180007F800018000000000180007FC000180000000001800 07FC00038000000000380003FE00038000000000300003FE00030000000000300001FE00 030000000000300001FF00070000000000700001FF00070000000000600000FF80060000 000000600000FF800600000000006000007FC00E0000000000E000007FC00E0000000000 C000003FC00C0000000000C000003FE00C0000000000C000003FE01C0000000001C00000 1FF01C00000000018000001FF01800000000018000000FF01800000000018000000FF838 00000000038000000FF838000000000300000007FC30000000000300000007FC30000000 000300000003FE70000000000700000003FE70000000000600000001FE60000000000600 000001FF60000000000600000001FFE0000000000E00000000FFE0000000000C00000000 FFC0000000000C000000007FC0000000000C000000007FC0000000001C000000007FC000 00000018000000003F800000000038000000003F800000000038000000001F8000000000 78000000001F8000000000FC000000000F0000000003FF000000000F00000000FFFFF800 00000F00000000FFFFF80000000700000000FFFFF8000000060000000051447CC34E>I< 0000000003FF000000000000007FFFF0000000000001FC01FC00000000000FE0007F0000 0000003F00001FC000000000FE000007E000000001F8000003F000000007F0000001F800 00000FC0000000FC0000001F80000000FE0000007F000000007E000000FE000000007F00 0001FC000000003F000003F8000000003F800007F0000000003F80000FF0000000001FC0 000FE0000000001FC0001FC0000000001FC0003F80000000001FE0007F80000000001FE0 007F00000000001FE000FF00000000001FE001FE00000000000FE001FE00000000001FF0 03FC00000000001FF003FC00000000001FF007F800000000001FF007F800000000001FF0 0FF800000000001FF00FF000000000001FF01FF000000000001FE01FF000000000001FE0 1FE000000000003FE03FE000000000003FE03FE000000000003FE03FE000000000003FE0 7FC000000000007FC07FC000000000007FC07FC000000000007FC07FC00000000000FF80 7FC00000000000FF80FF800000000000FF80FF800000000001FF00FF800000000001FF00 FF800000000001FF00FF800000000003FE00FF800000000003FE00FF800000000007FC00 FF800000000007F800FF80000000000FF8007F80000000000FF0007F80000000001FF000 7F80000000001FE0007F80000000003FC0007F80000000007F80003FC0000000007F8000 3FC000000000FF00003FC000000001FE00001FC000000003FC00001FE000000007F80000 0FE000000007F0000007F00000000FE0000007F00000003F80000003F80000007F000000 01FC000000FE00000000FE000001F8000000007F000007F0000000003F80001FC0000000 000FE0007F000000000003F803FC000000000000FFFFE00000000000000FFE0000000000 44487CC54B>I<0000FFFFFFFFFE00000000FFFFFFFFFFE0000000FFFFFFFFFFF8000000 00FFC0000FFE000000007F800001FF00000000FF8000007F80000000FF8000003FC00000 00FF0000001FE0000000FF0000001FE0000001FF0000000FF0000001FF0000000FF00000 01FE0000000FF0000001FE0000000FF8000003FE0000000FF8000003FE0000000FF80000 03FC0000000FF8000003FC0000000FF8000007FC0000000FF8000007FC0000001FF00000 07F80000001FF0000007F80000001FF000000FF80000003FE000000FF80000003FE00000 0FF00000003FC000000FF00000007FC000001FF00000007F8000001FF0000000FF000000 1FE0000001FE0000001FE0000003FC0000003FE0000007F80000003FE000000FF0000000 3FC000003FC00000003FC00000FF000000007FC00007FC000000007FFFFFFFF000000000 7FFFFFFF80000000007F8000000000000000FF8000000000000000FF8000000000000000 FF0000000000000000FF0000000000000001FF0000000000000001FF0000000000000001 FE0000000000000001FE0000000000000003FE0000000000000003FE0000000000000003 FC0000000000000003FC0000000000000007FC0000000000000007FC0000000000000007 F80000000000000007F8000000000000000FF8000000000000000FF8000000000000000F F0000000000000000FF0000000000000001FF0000000000000001FF0000000000000001F E0000000000000001FE0000000000000003FE0000000000000003FE0000000000000003F C000000000000000FFE0000000000000FFFFFFE00000000000FFFFFFE00000000000FFFF FFE0000000000045447CC33F>I<0000FFFFFFFFF000000000FFFFFFFFFF00000000FFFF FFFFFFE000000000FFC0003FF8000000007F800007FC00000000FF800001FE00000000FF 8000007F00000000FF0000003F80000000FF0000003FC0000000FF0000001FE0000001FF 0000001FE0000001FE0000001FE0000001FE0000001FF0000001FE0000001FF0000003FE 0000001FF0000003FC0000001FF0000003FC0000001FF0000003FC0000001FF0000007FC 0000003FE0000007F80000003FE0000007F80000003FE0000007F80000007FC000000FF8 0000007F8000000FF0000000FF8000000FF0000000FF0000000FF0000001FE0000001FF0 000003FC0000001FE0000007F80000001FE000000FE00000001FE000001FC00000003FE0 00007F000000003FC00003FC000000003FC0001FF0000000003FFFFFFF80000000007FFF FFFE00000000007F80007F80000000007F80000FC0000000007F800007F000000000FF80 0003F800000000FF000003FC00000000FF000001FC00000000FF000001FE00000001FF00 0001FE00000001FE000000FE00000001FE000000FE00000001FE000001FE00000003FE00 0001FE00000003FC000001FE00000003FC000001FE00000003FC000003FE00000007FC00 0003FE00000007F8000003FE00000007F8000003FE00000007F8000007FC0000000FF800 0007FC0000000FF0000007FC0000000FF0000007FC0000000FF0000007FC0000001FF000 0007FC0018001FE0000007FC0018001FE0000007FC0018003FE0000007F80038003FE000 0007F80030003FC0000007FC007000FFE0000003FC00E0FFFFFFE00003FC01C0FFFFFFE0 0001FC0380FFFFFFE00000FE0F000000000000003FFE0000000000000007F00045467CC3 4A>82 D<00000000FF80018000000007FFF003800000003FFFFC0380000000FF007E0780 000001F8000F0F80000007E000079F0000000FC00003FF0000001F000001FF0000003E00 0000FF0000007C000000FE0000007C0000007E000000F80000007E000001F00000007E00 0001F00000003C000003E00000003C000003E00000003C000007E00000003C000007C000 000038000007C000000038000007C00000003800000FC00000003800000FC00000003000 000FE00000003000000FE00000003000000FE00000000000000FF000000000000007F800 000000000007FC00000000000007FF00000000000003FFE0000000000003FFFC00000000 0001FFFFC00000000000FFFFFC00000000007FFFFF00000000003FFFFFC0000000000FFF FFE00000000003FFFFF800000000003FFFF8000000000007FFFC0000000000007FFE0000 000000000FFE00000000000003FE00000000000001FF00000000000000FF000000000000 007F000000000000007F000000000000003F000000000000003F000006000000003F0000 06000000003F000006000000003F000006000000003F00000E000000003E00000E000000 003E00000C000000003E00000C000000007E00001E000000007C00001E000000007C0000 1E00000000F800001E00000000F000003F00000001F000003F00000003E000003F800000 07C000003F8000000F8000007FC000001F0000007FE000003E0000007CF800007C000000 787E0001F8000000F01FC00FE0000000E007FFFF80000000E001FFFE00000000C0003FF0 0000000039487BC53C>I<01FFFFFFFFFFFFFFC003FFFFFFFFFFFFFFC003FFFFFFFFFFFF FFC003FF0000FF8000FF8007F00000FF00001F8007E00001FF00000F8007800001FF0000 07800F000001FE000007800F000001FE000003800E000001FE000003801C000003FE0000 03001C000003FC0000030018000003FC0000030038000003FC0000030030000007FC0000 030030000007F80000070070000007F80000060060000007F800000600E000000FF80000 0600C000000FF000000600C000000FF000000600C000000FF0000006000000001FF00000 00000000001FE0000000000000001FE0000000000000001FE0000000000000003FE00000 00000000003FC0000000000000003FC0000000000000003FC0000000000000007FC00000 00000000007F80000000000000007F80000000000000007F8000000000000000FF800000 0000000000FF0000000000000000FF0000000000000000FF0000000000000001FF000000 0000000001FE0000000000000001FE0000000000000001FE0000000000000003FE000000 0000000003FC0000000000000003FC0000000000000003FC0000000000000007FC000000 0000000007F80000000000000007F80000000000000007F8000000000000000FF8000000 000000000FF0000000000000000FF0000000000000000FF0000000000000001FF0000000 000000001FE0000000000000001FE0000000000000001FE0000000000000003FE0000000 000000003FC0000000000000003FC0000000000000007FC0000000000000007FC0000000 00000000FFC000000000000003FFE000000000001FFFFFFFFC000000001FFFFFFFFC0000 00001FFFFFFFF80000000042447EC339>I<00000FC0000000007FF000000001F8381C00 0007E01C7E00000FC00E7E00003F0007FE00007F0003FC0000FE0003FC0001FC0003FC00 01F80001FC0003F80001F80007F00001F8000FF00001F8000FE00003F8001FE00003F000 1FE00003F0003FC00003F0003FC00007F0007FC00007E0007F800007E0007F800007E000 7F80000FE000FF80000FC000FF00000FC000FF00000FC000FF00001FC000FF00001F8000 FE00001F8000FE00001F8000FE00003F8030FE00003F0070FE00003F0060FE00003F0060 FE00007F00E0FE00007F00C0FE0000FE00C07E0001FE00C07E0003FE01C03E00073E0180 3F000E3E03801F001C3E03000F80381F070007C0F00F0E0001FFC007FC00007F0001F000 2C2D7CAB33>97 D<000FE0000007FFE0000007FFE0000007FFE00000001FC00000000FC0 0000001FC00000001FC00000001F800000001F800000001F800000003F800000003F0000 00003F000000003F000000007F000000007E000000007E000000007E00000000FE000000 00FC00000000FC00000000FC00000001FC00000001F800000001F80FC00001F83FF00003 F8F07C0003F3C03E0003F7001F0003FE001F8007FC000F8007F8000FC007F0000FC007F0 000FE00FE0000FE00FC0000FE00FC0000FE00FC0000FE01FC0000FE01F80000FE01F8000 0FE01F80001FE03F80001FE03F00001FE03F00001FE03F00003FE07F00003FC07E00003F C07E00003FC07E00007FC07E00007F80FC00007F80FC00007F00FC0000FF00FC0000FF00 FC0001FE007C0001FC007C0001FC007C0003F8007C0007F0007C0007E0003C000FE0003E 001FC0001E003F80001F007E00000F00FC000007C1F0000001FFC00000007F0000002346 7CC429>I<000007F80000003FFF000000FC07C00003F000E00007E00070001F80003000 3F000070007E0003F800FE0007F801FC0007F803F8000FF007F8000FF007F0000FF00FF0 0007C01FE00000001FE00000003FC00000003FC00000007FC00000007F800000007F8000 00007F80000000FF80000000FF00000000FF00000000FF00000000FF00000000FE000000 00FE00000000FE00000000FE00000000FE00000000FE00000018FE00000038FE00000070 7E000000E07E000001C03F000003803F000007001F80001E000F8000380007C001F00003 F00FC00000FFFE0000001FF00000252D7CAB2A>I<0000000001FC00000000FFFC000000 00FFFC00000000FFFC0000000003F80000000001F80000000003F80000000003F8000000 0003F00000000003F00000000007F00000000007F00000000007E00000000007E0000000 000FE0000000000FE0000000000FC0000000000FC0000000001FC0000000001FC0000000 001F80000000001F80000000003F80000000003F80000000003F0000000FC03F0000007F F07F000001F8387F000007E01C7E00000FC00E7E00003F0007FE00007F0003FE0000FE00 03FC0001FC0003FC0001F80001FC0003F80001FC0007F00001F8000FF00001F8000FE000 03F8001FE00003F8001FE00003F0003FC00003F0003FC00007F0007FC00007F0007F8000 07E0007F800007E0007F80000FE000FF80000FE000FF00000FC000FF00000FC000FF0000 1FC000FF00001FC000FE00001F8000FE00001F8000FE00003F8030FE00003F8070FE0000 3F0060FE00003F0060FE00007F00E0FE00007F00C0FE0000FE00C07E0001FE00C07E0003 FE01C03E00073E01803F000E3E03801F001C3E03000F80381F070007C0F00F0E0001FFC0 07FC00007F0001F0002E467CC433>I<0000000007E0000000001FF8000000007C1C0000 0000F80E00000001F03E00000003E07F00000003E0FF00000007E1FF00000007C1FF0000 0007C1FE0000000FC0FC0000000FC0780000000FC0000000001F80000000001F80000000 001F80000000001F80000000003F80000000003F00000000003F00000000003F00000000 003F00000000007F00000000007E00000000007E00000000007E00000000007E00000000 FFFFFF800000FFFFFF800000FFFFFF80000000FC0000000000FC0000000000FC00000000 01FC0000000001F80000000001F80000000001F80000000001F80000000003F800000000 03F00000000003F00000000003F00000000003F00000000007F00000000007E000000000 07E00000000007E00000000007E0000000000FE0000000000FC0000000000FC000000000 0FC0000000000FC0000000000FC0000000001FC0000000001F80000000001F8000000000 1F80000000001F80000000003F80000000003F00000000003F00000000003F0000000000 3F00000000007F00000000007E00000000007E00000000007E00000000007E0000000000 FC0000000000FC0000000000FC0000000000FC0000000000F80000000001F80000000001 F80000000001F00000000001F00000001C03F00000007F03E0000000FF03E0000000FF03 C0000000FF07C0000000FF0780000000FE0F00000000F80F00000000601E00000000783C 000000001FF00000000007C000000000305A7BC530>102 D<0000007E0000000003FF80 0000000FC1E0E000001F0073F000007E0033F00000FC003FF00001F8001FF00003F8001F E00007F0000FE0000FE0000FE0000FE0000FE0001FC0000FC0003FC0000FC0003F80001F C0007F80001FC0007F00001F8000FF00001F8000FF00003F8001FF00003F8001FE00003F 0001FE00003F0001FE00007F0003FE00007F0003FC00007E0003FC00007E0003FC0000FE 0003FC0000FE0003F80000FC0003F80000FC0003F80001FC0003F80001FC0003F80001F8 0003F80001F80003F80003F80003F80007F80001F80007F00001F8000FF00000F8001FF0 0000FC003FF000007C0077E000003E01E7E000001F078FE0000007FE0FE0000001F80FC0 000000000FC0000000001FC0000000001FC0000000001F80000000001F80000000003F80 000000003F80000000003F00000000003F00001C00007E00007F0000FE0000FF0000FC00 00FF0001F80000FF0003F80000FE0007F00000FE000FC00000F8001F8000007C00FE0000 001FFFF800000003FFC00000002C407EAB2F>I<0000FE000000007FFE000000007FFE00 0000007FFE0000000001FC0000000000FC0000000001FC0000000001FC0000000001F800 00000001F80000000003F80000000003F80000000003F00000000003F00000000007F000 00000007F00000000007E00000000007E0000000000FE0000000000FE0000000000FC000 0000000FC0000000001FC0000000001FC0000000001F80000000001F803FC000003F81FF F000003F87C0FC00003F0E007E00003F3C003E00007F70003F00007FE0001F00007FC000 1F80007F80001F8000FF80001F8000FF00001F8000FE00001F8000FE00001F8001FC0000 3F8001FC00003F0001F800003F0001F800003F0003F800007F0003F800007E0003F00000 7E0003F000007E0007F00000FE0007F00000FC0007E00000FC0007E00001FC000FE00001 F8000FE00001F8000FC00003F8000FC00003F0001FC00003F0071FC00007F0061F800007 E0061F80000FE0063F80000FC00E3F80000FC00C3F00000FC01C3F00000F80187F00000F 80387F00000F80307E00000F80707E00000F80E0FE00000781C0FE000007C380FC000001 FF00380000007C0030467BC438>I<00001E0000003F0000007F000000FF000000FF0000 00FF0000007E000000380000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000003E000000 FF800001C3C0000781E0000601F0000E01F0001C01F0001803F0003803F0003003F00030 03F0007007F0006007E0006007E000E00FE000C00FC000001FC000001F8000001F800000 3F8000003F0000003F0000007F0000007E000000FE000000FC000000FC000001FC000001 F8000001F8038003F8030003F0030007F0030007E0070007E0060007E00E0007E00C0007 C01C0007C0180007C0380007C0700003C0E00003E1C00000FF8000003E000019437DC121 >I<000000003C00000000FE00000000FE00000001FE00000001FE00000001FE00000001 FC0000000070000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000FC00000003FF0000000F078000001C07C000003803E000007003E00000 E003E00000C003E00001C003E000018007E000038007E000030007E000070007E0000600 0FE0000E000FE0000C000FC00000000FC00000001FC00000001FC00000001F800000001F 800000003F800000003F800000003F000000003F000000007F000000007F000000007E00 0000007E00000000FE00000000FE00000000FC00000000FC00000001FC00000001FC0000 0001F800000001F800000003F800000003F800000003F000000003F000000007F0000000 07F000000007E000000007E00000000FE00000000FE00000000FC00000000FC00000001F C00000001F800000001F800000003F80001C003F00007F003F0000FF007E0000FF00FC00 00FF00FC0000FE01F80000FE03E00000F807C00000781F8000003FFE00000007F0000000 275681C128>I<0000FE000000007FFE000000007FFE000000007FFE0000000001FC0000 000000FC0000000001FC0000000001FC0000000001F80000000001F80000000003F80000 000003F80000000003F00000000003F00000000007F00000000007F00000000007E00000 000007E0000000000FE0000000000FE0000000000FC0000000000FC0000000001FC00000 00001FC0000000001F80000000001F80003F00003F8000FFC0003F8003C0E0003F000703 E0003F001E0FE0007F00380FE0007F00701FE0007E00E01FE0007E01C01FE000FE01801F C000FE0380070000FC0700000000FC0E00000001FC1C00000001FC3800000001F8700000 0001F8E000000003FBC000000003FF0000000003FF8000000003FFF800000007F1FE0000 0007F03F80000007E00FE0000007E007F000000FE003F000000FE003F800000FC001F800 000FC001F800001FC001F801C01FC001F801801F8001F801801F8001F801803F8001F803 803F8001F803003F0001F003003F0001F007007F0001F006007F0001F00E007E0001F00C 007E0001F01C00FE0000F03800FE0000787000FC00003FE0003800000F80002B467BC433 >I<0003F801FFF801FFF801FFF80007F00003F00007F00007F00007E00007E0000FE000 0FE0000FC0000FC0001FC0001FC0001F80001F80003F80003F80003F00003F00007F0000 7F00007E00007E0000FE0000FE0000FC0000FC0001FC0001FC0001F80001F80003F80003 F80003F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0001FC0001F C0001F80001F80003F80003F80003F00003F00007F00607F00E07E00C07E00C07E01C0FE 0180FC0180FC0180FC03807C03007C07007C06003E0E001E1C000FF80003E00015467CC4 1D>I<00F80003FC00007F800003FE001FFF0003FFE000071F007C0FC00F81F8000E0F80 E007E01C00FC001C0FC3C003E078007C001807C70003F0E0007E001807CE0001F1C0003E 003807DC0001FB80003F003007D80001FB00003F00300FF80001FF00003F00700FF00001 FE00003F00600FE00001FC00003F00600FE00001FC00003F00E00FC00003F800007F00C0 1FC00003F800007E00C01F800003F000007E00001F800003F000007E00001F800007F000 00FE00003F800007F00000FC00003F000007E00000FC00003F000007E00000FC00003F00 000FE00001FC00007F00000FE00001F800007E00000FC00001F800007E00000FC00003F8 00007E00001FC00003F00000FE00001FC00003F00000FC00001F800007F00000FC00001F 800007E00000FC00003F800007E00E01FC00003F80000FE00C01F800003F00000FC00C01 F800003F00001FC00C01F800007F00001F801C03F800007F00001F801803F000007E0000 1F803803F000007E00001F003003F00000FE00001F007007F00000FE00001F006007E000 00FC00001F00E007E00000FC00001F01C007E00001FC00000F03800FE00001FC00000F87 000FC00001F8000003FE000380000070000000F8004F2D7DAB55>I<00F80003FC000003 FE001FFF0000071F007C0FC0000E0F80E007E0000C07C3C003E0001C07C70003F0001807 CE0001F0003807DC0001F8003007D80001F800300FF80001F800700FF00001F800600FE0 0001F800600FE00001F800E00FC00003F800C01FC00003F000C01F800003F000001F8000 03F000001F800007F000003F800007E000003F000007E000003F000007E000003F00000F E000007F00000FC000007E00000FC000007E00001FC000007E00001F800000FE00001F80 0000FC00003F800000FC00003F000000FC00003F007001FC00007F006001F800007E0060 01F80000FE006001F80000FC00E003F80000FC00C003F00000FC01C003F00000F8018003 F00000F8038007F00000F8030007E00000F8070007E00000F80E0007E00000781C000FE0 00007C38000FC000001FF0000380000007C000342D7DAB3A>I<000003FC000000003FFF 00000000FE07C0000003F003F0000007E001F800001FC000FC00003F00007C00007F0000 7E0000FE00007F0001FC00003F0003F800003F0007F800003F8007F000003F800FF00000 3F801FE000003F801FE000003F803FC000003F803FC000007F807FC000007F807F800000 7F807F8000007F807F800000FF80FF800000FF00FF000000FF00FF000000FF00FF000001 FF00FF000001FE00FE000001FE00FE000003FC00FE000003FC00FE000003F800FE000007 F800FE000007F000FE00000FE000FE00001FE0007E00001FC0007E00003F80003F00007F 00003F0000FE00001F8001F800000FC003F0000007E00FC0000001F03F80000000FFFC00 0000001FE0000000292D7CAB2F>I<0003E0003F8000000FF800FFE000001C7C03C0F800 00383E07007C0000703F1E007E0000601F38003F0000601F70003F0000E01F60001F8000 C01FE0001F8000C03FC0001F8001C03F80001FC001803F00001FC001803F00001FC00380 7F00001FC003007F00001FC003007E00001FC000007E00001FC00000FE00003FC00000FE 00003FC00000FC00003FC00000FC00003FC00001FC00007FC00001FC00007F800001F800 007F800001F800007F800003F80000FF800003F80000FF000003F00000FF000003F00000 FE000007F00001FE000007F00001FC000007E00003FC000007E00003F800000FE00007F8 00000FE00007F000000FE0000FE000000FE0000FC000001FF0001F8000001FF0003F0000 001FB8007E0000001F9800FC0000003F9C01F80000003F8F07E00000003F03FF80000000 3F00FC000000007F0000000000007F0000000000007E0000000000007E000000000000FE 000000000000FE000000000000FC000000000000FC000000000001FC000000000001FC00 0000000001F8000000000001F8000000000003F8000000000003F8000000000007F80000 000000FFFFF000000000FFFFF000000000FFFFE000000000323F83AB31>I<00F8000FC0 03FE007FF0070F00F0380E0F83C07C0C07C701FC1C07CE01FC1807DC03FC3807D803FC30 07F803FC300FF003F8700FE000E0600FE00000600FC00000E00FC00000C01FC00000C01F 800000001F800000001F800000003F800000003F000000003F000000003F000000007F00 0000007E000000007E000000007E00000000FE00000000FC00000000FC00000000FC0000 0001FC00000001F800000001F800000001F800000003F800000003F000000003F0000000 03F000000007F000000007E000000007E000000007E00000000FE00000000FC000000003 80000000262D7DAB2C>114 D<00000FF00000007FFE000001F00F8000078001C0000F00 00E0001E000060003C000060003C0001F000780007F000780007F000F8000FE000F0000F E000F8000FE000F800038000FC00000000FE00000000FF00000000FFF80000007FFF8000 007FFFE000003FFFF800001FFFFC000007FFFE000000FFFE00000007FF00000000FF0000 00007F000000003F800000001F800E00001F803F00000F007F80000F007F80000F007F80 001F00FF00001E00FF00001E00FC00003C006000003C006000007800700000F000380001 E0001C0007C0000F803F000003FFFC0000007FE00000242D7BAB2E>I<00001C0000007E 0000007E0000007E000000FE000000FC000000FC000000FC000001FC000001F8000001F8 000001F8000003F8000003F0000003F0000003F0000007F0000007E0000007E0007FFFFF FCFFFFFFFCFFFFFFF8000FC000000FC000001FC000001F8000001F8000001F8000003F80 00003F0000003F0000003F0000007F0000007E0000007E0000007E000000FE000000FC00 0000FC000000FC000001FC000001F8000001F8000001F8000003F8000003F0000003F000 0003F0007007F0006007E0006007E000E007E000C00FE001C00FC001800FC003800FC007 0007C0060007C00E0007C01C0003E0380001E0F00000FFC000003F00001E3F7EBD23>I< 003E000000000000FF800000E00003C3C00003F0000703E00003F0000601F00003F0000E 01F00007F0001C01F00007F0001803F00007E0003803F00007E0003003F0000FE0003003 F0000FE0007007F0000FC0006007E0000FC0006007E0001FC000E00FE0001FC000C00FC0 001F8000001FC0001F8000001F80003F8000001F80003F8000003F80003F0000003F0000 3F0000003F00007F0000007F00007F0000007E00007E0000007E00007E0000007E0000FE 000000FE0000FE000000FC0000FC000000FC0000FC000000FC0001FC018000FC0001FC03 8001F80001F8030001F80001F8030001F80001F8070001F80003F8060001F80003F00600 00F80007F0060000F8000FF00E0000FC000DF00C00007C001DF01C00007C0039F0180000 3E00F0F83800001F03C07870000007FF803FE0000001FC000F8000312D7DAB38>I<003E 00000E0000FF80003F8003C3C0007F800703E0007F800601F0007F800E01F0007F801C01 F0007F801803F0003F803803F0001F803003F0000F803003F0000F807007F00007806007 E00007806007E0000780E00FE0000700C00FC0000300001FC0000300001F80000700001F 80000600003F80000600003F00000600003F00000E00007F00000C00007E00000C00007E 00000C00007E00001C0000FE0000180000FC0000180000FC0000380000FC0000300000FC 0000700001F80000600001F80000E00001F80000C00001F80001C00000F80001800000F8 0003800000FC0007000000FC00060000007C000E0000007E001C0000003F00780000000F 81E000000007FFC000000000FE000000292D7DAB2F>I<0000FC0007E00003FF801FFC00 0F07C0781E001C03E0E01F003801F1C07F007000F1807F00E000FB80FF01C000FF00FF01 8000FE00FF038000FE00FE030000FE0038070000FC0000060000FC0000060001FC00000E 0001F800000C0001F80000000001F80000000003F80000000003F00000000003F0000000 0003F00000000007F00000000007E00000000007E00000000007E0000000000FE0000000 000FC0000000000FC0000000000FC0000000001FC0003800001FC0003000001F80003000 001F80007000003F8000601E003F8000603F003F8000E07F807F8001C07F806F800180FF 80EF800380FF01CF800700FE0187C00E007C0383C01C003C0F01E078001FFC00FFE00003 F0003F8000302D7EAB37>120 D<003E0000000000FF800000E003C3C00003F00703E000 03F00601F00003F00E01F00007F01C01F00007E01803F00007E03803F00007E03003F000 0FE07003F0000FC06007F0000FC06007E0000FC06007E0001FC0E00FE0001F80C00FC000 1F80001FC0001F80001F80003F80001F80003F00003F80003F00003F00003F00003F0000 7F00007F00007E00007E00007E00007E00007E00007E0000FE0000FE0000FC0000FC0000 FC0000FC0000FC0000FC0001FC0000FC0001F80001F80001F80001F80001F80001F80003 F80001F80003F00001F80003F00000F80007F00000F8000FF00000FC000FE000007C001F E000007C003FE000003E00FFE000001F03CFC0000007FF8FC0000001FC0FC0000000001F C0000000001F80000000001F80000000003F80000000003F000007C0007F00001FE0007E 00001FE000FC00001FE000FC00003FC001F800003FC003F000003F8003E00000380007C0 000018000F8000001C001F0000000E007C0000000781F800000003FFE0000000007F0000 00002C407DAB30>I<000000003000000000007800000000007C00000000007C00000000 003C00000000003E00000000003F00000000001F007FFFFFFFFFC0FFFFFFFFFFC0FFFFFF FFFFC07FFFFFFFFFC0000000007F0000000000FC0000000001F80000000003F000000000 03E00000000007C00000000007C0000000000300002A146EC631>126 D E /FD 53 122 df<00000000007FF8000000000007FFFF00000000001FC00FC0000000 003E0001E000000000FC0000F000000001F80001F000000003F00007F000000003E00007 F000000007E0000FF000000007E0000FF00000000FC0000FF00000000FC0000FE0000000 1FC00003800000001F800000000000001F800000000000001F800000000000003F800000 000000003F000000000000003F000000000000003F000000000000003F00000000000000 7F000000000000007E000000000000007E000000000000007E000000000000007E000000 00000000FE000000000000FFFFFFFFFF000000FFFFFFFFFF000000FFFFFFFFFE00000000 FC00007E00000001FC0000FE00000001F80000FC00000001F80000FC00000001F80000FC 00000001F80001FC00000001F80001F800000003F80001F800000003F00001F800000003 F00003F800000003F00003F000000003F00003F000000007F00003F000000007E00007F0 00000007E00007E000000007E00007E000000007E00007E00000000FE0000FE00000000F C0000FC00000000FC0000FC00000000FC0000FC00000000FC0001FC00000001FC0001F80 0000001F80001F800000001F80001F800000001F80003F80E000001F80003F01E000003F 80003F01C000003F00003F01C000003F00003F01C000003F00007F03C000003F00007E03 8000007F00007E038000007E00007E078000007E00007E070000007E00003E070000007E 00003E0E000000FE00001E1E000000FC00001F1C000000FC000007F8000000FC000001E0 000000FC00000000000001F800000000000001F800000000000001F800000000000001F0 00000000000003F000000000000003F000000000001C03E000000000007F03E000000000 00FF07E00000000000FF07C00000000000FF07C00000000000FF0F800000000000FE0F00 0000000000F81F000000000000701E000000000000783C0000000000001FF00000000000 0007C00000000000003C5A83C537>12 D<00F003F807FC0FFC0FFC0FFC0FFC0FFC0FFC03 CC001C00180018003800300030007000E000C001C00180038007000E001C0038007000E0 00C0000E1D6BC41E>39 D<000000007000000000E000000001C000000003800000000700 0000000E000000003C000000007800000000F800000000F000000001E000000003C00000 0007800000000F800000001F000000001E000000003E000000007C000000007800000000 F800000001F000000001E000000003E000000007C000000007C00000000F800000000F80 0000001F000000001F000000003F000000003E000000007E000000007C000000007C0000 0000F800000000F800000001F800000001F000000001F000000003F000000003E0000000 03E000000007E000000007C000000007C00000000FC00000000FC00000000F800000000F 800000001F800000001F800000001F000000001F000000003F000000003F000000003E00 0000003E000000003E000000007E000000007E000000007C000000007C000000007C0000 00007C000000007C000000007C00000000F800000000F800000000F800000000F8000000 00F800000000F800000000F800000000F800000000F800000000F800000000F800000000 7800000000780000000078000000007800000000780000000078000000007C000000003C 000000003C000000003C000000003C000000001E000000001E000000000E000000000F00 0000000F0000000007000000000380000000038000000001C000000001C000000000E000 00000060000000246472CA28>I<00000060000000006000000000700000000038000000 0038000000001C000000001E000000000E000000000F000000000F000000000700000000 07800000000780000000078000000003C000000003C000000003C000000003C000000003 C000000003E000000003E000000001E000000001E000000001E000000001E000000001E0 00000001E000000001E000000003E000000003E000000003E000000003E000000003E000 000003E000000003E000000003E000000003E000000007E000000007E000000007C00000 0007C000000007C000000007C00000000FC00000000FC00000000F800000000F80000000 1F800000001F800000001F000000001F000000003F000000003F000000003E000000003E 000000007E000000007E000000007C00000000FC00000000FC00000000F800000001F800 000001F800000001F000000003F000000003E000000003E000000007E000000007C00000 000FC00000000F800000000F800000001F000000001F000000003E000000003E00000000 7C000000007800000000F800000001F000000001F000000003E000000003C000000007C0 0000000F800000000F000000001E000000003E000000007C000000007800000000F00000 0001E000000003C000000007800000000F000000001E000000003C000000007800000000 E000000000C00000000023647FCA28>I<00F003FC07FC07FC0FFE0FFE0FFE0FFE07FC03 CC000C001C00180018003800300070006000E001C00180038007000E001C0038007000E0 00C0000F1D7A891E>44 D<7FFFFFFFFFFFFFFFFFFFFFFEFFFFFE1805789723>I<0F003F C07FC07FC0FFC0FFC0FFC0FF807F003C000A0A76891E>I<0000003F8000000001FFE000 000007C0F80000001F007C0000003C003E00000078001E000000F0001F000001E0000F00 0003E0000F800007C0000F80000780000F80000F80000F80001F00000FC0001F00000FC0 003F00000FC0007E00000FC0007E00000FC000FE00000FC000FC00000FC000FC00001FC0 01FC00001FC001F800001F8003F800001F8003F800001F8003F000003F8007F000003F80 07F000003F8007F000003F000FE000007F000FE000007F000FE000007F000FE000007F00 1FC00000FE001FC00000FE001FC00000FE001FC00000FE003F800001FC003F800001FC00 3F800001FC003F800001FC007F000003F8007F000003F8007F000003F8007F000003F000 7F000007F0007E000007F0007E000007E000FE00000FE000FE00000FC000FE00000FC000 FC00001FC000FC00001F8000FC00001F8000FC00003F0000FC00003E0000FC00007E0000 7C00007C00007C0000FC00007C0000F800007C0001F000003C0003E000003E0003C00000 3E00078000001F001F0000000F803E00000007C0F800000001FFE0000000007F00000000 2A4475C132>48 D<00000000C000000001C000000001C000000003C000000007C0000000 0F800000001F800000003F800000007F80000001FF00000003FF0000000FFF0000007FFF 000007FCFE00000FF0FE00000700FE00000001FE00000001FC00000001FC00000001FC00 000003FC00000003F800000003F800000003F800000007F800000007F000000007F00000 0007F00000000FF00000000FE00000000FE00000000FE00000001FE00000001FC0000000 1FC00000001FC00000003FC00000003F800000003F800000003F800000007F800000007F 000000007F000000007F00000000FF00000000FE00000000FE00000000FE00000001FE00 000001FC00000001FC00000001FC00000003FC00000003F800000003F800000003F80000 0007F800000007F000000007F00000000FF00000000FF00000001FF00000003FF00000FF FFFFFC00FFFFFFFC00FFFFFFF800224276C132>I<0000001FE000000000FFFC00000003 FFFF00000007E03F8000001F800FC000003E0007E000007C0003E00000F80003F00001F0 0001F00003E00001F00003E00001F00007C00001F00007C00001F0000F800001F0000F80 0001F0000F800003F0001F800003E0001F800003E0001F800007E0001FC00007C0001FC0 000F80001FE0001F80001FF0003F00001FF8003E00000FFC007C00000FFF00F000000FFF 83E0000007FFC7C0000003FFFF00000001FFFC00000000FFF8000000007FFC000000003F FE00000000FFFF80000001EFFFC000000783FFE000001F01FFE000003E00FFF000007C00 7FF80000F8003FF80001F0001FF80003E0000FF80007C00007FC000F800003FC001F8000 01FC001F000001FC003F000001FC003E000000FC007E000000F8007C000000F8007C0000 00F8007C000001F800FC000001F000F8000001F000F8000003E000F8000003E000F80000 07C0007C000007C0007C00000F80007C00001F00003E00003E00003F00007C00001F0001 F800000FC003F0000007F01FC0000003FFFF00000000FFFC000000001FE00000002C4477 C132>56 D<000F00001FC0003FC0007FE000FFE000FFE000FFC0007F80007F00001E0000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000F00003F C0007FC0007FC000FFC000FFC000FFC000FF80007F00003C0000132B76AA1E>58 D<00000000000380000000000000078000000000000007800000000000000FC000000000 00000FC00000000000001FC00000000000001FC00000000000003FC00000000000007FC0 0000000000007FC0000000000000FFC0000000000000FFC0000000000001FFC000000000 0001FFC0000000000003BFC0000000000007BFC00000000000073FC000000000000F3FC0 00000000000E3FC000000000001C3FC000000000001C3FE00000000000383FE000000000 00381FE00000000000701FE00000000000F01FE00000000000E01FE00000000001C01FE0 0000000001C01FE00000000003801FE00000000003801FE00000000007001FE000000000 07001FE0000000000E001FE0000000001E001FE0000000001C001FE00000000038001FE0 0000000038001FF00000000070001FF00000000070000FF000000000E0000FF000000001 E0000FF000000001C0000FF000000003C0000FF00000000380000FF00000000700000FF0 00000007FFFFFFF00000000FFFFFFFF00000000FFFFFFFF00000001C00000FF00000003C 00000FF00000003800000FF00000007000000FF00000007000000FF0000000E000000FF8 000000E000000FF8000001C0000007F8000001C0000007F800000380000007F800000780 000007F800000700000007F800000E00000007F800001E00000007F800001E00000007F8 00003C00000007F800007C00000007F80000FC00000007F80001FC0000000FFC0007FE00 00001FFC00FFFFE00007FFFFF8FFFFE00007FFFFF8FFFFE00007FFFFF03D477BC648>65 D<0000FFFFFFFFFC00000000FFFFFFFFFF80000000FFFFFFFFFFE000000001FF80001FF0 00000000FF000007F800000001FF000003FC00000001FF000001FE00000001FE000001FF 00000001FE000000FF00000001FE000000FF80000003FE0000007F80000003FC0000007F 80000003FC0000007F80000003FC0000007F80000007FC0000007F80000007F80000007F 80000007F8000000FF80000007F8000000FF8000000FF8000000FF0000000FF0000001FF 0000000FF0000001FE0000000FF0000003FE0000001FF0000003FC0000001FE0000007F8 0000001FE000000FF80000001FE000001FF00000003FE000003FE00000003FC000007F80 0000003FC00000FF000000003FC00003FC000000007FC0000FF8000000007F8000FFC000 0000007FFFFFFF00000000007FFFFFFFE000000000FF800007F800000000FF000001FC00 000000FF000000FE00000000FF0000007F00000001FF0000007F80000001FE0000003FC0 000001FE0000003FC0000001FE0000003FC0000003FE0000003FE0000003FC0000003FE0 000003FC0000003FE0000003FC0000003FE0000007FC0000003FE0000007F80000003FE0 000007F80000003FE0000007F80000003FE000000FF80000003FC000000FF00000007FC0 00000FF00000007FC000000FF0000000FF8000001FF0000000FF8000001FE0000001FF00 00001FE0000001FE0000001FE0000003FE0000003FE0000007FC0000003FC000000FF800 00003FC000001FF00000007FC000003FE00000007FC000007FC00000007F800001FF0000 0000FF80000FFE000000FFFFFFFFFFF8000000FFFFFFFFFFC0000000FFFFFFFFFE000000 0041447AC345>I<000000000FF8000300000000FFFF000700000007FFFFC00F0000001F F803E01F0000007FC000F81E000000FF00007C3E000003FC00003C7E00000FF000001EFE 00001FE000000FFC00003FC0000007FC00007F00000007FC0000FE00000003FC0001FC00 000003F80003FC00000003F80007F800000001F8000FF000000001F8001FE000000001F0 003FC000000001F0007FC000000001F0007F8000000001F000FF8000000001E001FF0000 000001E001FF0000000001E003FE0000000001E003FE0000000001C007FC0000000001C0 07FC0000000001C00FF80000000001C00FF80000000000001FF80000000000001FF00000 000000001FF00000000000003FF00000000000003FE00000000000003FE0000000000000 3FE00000000000007FE00000000000007FC00000000000007FC00000000000007FC00000 000000007FC0000000000000FF80000000000000FF80000000000000FF80000000000000 FF80000000000000FF80000000003800FF80000000003800FF80000000007800FF800000 00007000FF80000000007000FF8000000000F0007F8000000000E0007F8000000001E000 7F8000000001C0007F8000000003C0003F800000000380003F800000000780003FC00000 000F00001FC00000000E00001FC00000001E00000FE00000003C00000FF0000000780000 07F0000000F0000003F8000001E0000003FC000007C0000001FE00000F800000007F0000 3E000000003FC000FC000000001FF807F00000000007FFFFC00000000001FFFF00000000 00001FF000000000404872C546>I<0000FFFFFFFFF800000000FFFFFFFFFF00000000FF FFFFFFFFC000000001FF80003FF000000000FF00000FF800000001FF000003FC00000001 FF000000FE00000001FE0000007F00000001FE0000007F00000001FE0000003F80000003 FE0000001FC0000003FC0000001FC0000003FC0000000FE0000003FC0000000FE0000007 FC0000000FE0000007F80000000FF0000007F800000007F0000007F800000007F000000F F800000007F000000FF000000007F000000FF000000007F800000FF000000007F800001F F000000007F800001FE000000007F800001FE000000007F800001FE00000000FF800003F E00000000FF800003FC00000000FF800003FC00000000FF000003FC00000000FF000007F C00000000FF000007F800000001FF000007F800000001FF000007F800000001FF00000FF 800000001FE00000FF000000003FE00000FF000000003FE00000FF000000003FE00001FF 000000003FC00001FE000000007FC00001FE000000007F800001FE000000007F800003FE 00000000FF800003FC00000000FF000003FC00000000FF000003FC00000001FE000007FC 00000001FE000007F800000003FC000007F800000003F8000007F800000007F800000FF8 00000007F000000FF00000000FE000000FF00000001FE000000FF00000001FC000001FF0 0000003F8000001FE00000007F0000001FE0000000FE0000001FE0000001FC0000003FE0 000003F80000003FC0000007F00000003FC000000FE00000007FC000003FC00000007FC0 0000FF000000007F800003FE00000000FF80001FF8000000FFFFFFFFFFE0000000FFFFFF FFFF00000000FFFFFFFFF80000000045447AC34A>I<0000FFFFFFFFFFFFC00000FFFFFF FFFFFFC00000FFFFFFFFFFFFC0000001FF800003FF80000000FF0000007F80000001FF00 00003F80000001FF0000001F80000001FE0000000F80000001FE0000000F80000001FE00 00000F80000003FE0000000700000003FC0000000700000003FC0000000700000003FC00 00000700000007FC0000000700000007F80000000F00000007F80000000E00000007F800 00000E0000000FF80000000E0000000FF00007000E0000000FF00007000E0000000FF000 0F000E0000001FF0000E00000000001FE0000E00000000001FE0000E00000000001FE000 1E00000000003FE0001C00000000003FC0003C00000000003FC0007C00000000003FC000 FC00000000007FC003F800000000007FFFFFF800000000007FFFFFF800000000007FFFFF F80000000000FF8003F00000000000FF0001F00000000000FF0000F00000000000FF0000 F00000000001FF0000E00000000001FE0000E00000000001FE0000E00000000001FE0001 E00000000003FE0001C00070000003FC0001C00070000003FC0001C000F0000003FC0001 C000E0000007FC00000000E0000007F800000001E0000007F800000001C0000007F80000 0003C000000FF8000000038000000FF0000000078000000FF0000000070000000FF00000 000F0000001FF00000000F0000001FE00000001E0000001FE00000003E0000001FE00000 003C0000003FE00000007C0000003FC0000000FC0000003FC0000001F80000007FC00000 03F80000007FC000000FF00000007F8000003FF0000000FF800003FFE00000FFFFFFFFFF FFE00000FFFFFFFFFFFFE00000FFFFFFFFFFFFC0000042447AC342>I<0000FFFFFFFFFF FF800000FFFFFFFFFFFF800000FFFFFFFFFFFF80000001FF800007FF00000000FF000000 FF00000001FF0000003F00000001FF0000003F00000001FE0000001F00000001FE000000 1F00000001FE0000001F00000003FE0000000E00000003FC0000000E00000003FC000000 0E00000003FC0000000E00000007FC0000000E00000007F80000001E00000007F8000000 1C00000007F80000001C0000000FF80000001C0000000FF00000001C0000000FF0000700 1C0000000FF0000F001C0000001FF0000E00000000001FE0000E00000000001FE0000E00 000000001FE0001E00000000003FE0001C00000000003FC0003C00000000003FC0003C00 000000003FC0007C00000000007FC000F800000000007F8003F800000000007FFFFFF800 000000007FFFFFF80000000000FFFFFFF00000000000FF0007F00000000000FF0001F000 00000000FF0001F00000000001FF0000E00000000001FE0000E00000000001FE0000E000 00000001FE0001E00000000003FE0001C00000000003FC0001C00000000003FC0001C000 00000003FC0003C00000000007FC0003800000000007F80000000000000007F800000000 00000007F8000000000000000FF8000000000000000FF0000000000000000FF000000000 0000000FF0000000000000001FF0000000000000001FE0000000000000001FE000000000 0000001FE0000000000000003FE0000000000000003FC0000000000000003FC000000000 0000007FC0000000000000007FC0000000000000007FC000000000000000FFC000000000 0000FFFFFFE00000000000FFFFFFE00000000000FFFFFFE0000000000041447AC340>I< 0000FFFFFF803FFFFFE00000FFFFFF803FFFFFE00000FFFFFF803FFFFFE0000001FF8000 007FE000000000FF0000003FC000000001FF0000007FC000000001FF0000007FC0000000 01FE0000007F8000000001FE0000007F8000000001FE000000FF8000000003FE000000FF 8000000003FC000000FF0000000003FC000000FF0000000003FC000001FF0000000007FC 000001FF0000000007F8000001FE0000000007F8000001FE0000000007F8000003FE0000 00000FF8000003FE000000000FF0000003FC000000000FF0000003FC000000000FF00000 07FC000000001FF0000007FC000000001FE0000007F8000000001FE0000007F800000000 1FE000000FF8000000003FE000000FF8000000003FC000000FF0000000003FC000000FF0 000000003FC000001FF0000000007FC000001FF0000000007FFFFFFFFFE0000000007FFF FFFFFFE0000000007FFFFFFFFFE000000000FF8000003FE000000000FF0000003FC00000 0000FF0000003FC000000000FF0000007FC000000001FF0000007FC000000001FE000000 7F8000000001FE0000007F8000000001FE000000FF8000000003FE000000FF8000000003 FC000000FF0000000003FC000000FF0000000003FC000001FF0000000007FC000001FF00 00000007F8000001FE0000000007F8000001FE0000000007F8000003FE000000000FF800 0003FE000000000FF0000003FC000000000FF0000003FC000000000FF0000007FC000000 001FF0000007FC000000001FE0000007F8000000001FE0000007F8000000001FE000000F F8000000003FE000000FF8000000003FC000000FF0000000003FC000000FF0000000007F C000001FF0000000007FC000001FF0000000007F8000001FE000000000FFC000003FF000 0000FFFFFF803FFFFFE00000FFFFFF803FFFFFE00000FFFFFF803FFFFFE000004B447AC3 48>72 D<00007FFFFFE00000FFFFFFE00000FFFFFFE0000000FFE0000000007F80000000 00FF8000000000FF8000000000FF0000000000FF0000000000FF0000000001FF00000000 01FE0000000001FE0000000001FE0000000003FE0000000003FC0000000003FC00000000 03FC0000000007FC0000000007F80000000007F80000000007F8000000000FF800000000 0FF0000000000FF0000000000FF0000000001FF0000000001FE0000000001FE000000000 1FE0000000003FE0000000003FC0000000003FC0000000003FC0000000007FC000000000 7F80000000007F80000000007F8000000000FF8000000000FF0000000000FF0000000000 FF0000000001FF0000000001FE0000000001FE0000000001FE0000000003FE0000000003 FC0000000003FC0000000003FC0000000007FC0000000007F80000000007F80000000007 F8000000000FF8000000000FF0000000000FF0000000000FF0000000001FF0000000001F E0000000001FE0000000003FE0000000003FE0000000003FC000000000FFE0000000FFFF FFE00000FFFFFFE00000FFFFFFC000002B447BC326>I<0000FFFFFFF0000000FFFFFFF0 000000FFFFFFE000000001FFC00000000000FF800000000001FF000000000001FF000000 000001FE000000000001FE000000000001FE000000000003FE000000000003FC00000000 0003FC000000000003FC000000000007FC000000000007F8000000000007F80000000000 07F800000000000FF800000000000FF000000000000FF000000000000FF000000000001F F000000000001FE000000000001FE000000000001FE000000000003FE000000000003FC0 00000000003FC000000000003FC000000000007FC000000000007F8000000000007F8000 000000007F800000000000FF800000000000FF000000000000FF000000000000FF000000 000001FF000000000001FE000000000001FE000000000001FE000000000003FE00000010 0003FC000000380003FC000000380003FC000000780007FC000000700007F80000007000 07F8000000F00007F8000000E0000FF8000001E0000FF0000001E0000FF0000001C0000F F0000003C0001FF0000007C0001FE000000780001FE000000F80001FE000000F80003FE0 00001F00003FC000003F00003FC000007F00007FC00000FE00007FC00003FE00007F8000 0FFE0000FF80007FFC00FFFFFFFFFFFC00FFFFFFFFFFFC00FFFFFFFFFFF80035447AC33D >76 D<0000FFFF80000000007FFFC00000FFFFC0000000007FFFC00000FFFFC000000000 FFFFC0000001FFC000000001FFC000000000FFC000000001FF8000000001FFC000000003 FF8000000001FFC000000003FF8000000001DFC0000000077F0000000001DFC00000000E 7F0000000001DFC00000000EFF0000000003CFE00000001CFF00000000038FE00000001C FE00000000038FE000000038FE00000000038FE000000071FE00000000078FE000000071 FE00000000070FE0000000E1FC00000000070FE0000000E1FC00000000070FE0000001C3 FC000000000F0FE000000383FC000000000E0FE000000383F8000000000E0FE000000703 F8000000000E07F000000707F8000000001E07F000000E07F8000000001C07F000000E07 F0000000001C07F000001C07F0000000001C07F00000380FF0000000003C07F00000380F F0000000003807F00000700FE0000000003807F00000700FE0000000003807F00000E01F E0000000007807F00001C01FE0000000007003F80001C01FC0000000007003F80003801F C0000000007003F80003803FC000000000F003F80007003FC000000000E003F8000E003F 8000000000E003F8000E003F8000000000E003F8001C007F8000000001E003F8001C007F 8000000001C003F80038007F0000000001C003F80070007F0000000001C003F8007000FF 0000000003C001FC00E000FF00000000038001FC00E000FE00000000038001FC01C000FE 00000000038001FC038001FE00000000078001FC038001FE00000000070001FC070001FC 00000000070001FC070001FC00000000070001FC0E0003FC000000000F0001FC1C0003FC 000000000E0001FC1C0003F8000000000E0000FE380003F8000000000E0000FE380007F8 000000001E0000FE700007F8000000001C0000FEE00007F0000000001C0000FEE00007F0 000000001C0000FFC0000FF0000000003C0000FFC0000FF000000000380000FF80000FE0 00000000780000FF00000FE000000000780000FF00001FE000000000F80000FE00001FE0 00000001FC00007E00001FC000000007FE00007C00003FE0000000FFFFF00078003FFFFF C00000FFFFF00078003FFFFFC00000FFFFF00070003FFFFFC000005A447AC357>I<0000 FFFF800001FFFFE00000FFFF800001FFFFE00000FFFFC00001FFFFE0000000FFC000000F FC00000000FFC0000007F000000000FFE0000003E000000001FFE0000003C000000001DF E0000003C000000001DFF00000038000000001DFF00000078000000003CFF00000078000 0000038FF800000700000000038FF8000007000000000387F800000F000000000787FC00 000F000000000703FC00000E000000000703FC00000E000000000703FE00001E00000000 0F01FE00001E000000000E01FE00001C000000000E01FF00001C000000000E00FF00003C 000000001E00FF00003C000000001C00FF800038000000001C007F800038000000001C00 7F800078000000003C007FC000780000000038003FC000700000000038003FC000700000 000038003FE000F00000000078001FE000F00000000070001FE000E00000000070001FF0 00E00000000070000FF001E000000000F0000FF801E000000000E0000FF801C000000000 E00007F801C000000000E00007FC03C000000001E00007FC03C000000001C00003FC0380 00000001C00003FE038000000001C00003FE078000000003C00001FE0780000000038000 01FF070000000003800001FF070000000003800000FF0F0000000007800000FF8F000000 0007000000FF8E00000000070000007F8E00000000070000007FDE000000000F0000007F DE000000000E0000003FDC000000000E0000003FFC000000000E0000003FFC000000001E 0000001FFC000000001C0000001FF8000000001C0000001FF8000000001C0000000FF800 0000003C0000000FF8000000003800000007F0000000007800000007F000000000780000 0007F000000000F800000003F000000001FC00000003E000000007FE00000003E0000000 FFFFF0000001E0000000FFFFF0000001E0000000FFFFF0000001C00000004B447AC348> I<000000001FF8000000000001FFFF000000000007F01FC0000000001F8003F000000000 7E0001F800000001F80000FC00000003E000007E0000000FC000003F0000001F8000001F 8000003F0000001FC000007E0000000FC00000FC0000000FE00001F800000007E00003F0 00000007F00007F000000007F0000FE000000007F0001FC000000007F8003FC000000003 F8003F8000000003F8007F8000000003F800FF0000000003F800FE0000000003FC01FE00 00000003FC03FE0000000003FC03FC0000000003FC07FC0000000003FC07F80000000007 FC0FF80000000007FC0FF80000000007FC0FF00000000007FC1FF00000000007FC1FF000 00000007F81FE0000000000FF83FE0000000000FF83FE0000000000FF83FE0000000000F F87FC0000000001FF07FC0000000001FF07FC0000000001FF07FC0000000003FF07FC000 0000003FE0FF80000000003FE0FF80000000003FC0FF80000000007FC0FF80000000007F C0FF8000000000FF80FF8000000000FF80FF8000000000FF00FF8000000001FF00FF8000 000001FE00FF8000000003FC00FF8000000003FC007F8000000007F8007F800000000FF0 007F800000000FF0007F800000001FE0003F800000001FC0003F800000003F80003FC000 00007F00001FC0000000FF00001FC0000001FE00000FE0000001FC00000FE0000003F000 0007F0000007E0000003F000001FC0000001F800003F80000000FC00007E000000007E00 01F8000000003F8007F0000000000FE03F800000000003FFFE0000000000007FE0000000 003E4872C54B>I<0000FFFFFFFFF0000000FFFFFFFFFE000000FFFFFFFFFF80000001FF 80007FE0000000FF00001FF0000001FF000007F8000001FF000003F8000001FE000003FC 000001FE000001FE000003FE000001FE000003FE000001FE000003FC000001FF000003FC 000001FF000007FC000001FF000007FC000001FF000007F8000001FF000007F8000001FF 00000FF8000001FF00000FF8000003FE00000FF0000003FE00000FF0000003FE00001FF0 000003FC00001FF0000007FC00001FE0000007F800001FE000000FF800003FE000000FF0 00003FE000001FE000003FC000001FC000003FC000003F8000007FC000007F0000007FC0 0000FE0000007F800003FC0000007F80000FF0000000FF80007FC0000000FFFFFFFF0000 0000FFFFFFF800000000FF00000000000001FF00000000000001FF00000000000001FE00 000000000001FE00000000000003FE00000000000003FE00000000000003FC0000000000 0003FC00000000000007FC00000000000007FC00000000000007F800000000000007F800 00000000000FF80000000000000FF80000000000000FF00000000000000FF00000000000 001FF00000000000001FF00000000000001FE00000000000001FE00000000000003FE000 00000000003FE00000000000003FC00000000000003FC00000000000007FC00000000000 007FC00000000000007F80000000000000FFC00000000000FFFFFF8000000000FFFFFF80 00000000FFFFFF800000000040447AC342>I<0000FFFFFFFF80000000FFFFFFFFF80000 00FFFFFFFFFE00000001FF8001FF80000000FF00003FC0000001FF00001FE0000001FF00 000FF0000001FE000007F8000001FE000003F8000001FE000003FC000003FE000003FC00 0003FC000003FE000003FC000003FE000003FC000003FE000007FC000003FE000007F800 0003FE000007F8000003FE000007F8000003FE00000FF8000007FC00000FF0000007FC00 000FF0000007FC00000FF000000FF800001FF000000FF800001FE000000FF000001FE000 001FE000001FE000003FC000003FE000003F8000003FC000007F0000003FC00000FE0000 003FC00003F80000007FC00007F00000007F80001FC00000007F8001FF000000007FFFFF F800000000FFFFFFE000000000FF0003F800000000FF0000FE00000000FF00007F000000 01FF00003F80000001FE00001FC0000001FE00001FC0000001FE00001FE0000003FE0000 1FE0000003FC00000FE0000003FC00000FE0000003FC00001FE0000007FC00001FE00000 07F800001FE0000007F800001FE0000007F800003FE000000FF800003FE000000FF00000 3FE000000FF000003FE000000FF000007FC000001FF000007FC000001FE000007FC00000 1FE000007FC000001FE000007FC000003FE000007FC00E003FC000007FC00E003FC00000 7FC00E007FC000007F801E007FC000007F801C007F8000007F803C00FFC000007F8038FF FFFF80003FC070FFFFFF80001FC0F0FFFFFF80000FE1E0000000000003FF800000000000 00FE003F467AC347>82 D<00000003FE000C0000000FFF801C0000007FFFE03C000000FE 03F83C000003F0007C7C000007E0003EF800000FC0001FF800001F80000FF800003F0000 0FF800007E000007F00000FC000007F00000FC000003F00001F8000003F00001F8000003 E00003F0000003E00003F0000003E00007F0000003E00007E0000003C00007E0000003C0 0007E0000003C0000FE0000003C0000FE000000380000FE000000380000FF00000038000 0FF000000000000FF000000000000FF800000000000FFC000000000007FE000000000007 FFE00000000007FFFC0000000003FFFF8000000001FFFFF000000001FFFFFC00000000FF FFFF000000003FFFFF800000000FFFFFC000000003FFFFC0000000003FFFE00000000007 FFE00000000000FFF000000000003FF000000000001FF000000000000FF000000000000F F0000000000007F0000000000007F0000000000007F0000700000007F0000700000003F0 000700000007F0000700000007F0000F00000007E0000F00000007E0000E00000007E000 0E0000000FE0001E0000000FC0001E0000000FC0001F0000001F80001F0000001F80003F 0000003F00003F8000003E00003F8000007E00003FC00000FC00007FC00001F800007FE0 0003F000007CF00007E00000787C001F800000F03F807F000000F01FFFFC000000E007FF F0000000C0007F80000000364879C537>I<01FFFFFFFFFFFFF803FFFFFFFFFFFFF803FF FFFFFFFFFFF803FF0007FC001FF007F80007F80007F007E0000FF80003F007C0000FF800 01F00F80000FF00001F00F00000FF00000F00F00000FF00000F01E00001FF00000E01E00 001FE00000E01C00001FE00000E03C00001FE00000E03800003FE00000E03800003FC000 01E07800003FC00001C07000003FC00001C0F000007FC00001C0E000007F800001C0E000 007F800001C0E000007F800001C0000000FF80000000000000FF00000000000000FF0000 0000000000FF00000000000001FF00000000000001FE00000000000001FE000000000000 01FE00000000000003FE00000000000003FC00000000000003FC00000000000003FC0000 0000000007FC00000000000007F800000000000007F800000000000007F8000000000000 0FF80000000000000FF00000000000000FF00000000000000FF00000000000001FF00000 000000001FE00000000000001FE00000000000001FE00000000000003FE0000000000000 3FC00000000000003FC00000000000003FC00000000000007FC00000000000007F800000 000000007F800000000000007F80000000000000FF80000000000000FF00000000000000 FF00000000000000FF00000000000001FF00000000000001FE00000000000001FE000000 00000003FE00000000000003FE00000000000007FE0000000000000FFF00000000007FFF FFFFC00000007FFFFFFFC00000007FFFFFFF800000003D446FC346>I86 D<00001F80000000007FE000000001F0 7070000007C039F800000F801DF800001F001FF800003E000FF000007E000FF00000FC00 0FF00001F80007F00001F80007E00003F00007E00007F00007E00007E0000FE0000FE000 0FC0000FE0000FC0001FC0000FC0001FC0001FC0003FC0001F80003F80001F80003F8000 1F80003F80003F80007F80003F00007F00003F00007F00003F00007F00007F00007F0000 7E0000FE00007E0000FE00007E0000FE0000FE0380FE0000FC0780FE0000FC0700FE0000 FC07007E0001FC07007E0001FC0F007E0003F80E007E0007F80E003E000FF81E003E000F F81C001F001CF81C001F0038F838000F80F078780007C3E07C700001FF801FE000007E00 078000292D76AB32>97 D<000FE0000007FFE0000007FFE0000007FFE00000001FC00000 000FC00000001FC00000001FC00000001F800000001F800000001F800000003F80000000 3F000000003F000000003F000000007F000000007E000000007E000000007E00000000FE 00000000FC00000000FC00000000FC00000001FC00000001F800000001F81F800001F87F E00003F9E0F80003F3C07C0003F7003E0003FE003E0007FC001F0007F8001F0007F8001F 0007F0001F800FE0001F800FE0001F800FC0001F800FC0001F801FC0001F801F80001F80 1F80001F801F80003F803F80003F803F00003F803F00003F803F00007F807F00007F007E 00007F007E00007F007E0000FF007E0000FE00FC0000FE00FC0000FE00FC0001FC00FC00 01FC00FC0003F800FC0003F8007C0003F0007C0007E0007C000FE0007C000FC0007C001F 80003C003F00003E007E00001E00FC00000F01F800000783E0000003FF80000000FE0000 00214676C42D>I<00000FE00000007FF8000001F81E000007E00F00000F800780001F00 0380007E0003C000FC001FC001FC003FC001F8003FC003F0007F8007F0007F800FE0007F 800FE0003E001FC00000001FC00000003F800000003F800000007F800000007F00000000 7F000000007F00000000FF00000000FE00000000FE00000000FE00000000FE00000000FC 00000000FC00000000FC00000000FC00000000FC00000000FC00000180FC000003C0FC00 000780FC000007807C00000F007E00001E003E00007C003E0000F0001F0003E0000F800F 800007C07E000001FFF80000007FC00000222D75AB2D>I<0000000007F000000003FFF0 00000003FFF000000003FFF0000000000FE00000000007E0000000000FE0000000000FE0 000000000FC0000000000FC0000000001FC0000000001FC0000000001F80000000001F80 000000003F80000000003F80000000003F00000000003F00000000007F00000000007F00 000000007E00000000007E0000000000FE0000000000FE0000000000FC0000001F80FC00 00007FE1FC000001F071FC000007C039F800000F801DF800001F001FF800003E000FF800 007E000FF00000FC000FF00001F80007F00001F80007F00003F00007E00007F00007E000 07E0000FE0000FE0000FE0000FE0000FC0001FC0000FC0001FC0001FC0003FC0001FC000 3F80001F80003F80001F80003F80003F80007F80003F80007F00003F00007F00003F0000 7F00007F00007F00007F0000FE00007E0000FE00007E0000FE0000FE0380FE0000FE0780 FE0000FC0700FE0000FC07007E0001FC07007E0001FC0F007E0003F80E007E0007F80E00 3E000FF81E003E000FF81C001F001CF81C001F0038F838000F80F078780007C3E07C7000 01FF801FE000007E000780002C4676C432>I<00000FE00000007FF8000001F83E000007 C00F00001F800780003F000780007E0007C000FC0003C001F80003C003F00007C007F000 078007E00007800FE0000F801FC0000F001FC0001F003F80003E003F8000FC003F8007F0 007F80FFC0007FFFFE00007FFFC000007F00000000FF00000000FE00000000FE00000000 FE00000000FE00000000FE00000000FC00000000FC00000000FC00000000FC00000000FC 00000180FC000003C07C000007807C000007807E00000F003E00001E003E00007C001F00 00F0000F0003E00007800F800003C07E000001FFF80000003FC00000222D75AB2D>I<00 0000000F80000000003FE000000000F87000000001F03800000003E0F800000007E1FC00 000007C3FC0000000FC7FC0000000FC7FC0000000F87F80000001F83F00000001F81E000 00001F80000000003F80000000003F00000000003F00000000003F00000000003F000000 00007F00000000007E00000000007E00000000007E00000000007E0000000000FE000000 0000FC0000000000FC0000000000FC00000001FFFFFE000001FFFFFE000001FFFFFE0000 0001F80000000001F80000000001F80000000003F80000000003F00000000003F0000000 0003F00000000003F00000000007F00000000007E00000000007E00000000007E0000000 0007E0000000000FE0000000000FC0000000000FC0000000000FC0000000000FC0000000 001FC0000000001F80000000001F80000000001F80000000001F80000000003F80000000 003F00000000003F00000000003F00000000003F00000000003F00000000007F00000000 007E00000000007E00000000007E0000000000FE0000000000FC0000000000FC00000000 00FC0000000000FC0000000001FC0000000001F80000000001F80000000001F800000000 01F80000000003F00000000003F00000000003F00000000003E00000000007E00000001C 07E00000007F07C0000000FF07C0000000FF0F80000000FF0F80000000FF0F00000000FE 1F00000000F81E00000000F03C000000007878000000001FF00000000007C0000000002E 5A83C51E>I<000000FC0000000003FF000000000F83838000003E01CFC000007C00EFC0 0000F800FFC00001F0007FC00003F0007F800007E0003F80000FC0003F80001FC0003F80 001F80003F00003F80003F00003F00007F00007F00007F00007F00007E0000FE00007E00 00FE0000FE0001FE0000FE0001FC0000FC0001FC0000FC0001FC0001FC0003FC0001FC00 03F80001F80003F80001F80003F80003F80003F80003F80003F00003F00003F00003F000 03F00007F00003F00007F00003F00007E00003F00007E00003F0000FE00003F0001FE000 03F0001FC00001F0003FC00001F0007FC00000F800FFC00000F801DF8000007C039F8000 003E0F3F8000000FFC3F80000003F03F00000000003F00000000007F00000000007F0000 0000007E00000000007E0000000000FE0000000000FE0000000000FC0000000000FC0000 1C0001F800007F0001F80000FF0003F00000FF0007F00000FF000FE00000FE000FC00000 FE003F000000F8007E0000007C01F80000001FFFE000000003FF000000002A407BAB2D> I<0000FE000000007FFE000000007FFE000000007FFE0000000001FC0000000000FC0000 000001FC0000000001FC0000000001F80000000001F80000000003F80000000003F80000 000003F00000000003F00000000007F00000000007F00000000007E00000000007E00000 00000FE0000000000FE0000000000FC0000000000FC0000000001FC0000000001FC00000 00001F80000000001F807F0000003F83FFC000003F8F81F000003F1E00F800003F3800FC 00007F70007C00007FE0007C00007FC0007E00007FC0007E0000FF80007E0000FF00007E 0000FF00007E0000FE00007E0001FC0000FE0001FC0000FC0001F80000FC0001F80000FC 0003F80001FC0003F80001F80003F00001F80003F00001F80007F00003F80007F00003F0 0007E00003F00007E00007F0000FE00007E0000FE00007E0000FC0000FE0000FC0000FC0 001FC0000FC0781FC0001FC0701F80001F80701F80001F80703F80003F80F03F80003F00 E03F00003F00E03F00003F01E07F00003E01C07F00003E03C07E00003E03807E00003E07 00FE00001E0F00FE00001F1E00FC00000FF80038000003E0002D467AC432>I<00003C00 007E0000FE0001FE0001FE0001FE0000FC00007000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000007C0001FF0003C78007 03C00F03E00E03E01C03E01C07E03807E03807E07807E0700FE0700FC0701FC0F01F80E0 1F80003F80003F00003F00007F00007E00007E0000FE0000FC0001FC0001F80001F80003 F80003F00003F01E07F01C07E01C07E01C0FE03C0FC0380FC0380FC0780F80700F80F00F 80E00F81C00783C007C78003FE0000F800174378C11E>I<00000000F000000003F80000 0003F800000007F800000007F800000007F800000007F000000001C00000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000001F000000007FC00 00001E1E000000380F000000700F800000E00F800001E00F800001C00F800003800F8000 07801F800007001F800007001F80000E001F80000E003F80001E003F80001C003F000000 003F000000007F000000007F000000007E000000007E00000000FE00000000FE00000000 FC00000000FC00000001FC00000001FC00000001F800000001F800000003F800000003F8 00000003F000000003F000000007F000000007F000000007E000000007E00000000FE000 00000FE00000000FC00000000FC00000001FC00000001FC00000001F800000001F800000 003F800000003F800000003F000000003F000000007F000000007E000000007E00000000 FE00001C00FC00007F00FC0000FF01F80000FF03F00000FF03F00000FE07E00000FE0FC0 0000F81F000000707E0000003FF80000000FC0000000255683C11E>I<0000FE00000000 7FFE000000007FFE000000007FFE0000000001FC0000000000FC0000000001FC00000000 01FC0000000001F80000000001F80000000003F80000000003F80000000003F000000000 03F00000000007F00000000007F00000000007E00000000007E0000000000FE000000000 0FE0000000000FC0000000000FC0000000001FC0000000001FC0000000001F8000000000 1F80007E00003F8001FF00003F800783C0003F000E07C0003F003C1FC0007F00701FC000 7F00603FC0007E00E03FC0007E01C03FC000FE03803F8000FE07000E0000FC0E00000000 FC1C00000001FC3800000001FC7000000001F8E000000001F9C000000003FB8000000003 FF0000000003FF0000000003FFF000000007F3FC00000007F07F00000007E01FC0000007 E00FE000000FE007E000000FE007F000000FC003F000000FC003F000001FC003F00F001F C003F00F001F8003F00E001F8003F00E003F8003F01E003F8003F01C003F0003E01C003F 0003E01C007F0003E038007F0003E038007E0003E078007E0003E07000FE0001E0E000FE 0001F1E000FC00007F80003800001F00002A467AC42D>I<0003F801FFF801FFF801FFF8 0007F00003F00007F00007F00007E00007E0000FE0000FE0000FC0000FC0001FC0001FC0 001F80001F80003F80003F80003F00003F00007F00007F00007E00007E0000FE0000FE00 00FC0000FC0001FC0001FC0001F80001F80003F80003F80003F00003F00007F00007F000 07E00007E0000FE0000FE0000FC0000FC0001FC0001FC0001F80001F80003F80003F8000 3F00003F00007F01C07F03C07E03807E03807E0780FE0700FC0700FC0700FC0F00FC0E00 7C1E007C1C003C3C003E78001FF00007C000154678C419>I<01F0000FE00007F0000003 FC007FF8003FFC0000071E01F03E00F81F00000E1F03C01F01E00F80001E0F87001F8380 0FC0001C0F8E000F870007C0003C0F9C000F8E0007C000380FB8000FDC0007E000380FF8 000FFC0007E000781FF0000FF80007E000701FE0000FF00007E000701FE0000FF00007E0 00701FC0000FE00007E000F01F80001FC0000FE000E03F80001FC0000FC000E03F00001F 80000FC000003F00001F80000FC000003F00003F80001FC000007F00003F80001F800000 7E00003F00001F8000007E00003F00001F8000007E00007F00003F800000FE00007F0000 3F000000FC00007E00003F000000FC00007E00007F000000FC0000FE00007E000001FC00 00FE00007E000001F80000FC0000FE000001F80000FC0000FC000001F80001FC0000FC07 8003F80001FC0001FC070003F00001F80001F8070003F00001F80001F8070003F00003F8 0003F80F0007F00003F80003F00E0007E00003F00003F00E0007E00003F00003F01E0007 E00007F00003E01C000FE00007F00003E03C000FC00007E00003E038000FC00007E00003 E070000FC0000FE00001E0F0001FC0000FE00001F1E0001F80000FC00000FF8000070000 038000003E0000492D78AB50>I<01F0000FE00003FC007FF800071E01F03E000E0F03C0 1F001E0F87001F801C0F8E000F803C0F9C000F80380FB8000FC0380FF8000FC0781FF000 0FC0701FE0000FC0701FE0000FC0701FC0000FC0F01F80001FC0E03F80001F80E03F0000 1F80003F00001F80003F00003F80007F00003F00007E00003F00007E00003F00007E0000 7F0000FE00007E0000FC00007E0000FC0000FE0000FC0000FC0001FC0000FC0001F80001 FC0001F80001F80001F80001F80F03F80003F80E03F00003F00E03F00003F00E03F00007 F01E07F00007E01C07E00007E01C07E00007E03C07E00007C0380FE00007C0780FC00007 C0700FC00007C0E00FC00003C1E01FC00003E3C01F800001FF00070000007C00302D78AB 37>I<00000FE00000007FFC000001F83E000007E00F80000F8007C0001F0007C0007E00 03E000FC0003F000FC0003F001F80001F003F00001F807F00001F80FE00001F80FE00001 F81FC00001F81FC00001F83F800001F83F800003F87F800003F87F000003F87F000003F8 7F000007F8FF000007F0FE000007F0FE000007F0FE00000FF0FE00000FE0FC00000FE0FC 00001FC0FC00001FC0FC00001F80FC00003F80FC00003F00FC00007F00FC00007E00FC00 00FC007C0001F8007E0003F0003E0003E0003E0007C0001F001F80000F803E000007C0FC 000001FFF00000003F800000252D75AB32>I<0003E0007E000007F801FF80000E3C0783 E0001C1E0F01F0003C1F1C00F800381F3800F800781F70007C00701FE0007C00701FE000 7C00703FC0007E00E03F80007E00E03F80007E00E03F00007E01E07F00007E01C07F0000 7E01C07E00007E00007E00007E0000FE0000FE0000FE0000FE0000FC0000FE0000FC0000 FE0001FC0001FE0001FC0001FC0001F80001FC0001F80001FC0003F80003FC0003F80003 F80003F00003F80003F00003F80007F00007F00007F00007F00007E0000FE00007E0000F E0000FE0000FC0000FE0001F80000FE0003F80000FE0003F00001FF0007E00001FF000FC 00001FF001F800001FB803F000003F9C07E000003F9E0F8000003F07FE0000003F01F800 00007F00000000007F00000000007E00000000007E0000000000FE0000000000FE000000 0000FC0000000000FC0000000001FC0000000001FC0000000001F80000000001F8000000 0003F80000000003F80000000007F800000000FFFFF0000000FFFFF0000000FFFFE00000 002F3F7FAB32>I<00001F800C00007FE01C0001F0703C0007C03878000F801CF8001F00 1DF8003E000FF8007E000FF000FC000FF001F80007F001F80007F003F00007E007F00007 E007E00007E00FE0000FE00FE0000FC01FC0000FC01FC0000FC03FC0001FC03F80001F80 3F80001F803F80001F807F80003F807F00003F007F00003F007F00003F007F00007F00FE 00007E00FE00007E00FE00007E00FE0000FE00FE0000FC00FE0000FC007E0001FC007E00 01FC007E0003F8007E0007F8003E000FF8003E000FF8001F001FF0001F003BF0000F80F3 F00007C3E7F00001FF87E000007E07E000000007E00000000FE00000000FC00000000FC0 0000000FC00000001FC00000001F800000001F800000001F800000003F800000003F0000 00003F000000007F000000007F00000000FF0000007FFFFE00007FFFFE00007FFFFC0026 3F76AB2D>I<01F0003F8003FC01FFF0071E03C0F80E0F0F007C1E0F9E01FC1C0F9C01FC 1C0FB803FC380FF003FC380FF003FC381FE003F8781FE000E0701FC00000701FC00000F0 1F800000E03F800000E03F000000003F000000003F000000007F000000007E000000007E 000000007E00000000FE00000000FC00000000FC00000000FC00000001FC00000001F800 000001F800000001F800000003F800000003F000000003F000000003F000000007F00000 0007E000000007E000000007E00000000FE00000000FC00000000FC00000000FC0000000 1FC00000001F800000000700000000262D78AB29>I<00000FE00000007FF8000001F01E 000003C00F000007800780000F000380001E0003C0001E0007C0003C001FC0003C001FC0 007C003F800078003F80007C003F80007C000E00007C000000007E000000007F00000000 7FF00000007FFF0000003FFFC000001FFFF000000FFFF8000007FFFC000000FFFC000000 0FFE00000001FE00000000FE000000007F000000003F000E00003F003F00001E007F8000 1E007F80001E007F80003E00FF00003C00FF00003C00FC000078007000007800700000F0 00780001E0003C0003C0001E000F80000F803E000003FFF80000007FC00000222D7AAB28 >I<000070000001F8000001F8000001F8000003F8000003F0000003F0000003F0000007 F0000007E0000007E0000007E000000FE000000FC000000FC000000FC000001FC000001F 8000001F80007FFFFFE0FFFFFFE0FFFFFFC0003F0000003F0000007F0000007E0000007E 0000007E000000FE000000FC000000FC000000FC000001FC000001F8000001F8000001F8 000003F8000003F0000003F0000003F0000007F0000007E0000007E0000007E000000FE0 00000FC000000FC000000FC007801FC007001F8007001F800F001F800E003F801E003F00 1C003F003C003F0038003F0070001F00F0001F01E0000F03C0000F87800007FE000001F8 00001B3F78BD20>I<007C0000000001FF0000070003C780001F800703C0001F800F03E0 001F800E03E0003F801C03E0003F801C07E0003F003807E0003F003807E0007F007807E0 007F00700FE0007E00700FC0007E00701FC000FE00F01F8000FE00E01F8000FC00003F80 00FC00003F0001FC00003F0001FC00007F0001F800007E0001F800007E0003F80000FE00 03F80000FC0003F00000FC0003F00000FC0007F00001FC0007F00001F80007E00001F800 07E00001F8000FE03803F8000FE07803F0000FC07003F0000FC07003F0000FC07003F000 1FC0F003F0001F80E003F0003F80E001F0003F81E001F0007F81C001F800EF83C000F801 EF8380007C03C78780003E0F07C700001FFE01FE000003F00078002D2D78AB34>I<007C 00003801FF0000FC03C78001FE0703C001FE0F03E001FE0E03E001FE1C03E000FE1C07E0 007E3807E0007E3807E0003E7807E0003E700FE0001E700FC0001E701FC0001EF01F8000 1CE01F80001C003F80001C003F00003C003F000038007F000038007E000038007E000078 00FE00007000FC00007000FC00007000FC0000F001FC0000E001F80000E001F80001E001 F80001C001F80001C003F000038003F000038003F000070003F000070003F0000E0001F0 000E0001F0001C0001F800380000F800780000FC00F000007C01E000003F078000000FFF 00000003F80000272D78AB2D>I<007C00000000038001FF00000E000FC003C780003F00 1FE00703C0003F001FE00E03E0003F001FE00E03E0007F001FE01C03E0007E000FE01C07 E0007E0007E03807E0007E0007E03807E000FE0003E07807E000FC0003E0700FE000FC00 03E0700FC000FC0001E0701FC001FC0001E0F01F8001F80001C0E01F8001F80001C0003F 8001F80001C0003F0003F80003C0003F0003F0000380007F0003F0000380007E0003F000 0380007E0007F000078000FE0007F000070000FC0007E000070000FC0007E000070000FC 000FE0000F0001FC000FE0000E0001F8000FC0000E0001F8000FC0000E0001F8000FC000 1C0001F8000FC0001C0003F0001F80001C0003F0001F8000380003F0001F8000380003F0 001F8000700001F0001F8000700001F0003F8000E00001F8003F8000E00001F8007FC001 C00000F800F7C003C00000FC00E7E0078000007E01C3E00F0000001F0781F81E0000000F FF007FF800000001FC000FE000003B2D78AB41>I<0000F8003F000007FE00FFE0000F0F 83C0F0001C07C780F8003803CF03F8007003EE03F800E003FC07F801E003FC07F801C003 F807F803C003F807F0038003F801C0078003F00000070003F00000070007F000000F0007 E000000E0007E00000000007E0000000000FE0000000000FC0000000000FC0000000000F C0000000001FC0000000001F80000000001F80000000001F80000000003F80000000003F 00000000003F00000000003F00000000007F0003C000007F00038000007E00038000007E 0003800000FE0007001E00FE0007003F00FE000F007F81FC000E007F81FE001C00FF83FE 003C00FF03BE007800FE079E00F0007C0F1F01E0003C1E0F83C0001FF803FF000007E000 FC00002D2D7CAB2D>I<007C0000000001FF0000070003C780001F800703C0001F800F03 E0001F800E03E0003F801C03E0003F001C07E0003F003807E0003F003807E0007F007807 E0007E00700FE0007E00700FC0007E00701FC000FE00F01F8000FC00E01F8000FC00003F 8000FC00003F0001FC00003F0001F800007F0001F800007E0001F800007E0003F80000FE 0003F00000FC0003F00000FC0003F00000FC0007F00001FC0007E00001F80007E00001F8 0007E00001F8000FE00003F8000FC00003F0000FC00003F0000FC00003F0001FC00003F0 001F800003F0001F800003F0003F800001F0003F800001F0007F000001F800FF000000F8 01FF0000007C03FF0000003E0F7E0000001FFE7E00000003F07E0000000000FE00000000 00FC0000000000FC0000000001FC0000000001F800001F0001F800007F8003F000007F80 03F000007F8007E00000FF000FC00000FF000F800000FE001F800000F0003F0000007000 7E0000007800F80000003801F00000001E07C00000000FFF0000000001FC000000002940 78AB2F>I E /FE 29 122 df45 D<000000003800000000000000007C00000000000000007C00000000 000000007C0000000000000000FE0000000000000000FE0000000000000000FE00000000 00000001FF0000000000000001FF0000000000000003FF8000000000000003FF80000000 00000003FF8000000000000007FFC0000000000000077FC0000000000000077FC0000000 0000000E7FE00000000000000E3FE00000000000000E3FE00000000000001C1FF0000000 0000001C1FF00000000000003C1FF8000000000000380FF8000000000000380FF8000000 000000780FFC0000000000007007FC0000000000007007FC000000000000E007FE000000 000000E003FE000000000000E003FE000000000001C001FF000000000001C001FF000000 000003C001FF8000000000038000FF8000000000038000FF8000000000078000FFC00000 00000700007FC0000000000700007FC0000000000E00007FE0000000000E00003FE00000 00000E00003FE0000000001C00001FF0000000001C00001FF0000000003C00001FF80000 00003800000FF8000000003800000FF8000000007FFFFFFFFC000000007FFFFFFFFC0000 00007FFFFFFFFC00000000E0000007FE00000000E0000003FE00000001E0000003FF0000 0001C0000001FF00000001C0000001FF00000003C0000001FF8000000380000000FF8000 000380000000FF8000000700000000FFC0000007000000007FC0000007000000007FC000 000E000000003FE000000E000000003FE000001E000000003FF000001E000000001FF000 003E000000001FF000003E000000001FF800007E000000001FF80001FF000000001FFC00 07FFC00000007FFF00FFFFFC00001FFFFFFEFFFFFC00001FFFFFFEFFFFFC00001FFFFFFE 47477CC651>65 DI<00000003FF00000C0000003FFFF0001C00 0001FFFFFC003C00000FFE007F003C00001FF0000FC07C00007F800003E0FC0001FF0000 00F0FC0003FC00000079FC0007F80000003FFC001FF00000001FFC003FE00000000FFC00 7FC000000007FC007F8000000003FC00FF0000000003FC01FE0000000001FC03FE000000 0001FC03FC0000000000FC07FC0000000000FC0FF800000000007C0FF800000000007C1F F000000000003C1FF000000000003C3FF000000000003C3FF000000000003C3FE0000000 00001C7FE000000000001C7FE000000000001C7FE000000000001C7FE00000000000007F C0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000 000000FFC0000000000000FFC0000000000000FFC0000000000000FFC0000000000000FF C0000000000000FFC0000000000000FFC0000000000000FFC00000000000007FC0000000 0000007FE00000000000007FE00000000000007FE000000000001C7FE000000000001C3F E000000000001C3FF000000000001C3FF000000000001C1FF000000000003C1FF0000000 0000380FF80000000000380FF800000000003807FC00000000007803FC00000000007003 FE0000000000F001FE0000000000E000FF0000000001E0007F8000000001C0007FC00000 0003C0003FE00000000780001FF00000000F000007F80000001E000003FC0000003C0000 01FF000000780000007F800001F00000001FF00007C00000000FFE007F8000000001FFFF FE00000000003FFFF0000000000003FF8000003E4879C54E>I73 D77 D80 D82 D<0001FF8000C0000FFF F001C0003FFFFC03C000FF007F03C001F8000F87C003F00003E7C007C00001FFC00F8000 00FFC01F8000007FC01F0000003FC03E0000001FC03E0000001FC07E0000000FC07C0000 000FC07C00000007C0FC00000007C0FC00000003C0FC00000003C0FC00000003C0FE0000 0003C0FE00000001C0FF00000001C0FF00000001C0FF80000001C07FC0000000007FE000 0000007FF0000000003FFC000000003FFFC00000001FFFFC0000000FFFFFC000000FFFFF FC000007FFFFFF800003FFFFFFE00000FFFFFFF800007FFFFFFC00001FFFFFFE000003FF FFFF0000003FFFFF80000003FFFFC00000003FFFC000000003FFE000000000FFE0000000 007FF0000000001FF0000000001FF0000000000FF80000000007F8E000000007F8E00000 0003F8E000000003F8E000000001F8E000000001F8E000000001F8F000000001F8F00000 0001F8F000000001F0F800000001F0F800000003F0FC00000003F0FC00000003E0FE0000 0007E0FF00000007C0FF8000000F80FFC000001F80FFE000003F00F8F800007E00F87F00 00FC00F01FE007F000F007FFFFE000E001FFFF0000C0001FFC00002D4879C53D>I<0000 0070000000000000F8000000000000F8000000000000F8000000000001FC000000000001 FC000000000003FE000000000003FE000000000003FE000000000007FF0000000000077F 0000000000077F00000000000E3F80000000000E3F80000000001E3FC0000000001C1FC0 000000001C1FC000000000380FE000000000380FE000000000380FE0000000007007F000 0000007007F000000000F007F800000000E003F800000000E003F800000001C001FC0000 0001C001FC00000001C001FC000000038000FE000000038000FE000000078000FF000000 0700007F0000000700007F0000000FFFFFFF8000000FFFFFFF8000001FFFFFFFC000001C 00001FC000001C00001FC000003C00001FE000003800000FE000003800000FE000007000 0007F0000070000007F00000F0000007F80000E0000003F80001E0000003F80001E00000 03FC0003F0000001FC0007F0000003FE001FF8000007FF00FFFF00007FFFF8FFFF00007F FFF8FFFF00007FFFF835357CB43D>97 DI<000001FF00018000001FFFF003800000FFFFFC07800003FF007E0F800007 F8000F9F80001FE00003DF80003FC00001FF8000FF000000FF8001FE0000007F8003FC00 00003F8003FC0000003F8007F80000001F800FF00000000F801FF00000000F801FE00000 0007803FE000000007803FC000000007803FC000000007807FC000000003807FC0000000 03807FC00000000380FF800000000000FF800000000000FF800000000000FF8000000000 00FF800000000000FF800000000000FF800000000000FF800000000000FF800000000000 FF800000000000FF8000000000007FC000000000007FC000000003807FC000000003803F C000000003803FC000000003803FE000000003801FE000000007801FF000000007000FF0 0000000F0007F80000000E0003FC0000001E0003FC0000001C0001FE0000003C0000FF00 00007800003FC00000F000001FE00003E0000007F80007C0000003FF807F00000000FFFF FC000000001FFFF00000000001FF80000031357BB33B>IIII104 DI<003FFFFE003FFFFE 003FFFFE00007FE000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 00001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0 00001FC07E001FC0FF001FC0FF001FC0FF001FC0FF001FC0FF003F80FE003F8070007F00 38007E001E00FC000F83F80003FFE00000FF00001F347BB22A>IIIII<000007FF00000000003FFFE000000001FE03FC00000007F0007F000000 0FC0001F8000003F80000FE000007F000007F00000FE000003F80001FC000001FC0003F8 000000FE0007F00000007F0007F00000007F000FE00000003F801FE00000003FC01FE000 00003FC03FC00000001FE03FC00000001FE03FC00000001FE07FC00000001FF07F800000 000FF07F800000000FF07F800000000FF0FF800000000FF8FF800000000FF8FF80000000 0FF8FF800000000FF8FF800000000FF8FF800000000FF8FF800000000FF8FF800000000F F8FF800000000FF8FF800000000FF87F800000000FF07FC00000001FF07FC00000001FF0 3FC00000001FE03FC00000001FE03FE00000003FE01FE00000003FC01FE00000003FC00F F00000007F8007F00000007F0007F8000000FF0003F8000000FE0001FC000001FC0000FE 000003F800007F000007F000003F80000FE000000FC0001F80000007F0007F00000001FE 03FC000000003FFFE00000000007FF00000035357BB33F>II114 D<000FF00180007FFE03 8001FFFF878007F00FEF800FC001FF801F0000FF803E00003F803E00001F807C00001F80 7C00000F80F800000F80F800000780F800000780F800000780FC00000380FC00000380FE 00000380FF000000007F800000007FC00000003FF80000003FFF8000001FFFFC00000FFF FFC00007FFFFF00003FFFFF80000FFFFFE00001FFFFF000003FFFF8000001FFFC0000001 FFC00000003FE00000001FE00000000FE000000007F000000003F0E0000003F0E0000001 F0E0000001F0E0000001F0F0000001F0F0000001F0F0000001E0F8000003E0F8000003E0 FC000007C0FE00000F80FF80001F00FFE0003E00FBFE00FC00F0FFFFF800E01FFFE000C0 03FF000024357BB32E>I<7FFFFFFFFFFFC07FFFFFFFFFFFC07FFFFFFFFFFFC07F8007FC 003FC07E0003F8000FC07C0003F80007C0780003F80003C0700003F80001C0700003F800 01C0F00003F80001E0F00003F80001E0E00003F80000E0E00003F80000E0E00003F80000 E0E00003F80000E0E00003F80000E0E00003F80000E0000003F8000000000003F8000000 000003F8000000000003F8000000000003F8000000000003F8000000000003F800000000 0003F8000000000003F8000000000003F8000000000003F8000000000003F80000000000 03F8000000000003F8000000000003F8000000000003F8000000000003F8000000000003 F8000000000003F8000000000003F8000000000003F8000000000003F8000000000003F8 000000000003F8000000000003F8000000000003F8000000000003F8000000000003F800 0000000007FC00000000000FFE000000000FFFFFFE0000000FFFFFFE0000000FFFFFFE00 0033327CB13B>II121 D E /FF 61 122 df<0000000FFF0000000001FFFFC00000000FFFFFF00000007F FFFFF8000001FFF803FC000003FFC000FE00000FFF0003FE00001FFE0007FF00003FFC00 0FFF00003FF8000FFF00007FF0000FFF00007FF0001FFF8000FFF0000FFF0000FFE0000F FF0000FFE0000FFF0000FFE0000FFF0000FFE00007FE0000FFE00001F80000FFE0000000 0000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000000 00FFE00000000000FFE001FFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FF FFFFFFFFFF80FFFFFFFFFFFF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FF E00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE0 0003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE000 03FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003 FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF 8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF80 00FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF8000FFE00003FF807F FFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF7FFFFFC1FFFFFF3846 7EC53E>12 D<07C0001FF0003FF8007FFC00FFFE00FFFF00FFFF00FFFF00FFFF80FFFF80 FFFF807FFF803FFF801FF78007C780000780000F80000F80000F00000F00001F00001E00 003E00003E00007C0000FC0000F80001F00003E00007E0000FC0001F80001F00000C0000 112278C41F>39 D<000001E0000003E000000FC000001F8000003F0000007E000000FC00 0001FC000003F8000007F0000007E000000FE000001FC000003FC000003F8000007F8000 00FF000000FF000001FE000001FE000003FC000003FC000007FC000007F8000007F80000 0FF800000FF000000FF000001FF000001FF000001FE000003FE000003FE000003FE00000 3FE000007FC000007FC000007FC000007FC000007FC000007FC00000FFC00000FFC00000 FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000FF800000 FF800000FF800000FF800000FF800000FF800000FFC00000FFC000007FC000007FC00000 7FC000007FC000007FC000007FC000003FE000003FE000003FE000003FE000001FE00000 1FF000001FF000000FF000000FF000000FF8000007F8000007F8000007FC000003FC0000 03FC000001FE000001FE000000FF000000FF0000007F8000003F8000003FC000001FC000 000FE0000007E0000007F0000003F8000001FC000000FC0000007E0000003F0000001F80 00000FC0000003E0000001E01B6476CA2C>II 45 D<07C01FF03FF87FFCFFFEFFFEFFFEFFFEFFFEFFFEFFFE7FFC3FF81FF007C00F0F78 8E1F>I<00003FF800000001FFFF0000000FFFFFE000003FFFFFF800007FF01FFC0000FF C007FE0001FF0001FF0003FE0000FF8007FE0000FFC007FC00007FC00FFC00007FE00FF8 00003FE01FF800003FF01FF800003FF03FF800003FF83FF800003FF83FF000001FF87FF0 00001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFC7FF000001FFCFFF0 00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 00001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF000001FFEFFF0 00001FFEFFF000001FFEFFF000001FFE7FF000001FFC7FF000001FFC7FF000001FFC7FF0 00001FFC7FF000001FFC3FF800003FF83FF800003FF83FF800003FF81FF800003FF01FF8 00003FF00FF800003FE00FFC00007FE007FC00007FC007FE0000FFC003FF0001FF8001FF 8003FF0000FFC007FE00007FF01FFC00003FFFFFF800000FFFFFE0000003FFFF80000000 3FF800002F427CC038>48 D<000003C000000007C00000001FC00000007FC0000003FFC0 00003FFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFFFFFC000FFC3FFC0000003FFC000 0003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000 03FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003 FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FF C0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0 000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC000 0003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC0000003FFC00000 03FFC0000003FFC0000003FFC0000003FFC0000003FFC000FFFFFFFFFCFFFFFFFFFCFFFF FFFFFCFFFFFFFFFCFFFFFFFFFC264177C038>I<0000FFE00000000FFFFE0000003FFFFF 800000FFFFFFE00003FFFFFFF80007FC03FFFE000FE0007FFF001F80003FFF803F00000F FFC07F000007FFC07FC00007FFE07FF00003FFE0FFF00001FFF0FFF80001FFF0FFF80001 FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF87FF00000FFF83FE00000 FFF81FC00000FFF800000000FFF800000000FFF000000001FFF000000001FFF000000001 FFE000000003FFE000000003FFC000000007FF800000000FFF000000000FFF000000001F FC000000003FF8000000003FF0000000007FE000000000FFC000000001FF0000000003FE 0000000007FC000000000FF0000000001FE0000000003F80000000007F0000780000FE00 00780001FC0000780003F80000F80007E00000F0000FC00000F0001F800000F0003F0000 00F0007C000001F000F8000003F001FFFFFFFFF003FFFFFFFFE007FFFFFFFFE00FFFFFFF FFE01FFFFFFFFFE03FFFFFFFFFE07FFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFC0FFFFFFFF FFC0FFFFFFFFFFC0FFFFFFFFFFC02D417BC038>I<0000FFF000000007FFFF0000001FFF FFC000007FFFFFF00000FF007FF80003F8003FFE0007E0001FFF0007E0000FFF000FF800 07FF800FFE0007FF801FFE0007FFC01FFF0007FFC01FFF0007FFC01FFF0007FFC01FFF00 07FFC01FFF0007FFC01FFF0007FFC00FFE0007FFC007FC0007FF8003F8000FFF80000000 0FFF000000001FFF000000001FFE000000003FFC000000007FF800000000FFF000000001 FFE00000000FFF80000007FFFE00000007FFF800000007FFFF00000007FFFFC000000000 FFF0000000003FFC000000000FFE000000000FFF8000000007FF8000000003FFC0000000 03FFE000000003FFE000000001FFF000000001FFF000000001FFF800000001FFF8000000 01FFF80FC00001FFF83FF00001FFF87FF80001FFF87FF80001FFF8FFFC0001FFF8FFFC00 01FFF8FFFC0001FFF0FFFC0001FFF0FFFC0003FFF0FFFC0003FFE07FF80003FFE07FF000 07FFC07FE00007FFC03F80000FFF801FF0001FFF000FFE00FFFE0007FFFFFFF80001FFFF FFF000007FFFFFC000001FFFFE00000001FFE000002D427BC038>I<000000003F000000 0000003F0000000000007F000000000000FF000000000001FF000000000003FF00000000 0003FF000000000007FF00000000000FFF00000000001FFF00000000003FFF0000000000 3FFF00000000007FFF0000000000FFFF0000000001F7FF0000000003E7FF0000000007E7 FF0000000007C7FF000000000F87FF000000001F07FF000000003E07FF000000007E07FF 000000007C07FF00000000F807FF00000001F007FF00000003E007FF00000007E007FF00 000007C007FF0000000F8007FF0000001F0007FF0000003E0007FF0000007C0007FF0000 007C0007FF000000F80007FF000001F00007FF000003E00007FF000007C00007FF00000F C00007FF00000F800007FF00001F000007FF00003E000007FF00007C000007FF0000FC00 0007FF0000FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFF FFFFFF800000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000F FF00000000000FFF00000000000FFF00000000000FFF00000000000FFF00000000000FFF 00000000000FFF00000000000FFF000000007FFFFFFF8000007FFFFFFF8000007FFFFFFF 8000007FFFFFFF8000007FFFFFFF8031417DC038>I<07000000030007E000003F0007FF 0007FF0007FFFFFFFF0007FFFFFFFE0007FFFFFFFC0007FFFFFFF80007FFFFFFF00007FF FFFFE00007FFFFFF800007FFFFFE000007FFFFFC000007FFFFE0000007FFFF00000007C0 0000000007C00000000007C00000000007C00000000007C00000000007C00000000007C0 0000000007C00000000007C00000000007C00000000007C03FF0000007C1FFFF000007C7 FFFFC00007DFFFFFF00007FFE03FFC0007FF000FFE0007FC0007FF0007F00003FF8007E0 0003FFC007C00001FFC003800001FFE000000001FFE000000000FFF000000000FFF00000 0000FFF000000000FFF800000000FFF800000000FFF800000000FFF80F800000FFF83FE0 0000FFF87FF00000FFF8FFF00000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF8 0000FFF0FFF00000FFF0FFF00001FFF07FE00001FFE07FC00001FFE07E000003FFC03E00 0003FFC03F000007FF801FC0000FFF000FF0001FFE0007FE00FFFC0003FFFFFFF00000FF FFFFE000003FFFFF8000000FFFFC00000001FFC000002D427BC038>I<000001FF800000 001FFFF00000007FFFFC000001FFFFFF000007FF807F80000FFC001F80003FF0001FC000 7FE0007FC000FFC000FFE001FF8001FFE003FF8001FFE003FF0001FFE007FE0001FFE00F FE0001FFE00FFE0001FFE01FFC0000FFC01FFC00007F801FFC00001E003FFC000000003F FC000000003FF8000000007FF8000000007FF8000000007FF807FC00007FF81FFF8000FF F87FFFE000FFF8FFFFF800FFF9F01FFC00FFFBC007FE00FFFF8003FF00FFFF8003FF80FF FF0001FFC0FFFE0001FFC0FFFE0000FFE0FFFE0000FFE0FFFC0000FFF0FFFC0000FFF0FF FC0000FFF0FFFC0000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF8FFF80000FFF87F F80000FFF87FF80000FFF87FF80000FFF87FF80000FFF87FF80000FFF83FF80000FFF83F F80000FFF83FF80000FFF03FFC0000FFF01FFC0000FFF01FFC0000FFF00FFC0001FFE00F FC0001FFE007FE0001FFC007FF0003FF8003FF8003FF0001FFC007FE0000FFE01FFC0000 7FFFFFF800001FFFFFF0000007FFFFC0000001FFFF000000003FF000002D427BC038>I< 1E00000000001F00000000001FFC000000001FFFFFFFFFFE1FFFFFFFFFFE1FFFFFFFFFFE 1FFFFFFFFFFE3FFFFFFFFFFE3FFFFFFFFFFC3FFFFFFFFFF83FFFFFFFFFF03FFFFFFFFFE0 3FFFFFFFFFC03FFFFFFFFFC07FFFFFFFFF807E0000003F007C0000007E007C000000FC00 78000000F80078000001F80078000003F000F8000007E000F000000FC000F000000F8000 F000001F80000000003F00000000007E0000000000FC0000000000FC0000000001F80000 000003F80000000003F00000000007F0000000000FE0000000000FE0000000001FE00000 00001FC0000000003FC0000000003FC0000000007FC0000000007F8000000000FF800000 0000FF8000000001FF8000000001FF8000000001FF8000000003FF8000000003FF000000 0003FF0000000003FF0000000007FF0000000007FF0000000007FF0000000007FF000000 0007FF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF000000 000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000007FE000000 0003FC0000000001F80000002F447AC238>I<00007FF000000003FFFF0000000FFFFFC0 00003FFFFFF000007F801FFC0001FC0003FE0003F80001FF0003F00000FF0007E000007F 8007E000003F800FC000003FC00FC000003FC01FC000001FC01FC000001FC01FE000001F C01FE000001FC01FF000001FC01FF800001FC01FFE00003FC01FFF00003F801FFFC0007F 801FFFF0007F000FFFFC00FF000FFFFE01FE0007FFFF83FC0007FFFFE7F80003FFFFFFE0 0001FFFFFFC00000FFFFFF0000007FFFFFC000003FFFFFE000000FFFFFF800000FFFFFFC 00003FFFFFFE0000FFFFFFFF0001FF3FFFFF8007FC0FFFFFC00FF803FFFFE01FF000FFFF E01FE0007FFFF03FE0001FFFF07FC00007FFF07F800003FFF87F800000FFF8FF8000007F F8FF0000003FF8FF0000001FF8FF0000000FF8FF0000000FF8FF00000007F8FF00000007 F8FF00000007F8FF80000007F07F80000007F07F8000000FF07FC000000FE03FE000001F E03FF000003FC01FF800007F800FFE0001FF0007FFC00FFE0003FFFFFFFC0000FFFFFFF0 00003FFFFFC000000FFFFF00000000FFF000002D427BC038>I<00007FF000000007FFFE 0000001FFFFF8000007FFFFFE00000FFE03FF00001FF800FF80003FF0007FC0007FE0007 FE000FFC0003FF001FFC0001FF003FFC0001FF803FFC0001FF807FF80001FFC07FF80000 FFC07FF80000FFE07FF80000FFE0FFF80000FFE0FFF80000FFF0FFF80000FFF0FFF80000 FFF0FFF80000FFF0FFF80000FFF0FFF80000FFF0FFF80000FFF8FFF80000FFF8FFF80000 FFF8FFF80000FFF8FFF80001FFF87FF80001FFF87FF80001FFF87FF80001FFF83FF80003 FFF83FF80003FFF81FFC0003FFF81FFC0007FFF80FFE000FFFF807FE000FFFF803FF001E FFF801FFC07CFFF800FFFFF8FFF8003FFFF0FFF8000FFFC0FFF00001FF00FFF000000000 FFF000000000FFF000000000FFE000000001FFE000000001FFE003C00001FFE00FF00001 FFC01FF80001FFC03FFC0003FF803FFC0003FF803FFC0003FF003FFC0007FE003FFC000F FE003FFC000FFC003FF8001FF8001FF0003FF0001FC000FFE0000FF003FFC00007FFFFFF 800003FFFFFE000001FFFFF80000007FFFE000000007FE0000002D427BC038>I<07C01F F03FF87FFCFFFEFFFEFFFEFFFEFFFEFFFEFFFE7FFC3FF81FF007C0000000000000000000 0000000000000000000000000000000000000007C01FF03FF87FFCFFFEFFFEFFFEFFFEFF FEFFFEFFFE7FFC3FF81FF007C00F2C78AB1F>I<7FFFFFFFFFFFFFFFFF80FFFFFFFFFFFF FFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC03FFF FFFFFFFFFFFFFF8000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000003FFFFFFFFFFFFFFFFF80FFFF FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFF FFC07FFFFFFFFFFFFFFFFF804A1C7AA657>61 D<000000001F8000000000000000001F80 00000000000000003FC000000000000000003FC000000000000000007FE0000000000000 00007FE000000000000000007FE00000000000000000FFF00000000000000000FFF00000 000000000001FFF80000000000000001FFF80000000000000001FFF80000000000000003 FFFC0000000000000003FFFC0000000000000007FFFE0000000000000007FFFE00000000 00000007FFFE000000000000000FFFFF000000000000000F9FFF000000000000001F9FFF 800000000000001F1FFF800000000000001F0FFF800000000000003F0FFFC00000000000 003E07FFC00000000000007E07FFE00000000000007C07FFE00000000000007C03FFE000 0000000000FC03FFF0000000000000F801FFF0000000000001F801FFF8000000000001F0 01FFF8000000000001F000FFF8000000000003F000FFFC000000000003E0007FFC000000 000007E0007FFE000000000007C0007FFE000000000007C0003FFE00000000000FC0003F FF00000000000F80001FFF00000000001F80001FFF80000000001F00000FFF8000000000 1F00000FFF80000000003F00000FFFC0000000003E000007FFC0000000007E000007FFE0 000000007FFFFFFFFFE0000000007FFFFFFFFFE000000000FFFFFFFFFFF000000000FFFF FFFFFFF000000001FFFFFFFFFFF800000001F0000000FFF800000001F0000000FFF80000 0003F0000000FFFC00000003E00000007FFC00000007E00000007FFE00000007C0000000 3FFE00000007C00000003FFE0000000F800000003FFF0000000F800000001FFF0000001F 800000001FFF8000001F000000000FFF8000003F000000000FFFC000003E000000000FFF C000007E0000000007FFC000FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF0FFFFFF00 000FFFFFFFF0FFFFFF00000FFFFFFFF0FFFFFF00000FFFFFFFF04C457CC455>65 DI<00000000FFF00000700000001FFFFF0000F0000001FFFFFFE001F000 0007FFFFFFF803F000003FFFFFFFFE07F00000FFFFE001FF0FF00001FFFE00003F9FF000 07FFF000000FFFF0000FFFC0000007FFF0001FFF00000003FFF0003FFE00000001FFF000 7FFC00000000FFF000FFF8000000007FF001FFF0000000003FF003FFE0000000001FF007 FFE0000000001FF007FFC0000000000FF00FFF80000000000FF00FFF800000000007F01F FF000000000007F01FFF000000000003F03FFF000000000003F03FFE000000000003F03F FE000000000003F07FFE000000000001F07FFE000000000001F07FFE000000000001F07F FC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FF FC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FF FC00000000000000FFFC00000000000000FFFC00000000000000FFFC00000000000000FF FC00000000000000FFFC00000000000000FFFC000000000000007FFC000000000000007F FE000000000000007FFE000000000000F07FFE000000000000F03FFE000000000000F03F FE000000000000F03FFF000000000000F01FFF000000000001F01FFF000000000001E00F FF800000000001E00FFF800000000003E007FFC00000000003C007FFE00000000007C003 FFE00000000007C001FFF0000000000F8000FFF8000000001F00007FFC000000003F0000 3FFE000000007E00001FFF80000000FC00000FFFC0000001F8000007FFF0000007F00000 01FFFE00001FE0000000FFFFF001FF800000003FFFFFFFFF0000000007FFFFFFFC000000 0001FFFFFFF000000000001FFFFF80000000000000FFF800000044467AC451>II< FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800FFFFFFFFFFFFFFF800 FFFFFFFFFFFFFFFC00001FFF000001FFFC00001FFF0000003FFC00001FFF0000000FFC00 001FFF00000003FC00001FFF00000001FC00001FFF00000000FC00001FFF00000000FC00 001FFF000000007E00001FFF000000003E00001FFF000000003E00001FFF000000003E00 001FFF000000001E00001FFF000000001E00001FFF000078001E00001FFF000078001E00 001FFF000078000F00001FFF000078000F00001FFF000078000F00001FFF000078000F00 001FFF0000F8000000001FFF0000F8000000001FFF0000F8000000001FFF0001F8000000 001FFF0003F8000000001FFF001FF8000000001FFFFFFFF8000000001FFFFFFFF8000000 001FFFFFFFF8000000001FFFFFFFF8000000001FFFFFFFF8000000001FFF001FF8000000 001FFF0003F8000000001FFF0001F8000000001FFF0000F8000000001FFF0000F8000000 001FFF0000F80001E0001FFF0000780001E0001FFF0000780001E0001FFF0000780003C0 001FFF0000780003C0001FFF0000780003C0001FFF0000780003C0001FFF0000000003C0 001FFF0000000007C0001FFF0000000007C0001FFF000000000780001FFF000000000780 001FFF000000000F80001FFF000000000F80001FFF000000001F80001FFF000000001F80 001FFF000000003F80001FFF000000007F00001FFF00000000FF00001FFF00000001FF00 001FFF00000007FF00001FFF0000001FFF00001FFF000001FFFF00FFFFFFFFFFFFFFFF00 FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFE00 43447DC34A>II73 D75 DIII<00000007FFC0000000000000FFFFFE000000000007 FFFFFFC0000000001FFFFFFFF0000000007FFE00FFFC00000001FFF0001FFF00000007FF 800003FFC000000FFF000001FFE000001FFC0000007FF000003FF80000003FF800007FF0 0000001FFC0000FFF00000001FFE0001FFE00000000FFF0003FFC000000007FF8003FFC0 00000007FF8007FF8000000003FFC007FF8000000003FFC00FFF0000000001FFE00FFF00 00000001FFE01FFF0000000001FFF01FFE0000000000FFF03FFE0000000000FFF83FFE00 00000000FFF83FFE0000000000FFF87FFE0000000000FFFC7FFC00000000007FFC7FFC00 000000007FFC7FFC00000000007FFC7FFC00000000007FFCFFFC00000000007FFEFFFC00 000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00 000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00 000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFE7FFC00 000000007FFC7FFE0000000000FFFC7FFE0000000000FFFC7FFE0000000000FFFC3FFE00 00000000FFF83FFE0000000000FFF83FFF0000000001FFF81FFF0000000001FFF01FFF00 00000001FFF01FFF8000000003FFF00FFF8000000003FFE00FFF8000000003FFE007FFC0 00000007FFC003FFC000000007FF8003FFE00000000FFF8001FFF00000001FFF0000FFF8 0000003FFE00007FFC0000007FFC00003FFE000000FFF800001FFF000001FFF000000FFF C00007FFE0000007FFF0001FFFC0000001FFFE00FFFF00000000FFFFFFFFFE000000003F FFFFFFF80000000007FFFFFFC00000000000FFFFFE00000000000007FFC000000047467A C454>II<00000007FFC0000000000000FFFFFE000000000007FFFFFFC0 000000001FFFFFFFF0000000007FFE00FFFC00000001FFF0001FFF00000007FFC00007FF C000000FFF000001FFE000001FFE000000FFF000003FFC0000007FF800007FF80000003F FC0000FFF00000001FFE0001FFE00000000FFF0003FFC000000007FF8003FFC000000007 FF8007FF8000000003FFC007FF8000000003FFC00FFF8000000003FFE00FFF0000000001 FFE01FFF0000000001FFF01FFF0000000001FFF03FFE0000000000FFF83FFE0000000000 FFF83FFE0000000000FFF87FFE0000000000FFFC7FFE0000000000FFFC7FFC0000000000 7FFC7FFC00000000007FFC7FFC00000000007FFCFFFC00000000007FFEFFFC0000000000 7FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC0000000000 7FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFEFFFC0000000000 7FFEFFFC00000000007FFEFFFC00000000007FFEFFFC00000000007FFE7FFC0000000000 7FFC7FFC00000000007FFC7FFC00000000007FFC7FFE0000000000FFFC3FFE0000000000 FFF83FFE0000000000FFF83FFE0000000000FFF81FFE0000000000FFF01FFF0000000001 FFF01FFF0000000001FFF00FFF0000000001FFE00FFF8000FE0003FFE007FF8003FF8003 FFC003FFC007FFC007FF8003FFC00FFFE007FF8001FFE01F83F00FFF0000FFF01E00F81F FE00007FF83E007C3FFC00003FFC3C003E7FF800001FFE3C001EFFF000000FFF3C001FFF E0000007FFFE001FFFC0000001FFFE001FFF00000000FFFF80FFFE000000003FFFFFFFF8 0000000007FFFFFFE00002000000FFFFFFF0000700000007FFC7F00007000000000007F8 0007000000000003FC000F000000000003FE001F000000000003FF80FF000000000003FF FFFF000000000001FFFFFE000000000001FFFFFE000000000001FFFFFE000000000000FF FFFE000000000000FFFFFC000000000000FFFFFC0000000000007FFFF80000000000007F FFF00000000000003FFFF00000000000001FFFE00000000000000FFFC000000000000007 FF0000000000000001FC0048587AC454>II<0000FFE000 1C000007FFFE003C00003FFFFF807C0000FFFFFFE0FC0001FFFFFFF9FC0003FF801FFFFC 0007FC0001FFFC000FF800007FFC001FF000003FFC003FE000000FFC003FC0000007FC00 7FC0000003FC007F80000003FC007F80000001FC007F80000000FC00FF80000000FC00FF 800000007C00FF800000007C00FFC00000007C00FFC00000007C00FFE00000003C00FFF0 0000003C00FFF80000003C00FFFC00000000007FFE00000000007FFFE0000000007FFFFE 000000003FFFFFF00000003FFFFFFF0000001FFFFFFFE000001FFFFFFFFC00000FFFFFFF FE000007FFFFFFFF800003FFFFFFFFC00001FFFFFFFFE000007FFFFFFFF000001FFFFFFF F8000007FFFFFFFC000000FFFFFFFC0000000FFFFFFE00000000FFFFFE0000000007FFFF 00000000007FFF00000000003FFF00000000000FFF800000000007FF800000000003FF80 F000000003FF80F000000001FF80F000000001FF80F000000000FF80F000000000FF80F8 00000000FF80F800000000FF80F800000000FF00FC00000000FF00FC00000000FF00FE00 000001FF00FF00000001FE00FF80000003FE00FFC0000003FC00FFE0000007FC00FFF800 000FF800FFFF00003FF000FFFFF800FFE000FE7FFFFFFFC000FC1FFFFFFF0000F807FFFF FC0000F000FFFFF00000E00007FF80000031467AC43E>I<3FFFFFFFFFFFFFFFE03FFFFF FFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFFFFFFFFFFFFFFE03FFE00 0FFF8003FFE07FE0000FFF80003FF07FC0000FFF80001FF07F00000FFF800007F07F0000 0FFF800007F07E00000FFF800003F07C00000FFF800001F07C00000FFF800001F07C0000 0FFF800001F07800000FFF800000F07800000FFF800000F07800000FFF800000F0780000 0FFF800000F0F800000FFF800000F8F000000FFF80000078F000000FFF80000078F00000 0FFF80000078F000000FFF80000078F000000FFF800000780000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000000000FFF800000000000000FFF800000000000000FFF80000000000000 0FFF800000000007FFFFFFFFFF00000007FFFFFFFFFF00000007FFFFFFFFFF00000007FF FFFFFFFF00000007FFFFFFFFFF000045437CC24E>I86 D<0001FFE0000000001FFFFE000000007FFFFF80000001FFFFFFE0000003FE007FF80000 07FC001FFC000007FE000FFE00000FFF0007FF00000FFF0007FF00000FFF0003FF80000F FF0003FF80000FFF0003FF80000FFF0001FFC00007FE0001FFC00003FC0001FFC00000F0 0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000003 FFFFC0000000FFFFFFC0000007FFFFFFC000003FFFF1FFC00000FFFC01FFC00003FFE001 FFC0000FFF8001FFC0001FFE0001FFC0003FFC0001FFC0003FF80001FFC0007FF80001FF C0007FF00001FFC000FFF00001FFC000FFE00001FFC000FFE00001FFC000FFE00001FFC0 00FFE00003FFC000FFE00003FFC000FFF00007FFC0007FF8000FFFC0007FF8001FFFF000 3FFE003EFFFFC01FFF80FC7FFFC007FFFFF87FFFC003FFFFE01FFFC0007FFF8007FFC000 0FFC00000000322F7DAD36>97 D<007FC000000000FFFFC000000000FFFFC000000000FF FFC000000000FFFFC000000000FFFFC00000000003FFC00000000001FFC00000000001FF C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000 00000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000 000001FFC00FF8000001FFC0FFFF800001FFC3FFFFE00001FFCFFFFFF80001FFDFC03FFC 0001FFFF000FFE0001FFFC0003FF0001FFF80001FF8001FFF00001FFC001FFE00000FFE0 01FFC00000FFE001FFC000007FF001FFC000007FF001FFC000007FF801FFC000003FF801 FFC000003FF801FFC000003FF801FFC000003FFC01FFC000003FFC01FFC000003FFC01FF C000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC0 00003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FF801FFC000 003FF801FFC000007FF801FFC000007FF001FFC000007FF001FFC000007FF001FFC00000 FFE001FFE00000FFC001FFF00001FFC001FFF80003FF8001FF7C0007FF0001FE3E000FFE 0001FC1FC07FFC0001F80FFFFFF00001F003FFFFC00001E000FFFF00000000001FF00000 36467DC43E>I<00003FFC00000001FFFFC000000FFFFFF000003FFFFFFC00007FF003FE 0000FFC001FF0003FF8003FF0007FF0007FF8007FE0007FF800FFE0007FF801FFC0007FF 801FFC0007FF803FF80007FF803FF80003FF007FF80001FE007FF8000078007FF0000000 007FF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 00FFF000000000FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000 00FFF0000000007FF8000000007FF8000000007FF8000000003FF8000000003FFC000003 C03FFC000003C01FFE000007C00FFE000007800FFF00000F8007FF80001F0003FFC0003E 0001FFF0007C00007FFC03F800003FFFFFF000000FFFFFC0000003FFFF000000003FF800 002A2F7CAD32>I<0000000003FE0000000007FFFE0000000007FFFE0000000007FFFE00 00000007FFFE0000000007FFFE00000000001FFE00000000000FFE00000000000FFE0000 0000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE000000 00000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000 000FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000003FE0 0FFE000003FFFC0FFE00000FFFFF8FFE00003FFFFFCFFE0000FFF807FFFE0001FFC001FF FE0003FF80007FFE0007FF00003FFE000FFE00001FFE000FFC00000FFE001FFC00000FFE 003FF800000FFE003FF800000FFE003FF800000FFE007FF800000FFE007FF000000FFE00 7FF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FF F000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF0 00000FFE00FFF000000FFE00FFF000000FFE007FF000000FFE007FF000000FFE007FF000 000FFE007FF800000FFE003FF800000FFE003FF800000FFE001FFC00001FFE001FFC0000 1FFE000FFE00003FFE0007FE00007FFE0003FF0000FFFF0001FFC003FFFFFC00FFF01FEF FFFC007FFFFF8FFFFC001FFFFE0FFFFC0007FFF80FFFFC00007FC00FF80036467CC43E> I<00003FF800000003FFFF8000000FFFFFE000003FFFFFF000007FF83FF80000FFC007FC 0001FF8003FE0003FF0001FF0007FE0000FF800FFC0000FF801FFC00007FC01FF800007F C03FF800003FE03FF800003FE07FF800003FE07FF000003FE07FF000003FF07FF000001F F0FFF000001FF0FFF000001FF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFFF0FFFFFFFFFF F0FFF000000000FFF000000000FFF000000000FFF000000000FFF0000000007FF0000000 007FF0000000007FF8000000007FF8000000003FF8000000003FF8000000F01FFC000000 F01FFC000001F00FFE000001E007FF000003E003FF800007C001FFC0000F8000FFF0003F 00007FFE01FE00001FFFFFFC000007FFFFF0000001FFFFC00000001FFE00002C2F7DAD33 >I<000000FF8000000FFFE000007FFFF00001FFFFF80003FF8FFC000FFE0FFE001FFC1F FE001FF81FFE003FF81FFE007FF01FFE007FF01FFE007FF00FFC00FFE00FFC00FFE003F0 00FFE000C000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 FFE0000000FFE0000000FFE0000000FFE0000000FFE00000FFFFFFF800FFFFFFF800FFFF FFF800FFFFFFF800FFFFFFF80000FFE0000000FFE0000000FFE0000000FFE0000000FFE0 000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000 0000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000 00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF E000007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE0007FFFFFE00027467DC522>I<00 00FFE0007E00000FFFFE03FF80003FFFFF8FFF8000FFFFFFFFFFC001FFC07FFF3FC003FF 001FF83FC007FE000FFC3FC00FFC0007FE1F801FFC0007FF0F001FF80003FF00001FF800 03FF00003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003FF80003 FF80003FF80003FF80003FF80003FF80003FF80003FF80001FF80003FF00001FF80003FF 00001FFC0007FF00000FFC0007FE000007FE000FFC000003FF001FF8000001FFC07FF000 0003FFFFFFE0000003FFFFFF800000078FFFFE0000000780FFE00000000F800000000000 0F8000000000000F8000000000000F8000000000000FC000000000000FE000000000000F F000000000000FFFFFFFC000000FFFFFFFFC000007FFFFFFFF800007FFFFFFFFE00003FF FFFFFFF00001FFFFFFFFFC0000FFFFFFFFFC0003FFFFFFFFFE000FFFFFFFFFFF001FF000 007FFF003FC0000007FF007F80000001FF807F80000000FF80FF00000000FF80FF000000 007F80FF000000007F80FF000000007F80FF000000007F80FF80000000FF807F80000000 FF007FC0000001FF003FE0000003FE001FF0000007FC000FFE00003FF80007FFC001FFF0 0001FFFFFFFFC000007FFFFFFF0000000FFFFFF8000000007FFF00000032427DAC38>I< 007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FF FFC00000000003FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 0000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000 00000001FFC00000000001FFC00000000001FFC00000000001FFC007FE000001FFC03FFF 800001FFC0FFFFE00001FFC1FFFFF80001FFC7F03FFC0001FFCF801FFC0001FFDF000FFE 0001FFDE000FFE0001FFFC000FFE0001FFF80007FF0001FFF00007FF0001FFF00007FF00 01FFE00007FF0001FFE00007FF0001FFE00007FF0001FFC00007FF0001FFC00007FF0001 FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 FF0001FFC00007FF0001FFC00007FF00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFF FEFFFFFF83FFFFFEFFFFFF83FFFFFE37457CC43E>I<007C0001FF0003FF8007FFC007FF C00FFFE00FFFE00FFFE00FFFE00FFFE007FFC007FFC003FF8001FF00007C000000000000 00000000000000000000000000000000000000000000000000007FC07FFFC07FFFC07FFF C07FFFC07FFFC003FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FF C0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18467CC520>I<000003E000000FF800001FFC00 003FFE00003FFE00007FFF00007FFF00007FFF00007FFF00007FFF00003FFE00003FFE00 001FFC00000FF8000003E000000000000000000000000000000000000000000000000000 000000000000000000000000000000000001FF0003FFFF0003FFFF0003FFFF0003FFFF00 03FFFF00000FFF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00 0007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF1F 8007FF3FC007FF7FE007FFFFF007FFFFF00FFEFFF00FFEFFF00FFCFFF01FFCFFE01FF87F E03FF03FC0FFE01FFFFF800FFFFF0003FFFC0000FFC000205A86C522>I<007FC0000000 00FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000 03FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001 FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FF C00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0 0000000001FFC00000000001FFC00000000001FFC00000000001FFC0007FFFE001FFC000 7FFFE001FFC0007FFFE001FFC0007FFFE001FFC0007FFFE001FFC0000FE00001FFC0001F C00001FFC0003F000001FFC0007E000001FFC000FC000001FFC003F8000001FFC007E000 0001FFC00FC0000001FFC01F80000001FFC07F00000001FFC0FE00000001FFC1FC000000 01FFC3FE00000001FFC7FE00000001FFDFFF00000001FFFFFF80000001FFFFFFC0000001 FFFFFFC0000001FFF9FFE0000001FFE1FFF0000001FFC0FFF8000001FF807FF8000001FF 803FFC000001FF803FFE000001FF801FFF000001FF800FFF000001FF8007FF800001FF80 07FFC00001FF8003FFE00001FF8001FFE00001FF8000FFF00001FF8000FFF80001FF8000 7FFC0001FF80003FFC00FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FFFFF8FFFFFF03FF FFF8FFFFFF03FFFFF835457DC43B>I<007FC000FFFFC000FFFFC000FFFFC000FFFFC000 FFFFC00003FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000 01FFC00001FFC00001FFC00001FFC00001FFC000FFFFFF80FFFFFF80FFFFFF80FFFFFF80 FFFFFF8019457CC420>I<007F8007FE00000FFC0000FFFF803FFFC0007FFF8000FFFF80 FFFFF001FFFFE000FFFF81FFFFF803FFFFF000FFFF87F01FFC0FE03FF800FFFF8FC00FFE 1F801FFC0003FF9F000FFF3E001FFE0001FF9E0007FF3C000FFE0001FFBC0007FF78000F FE0001FFF80003FFF00007FF0001FFF80003FFF00007FF0001FFF00003FFE00007FF0001 FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFE00003FFC00007FF0001FFC000 03FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF80 0007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF 0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FF C00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003 FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF8000 07FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF00 01FFC00003FF800007FF0001FFC00003FF800007FF0001FFC00003FF800007FF0001FFC0 0003FF800007FF0001FFC00003FF800007FF00FFFFFF81FFFFFF03FFFFFEFFFFFF81FFFF FF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FFFFFEFFFFFF81FFFFFF03FF FFFE572D7CAC5E>I<007F8007FE0000FFFF803FFF8000FFFF80FFFFE000FFFF81FFFFF8 00FFFF87F03FFC00FFFF8F801FFC0003FF9F000FFE0001FF9E000FFE0001FFBC000FFE00 01FFF80007FF0001FFF00007FF0001FFF00007FF0001FFE00007FF0001FFE00007FF0001 FFE00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 07FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007 FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF 00FFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFEFFFFFF83FFFFFE 372D7CAC3E>I<00001FFC0000000001FFFFC000000007FFFFF00000001FFFFFFC000000 7FF80FFF000000FFC001FF800001FF8000FFC00003FE00003FE00007FE00003FF0000FFC 00001FF8000FF800000FF8001FF800000FFC001FF800000FFC003FF800000FFE003FF000 0007FE007FF0000007FF007FF0000007FF007FF0000007FF007FF0000007FF00FFF00000 07FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007 FF80FFF0000007FF80FFF0000007FF80FFF0000007FF80FFF0000007FF807FF0000007FF 007FF0000007FF007FF0000007FF007FF0000007FF003FF800000FFE003FF800000FFE00 1FF800000FFC001FFC00001FFC000FFC00001FF80007FE00003FF00007FE00003FF00003 FF8000FFE00001FFC001FFC000007FF80FFF0000003FFFFFFE0000000FFFFFF800000001 FFFFC0000000001FFC000000312F7DAD38>I<007FC00FF80000FFFFC0FFFF8000FFFFC3 FFFFE000FFFFCFFFFFF800FFFFDFC03FFC00FFFFFF001FFE0003FFFC0007FF0001FFF800 03FF8001FFF00003FFC001FFE00001FFE001FFC00001FFE001FFC00000FFF001FFC00000 FFF001FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF801FFC000003F FC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC 01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01FFC000003FFC01 FFC000003FFC01FFC000007FF801FFC000007FF801FFC000007FF801FFC000007FF001FF C00000FFF001FFC00000FFF001FFC00001FFE001FFE00001FFC001FFF00003FFC001FFF8 0007FF8001FFFC000FFF0001FFFE001FFE0001FFDFC07FFC0001FFCFFFFFF00001FFC3FF FFC00001FFC0FFFF000001FFC01FF0000001FFC00000000001FFC00000000001FFC00000 000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0000000 0001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000 FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF80000000FFFFFF8000000036 407DAC3E>I<00003FE0001E000003FFFC003E00000FFFFF007E00003FFFFF807E0000FF F80FE0FE0001FFE003F1FE0003FFC001F1FE0007FF8000FBFE000FFF00007FFE000FFE00 003FFE001FFE00001FFE003FFC00001FFE003FFC00000FFE003FF800000FFE007FF80000 0FFE007FF800000FFE007FF800000FFE00FFF000000FFE00FFF000000FFE00FFF000000F FE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE 00FFF000000FFE00FFF000000FFE00FFF000000FFE00FFF000000FFE007FF800000FFE00 7FF800000FFE007FF800000FFE007FF800000FFE003FFC00000FFE003FFC00000FFE001F FE00001FFE001FFE00003FFE000FFF00007FFE0007FF0000FFFE0003FF8001FFFE0001FF E003EFFE0000FFF01FCFFE00007FFFFF8FFE00001FFFFE0FFE000003FFF80FFE0000007F C00FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE0000000000 0FFE00000000000FFE00000000000FFE00000000000FFE00000000000FFE00000000000F FE00000000000FFE00000000000FFE00000000000FFE0000000007FFFFFC00000007FFFF FC00000007FFFFFC00000007FFFFFC00000007FFFFFC36407CAC3B>I<007F807F00FFFF 81FFE0FFFF83FFF0FFFF8FFFF8FFFF8F8FFCFFFF9F1FFE03FFBE1FFE01FFBC1FFE01FFF8 1FFE01FFF81FFE01FFF01FFE01FFF00FFC01FFE007F801FFE001E001FFE0000001FFE000 0001FFE0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC00000 01FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001 FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FFC0000001FF C0000001FFC0000001FFC00000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFFE000FFFFFF E000272D7DAC2E>I<001FFC038000FFFF878003FFFFFF800FFFFFFF801FF003FF803FC0 00FF803F80003F807F00001F807E00001F80FE00000F80FE00000F80FE00000780FF0000 0780FF00000780FF80000780FFE0000000FFFE0000007FFFF000007FFFFF00003FFFFFC0 003FFFFFF0001FFFFFFC000FFFFFFE0003FFFFFF0001FFFFFF80007FFFFF80000FFFFFC0 00003FFFC0000003FFE0000000FFE0F000003FE0F000003FE0F800001FE0F800000FE0F8 00000FE0FC00000FE0FC00000FE0FE00000FC0FF00001FC0FF00001FC0FF80003F80FFE0 007F00FFF803FE00FFFFFFFC00FCFFFFF800F03FFFE000E007FE0000232F7CAD2C>I<00 01E000000001E000000001E000000001E000000001E000000003E000000003E000000003 E000000003E000000007E000000007E00000000FE00000000FE00000001FE00000001FE0 0000003FE00000007FE0000000FFE0000003FFE000000FFFFFFF80FFFFFFFF80FFFFFFFF 80FFFFFFFF80FFFFFFFF8000FFE0000000FFE0000000FFE0000000FFE0000000FFE00000 00FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000 FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FF E0000000FFE0000000FFE001E000FFE001E000FFE001E000FFE001E000FFE001E000FFE0 01E000FFE001E000FFE001E000FFE001E000FFE003E000FFF003C0007FF003C0007FF007 C0003FF80F80001FFC1F00000FFFFF000007FFFC000001FFF80000003FE00023407EBE2C >I<007FC00001FF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF00FFFFC003FFFF 00FFFFC003FFFF0003FFC0000FFF0001FFC00007FF0001FFC00007FF0001FFC00007FF00 01FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001 FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FF C00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC0 0007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC00007FF0001FFC000 07FF0001FFC00007FF0001FFC00007FF0001FFC0000FFF0001FFC0000FFF0001FFC0001F FF0001FFC0001FFF0001FFC0003FFF0000FFC0003FFF0000FFE0007FFF80007FE001F7FF FE007FF807E7FFFE003FFFFFC7FFFE000FFFFF07FFFE0003FFFE07FFFE00007FF007FC00 372E7CAC3E>IIIII E /FG 33 90 df<0000001C0000003C0000007C000001FC000007F800007FF8007FFFF8 007FF3F8007F83F8000007F8000007F0000007F0000007F0000007F0000007F000000FF0 00000FE000000FE000000FE000000FE000000FE000001FE000001FC000001FC000001FC0 00001FC000001FC000003FC000003F8000003F8000003F8000003F8000003F8000007F80 00007F0000007F0000007F0000007F0000007F000000FF000000FE000000FE000000FE00 0000FE000000FE000001FE000001FC000001FC000001FC000001FC000001FC000003FC00 0003F8000003F8000003F8000003F8000003F8000007F8000007F0000007F0000007F000 000FF000003FFC00FFFFFFFEFFFFFFFEFFFFFFFE1F4277C131>49 D<000000FF8000000007FFF00000001FFFFE0000003E01FF000000F8007F800001E0003F C0000380001FE0000700000FF0000E00000FF8001C000007F8001C000007F80038000007 FC0030000003FC007E000003FC007F800003FC00FFC00003FC00FFC00003FC00FFC00003 FC00FFC00007FC00FFC00007FC00FF800007FC00FF800007F8003E00000FF8000000000F F8000000000FF0000000001FF0000000001FE0000000003FE0000000003FC0000000007F 8000000000FF8000000000FF0000000001FE0000000003FC0000000007F80000000007F0 000000000FE0000000001FC0000000003F00000000007E0000000000FC0000000001F800 00000003F00000000007C0000000000F80000000001F00000000003E0000000000780000 000000F00000000001E00001800003C0000300000780000300000F00000300001C000006 00003800000600007000000E0000E000000C0001C000001C00038000001C000FFFFFFFF8 001FFFFFFFF8003FFFFFFFF8007FFFFFFFF000FFFFFFFFF000FFFFFFFFF000FFFFFFFFE0 002E427BC131>I<000000FF8000000007FFF00000003FFFFC0000007F01FF000001F000 7F800003C0003FC0000700001FC0000E00001FE0001C00001FE0001FC0000FF0003FE000 0FF0003FE0000FF0003FE0001FF0003FE0001FF0003FE0001FF0003FE0001FE0003FC000 1FE0000F00003FE0000000003FC0000000003FC0000000007F80000000007F8000000000 FF0000000001FE0000000001FC0000000003F80000000007F0000000000FC0000000003F 0000000001FC00000000FFF000000000FFFE00000000001F80000000000FE00000000007 F00000000003F80000000001FC0000000001FE0000000000FE0000000000FF0000000000 FF0000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000 FF800F000000FF803FC00000FF807FC00000FF807FC00001FF80FFC00001FF00FFC00001 FF00FFC00001FF00FF800003FE00FF000003FE00FC000007FC0060000007F8007000000F F8007000001FF0003800001FE0001C00003FC0001F00007F80000F8001FE000003F807FC 000000FFFFF00000003FFF8000000007FC0000002C447AC131>I<000000000380000000 000380000000000780000000000F80000000001F00000000003F00000000007F00000000 007F0000000000FF0000000001FF0000000003FE0000000007FE0000000006FE00000000 0CFE0000000018FE0000000030FE0000000071FC00000000E1FC00000000C1FC00000001 81FC0000000301FC0000000701FC0000000E03F80000000C03F80000001803F800000030 03F80000006003F8000000E003F8000001C007F00000018007F00000030007F000000600 07F000000E0007F000001C0007F0000018000FE0000030000FE0000060000FE00000C000 0FE00001C0000FE0000380000FE0000300001FC0000600001FC0000C00001FC0001C0000 1FC0003800001FC0003000001FC0006000003F8000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFF FFFFC00000003F80000000007F80000000007F80000000007F00000000007F0000000000 7F00000000007F0000000000FF0000000000FF0000000000FE0000000000FE0000000000 FE0000000001FE0000000003FF00000003FFFFFF000003FFFFFF000003FFFFFE002A437A C231>I<0003000000600003E00003E00003FC003FC00003FFFFFF800007FFFFFF000007 FFFFFC000007FFFFF8000007FFFFE0000007FFFF800000063FFC0000000E00000000000C 00000000000C00000000000C00000000000C00000000000C00000000001C000000000018 000000000018000000000018000000000018000000000018000000000038000000000030 00000000003007F8000000303FFE00000030F80F80000033C007C00000770003E000007E 0003F00000780001F80000700001F80000600000FC0000600000FC0000000000FE000000 0000FE0000000000FE0000000000FE0000000000FF0000000000FF0000000000FF000000 0000FF0000000000FF0000000000FF0000000001FF000F000001FE003FC00001FE007FC0 0001FE007FC00001FE007FC00001FE007FC00003FC00FFC00003FC00FF800003F800FE00 0007F80060000007F0006000000FF0006000000FE0007000001FC0007000001FC0003800 003F80003800007F00001C0000FE00000E0001FC00000F8007F0000007E01FE0000001FF FF800000007FFE000000001FE00000002B4479C131>I<0000000FF0000000007FFE0000 0003FFFF00000007F00FC000001FC001C000007F0000E00000FC0000600001F8000FE000 03F0001FE00007E0003FE0000FC0003FE0001FC0003FE0003F80003FE0003F00003FC000 7F00001F8000FE0000000000FC0000000001FC0000000003FC0000000003F80000000007 F80000000007F00000000007F0000000000FF0000000000FE00FF000001FE07FFC00001F E0F01F00001FE3C00FC0003FC70007E0003FCE0003F0003FDC0001F0003FD80001F8003F F80000FC007FF00000FC007FE00000FE007FE00000FE007FC00000FE007FC00000FF007F 800000FF00FF800000FF00FF800000FF00FF000000FF00FF000000FF00FF000000FF00FF 000001FF00FF000001FE00FF000001FE00FE000001FE00FE000001FE00FE000001FE00FE 000003FC00FE000003FC007E000003FC007E000003F8007E000007F8007E000007F0007F 00000FE0003F00000FE0003F00001FC0001F00003F80001F80003F00000FC0007E00000F C000FC000007E003F8000003F80FE0000000FFFFC00000003FFE000000000FF00000002B 4478C131>I<01800000000003800000000003F00000000007FFFFFFFFF807FFFFFFFFF0 07FFFFFFFFF00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFC01FFFFFFFFF801C0000000700 180000000E00380000001C0030000000380030000000300060000000700060000000E000 60000001C000C00000038000C000000700000000000E00000000001C00000000001C0000 000000380000000000700000000000E00000000001C00000000003800000000003800000 00000700000000000E00000000001E00000000001C00000000003C000000000078000000 0000F80000000000F00000000001F00000000001F00000000003E00000000007E0000000 0007E0000000000FC0000000000FC0000000001FC0000000001F80000000003F80000000 003F80000000007F80000000007F0000000000FF0000000000FF0000000000FF00000000 01FE0000000001FE0000000003FE0000000003FE0000000003FE0000000003FE00000000 07FC0000000007FC0000000007FC0000000007FC0000000007FC000000000FFC00000000 0FF8000000000FF80000000007F00000000003C0000000002D4573C231>I<0000007F80 00000003FFF00000000FFFFC0000003F80FE000000FC003F000001F0001F800003E0000F C00007C00007E0000F800003E0000F000003E0001F000003F0001E000001F0003E000001 F0003E000001F0003E000003F0007E000003E0007E000003E0007E000003E0007E000007 E0007F000007C0007F80000FC0007FC0000F80007FE0001F00003FF0003E00003FFC007C 00001FFE00F800001FFF01F000000FFFC7C0000007FFEF00000003FFFC00000001FFFC00 0000007FFE000000003FFF00000000FFFFC0000003E7FFE000000F83FFF000001F01FFF8 00007C007FFC0000F8003FFE0001F0001FFE0003E00007FF0007C00003FF000F800001FF 001F800000FF801F0000007F803F0000003F803E0000003F807E0000001F807C0000001F 807C0000001F807C0000001F80FC0000001F00F80000001F00F80000001F00F80000001E 00FC0000003E007C0000003C007C0000007C007E000000F8003E000001F0003F000003E0 001F800007C0000FC0000F800007E0003F000003FC03FC000000FFFFF00000003FFFC000 000007FC0000002C447AC131>I<007801FC03FE03FE07FE07FE07FE03FC03F800F00000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000001E003F807FC0FFC0FFC0FFC0FFC0FF807F003C000F2B77AA1B>58 D<00000000000C00000000000000001C00000000000000003C00000000000000003E0000 0000000000007E00000000000000007E0000000000000000FE0000000000000000FE0000 000000000001FE0000000000000001FF0000000000000003FF0000000000000003FF0000 000000000006FF0000000000000006FF000000000000000CFF800000000000000CFF8000 0000000000187F80000000000000187F80000000000000307F80000000000000307F8000 0000000000607FC0000000000000603FC0000000000000C03FC0000000000000C03FC000 0000000001803FC0000000000001803FE0000000000003003FE0000000000003001FE000 0000000006001FE0000000000006001FE000000000000C001FE000000000000C001FF000 0000000018000FF0000000000018000FF0000000000030000FF0000000000070000FF000 0000000060000FF80000000000E0000FF80000000000C00007F80000000001C00007F800 00000001800007F80000000003800007F80000000003000007FC0000000006000003FC00 00000006000003FC000000000FFFFFFFFC000000000FFFFFFFFC000000001FFFFFFFFE00 00000018000003FE0000000030000001FE0000000030000001FE0000000060000001FE00 00000060000001FE00000000C0000001FF00000000C0000000FF0000000180000000FF00 00000180000000FF0000000300000000FF0000000300000000FF8000000600000000FF80 000006000000007F8000000C000000007F8000001C000000007F8000001C000000007F80 00003C000000007FC000007C000000007FC00001FE000000007FC00007FF80000001FFF0 007FFFE000007FFFFFC0FFFFE000007FFFFFC0FFFFE000007FFFFFC042477DC649>65 D<001FFFFFFFFFE00000001FFFFFFFFFFC0000001FFFFFFFFFFF800000003FF800007FC0 0000001FF000001FF00000001FF000000FF80000001FE0000007FC0000001FE0000003FC 0000001FE0000001FE0000001FE0000001FF0000001FE0000000FF0000003FE0000000FF 0000003FC0000000FF0000003FC0000000FF8000003FC0000000FF8000003FC0000000FF 8000003FC0000000FF8000007FC0000000FF0000007F80000000FF0000007F80000001FF 0000007F80000001FE0000007F80000003FE0000007F80000003FC000000FF80000007FC 000000FF0000000FF8000000FF0000000FF0000000FF0000001FE0000000FF0000007FC0 000000FF000000FF00000001FF000003FE00000001FE00000FF800000001FE0000FFE000 000001FFFFFFFF8000000001FFFFFFFFF000000001FE000003FC00000003FE000000FF00 000003FC0000007F80000003FC0000003FC0000003FC0000001FE0000003FC0000000FF0 000003FC0000000FF0000007FC00000007F8000007F800000007F8000007F800000007FC 000007F800000007FC000007F800000007FC000007F800000003FC00000FF800000003FC 00000FF000000007FC00000FF000000007FC00000FF000000007FC00000FF000000007FC 00000FF000000007F800001FF00000000FF800001FE00000000FF000001FE00000001FF0 00001FE00000003FE000001FE00000003FE000001FE00000007FC000003FE0000000FF80 00003FC0000001FF0000003FC0000003FE0000003FC000000FFC0000007FC000003FF000 0000FFC00001FFE00000FFFFFFFFFFFF800000FFFFFFFFFFFC000000FFFFFFFFFFC00000 0041447CC345>I<000000001FF80001C000000001FFFF0001C00000000FFFFFC0038000 00003FF003F00780000001FF8000780F80000003FC00003C0F8000000FF000000E1F8000 001FC00000073F8000007F80000003FF000000FF00000003FF000001FE00000001FF0000 03FC00000000FF000007F800000000FF00000FF0000000007F00001FE0000000007E0000 3FC0000000003E00007F80000000003E0000FF80000000003E0000FF00000000001E0001 FE00000000001E0003FE00000000001C0003FC00000000001C0007FC00000000001C0007 F800000000001C000FF800000000001C000FF800000000001C001FF0000000000018001F F0000000000018003FF0000000000000003FE0000000000000003FE0000000000000003F E0000000000000007FC0000000000000007FC0000000000000007FC0000000000000007F C0000000000000007FC000000000000000FFC000000000000000FF8000000000000000FF 8000000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF 8000000000000000FF8000000000000000FF800000000000C000FF800000000000C000FF 800000000000C0007F800000000001C0007F80000000000180007F80000000000180007F C0000000000380003FC0000000000300003FC0000000000700003FC0000000000600001F E0000000000E00001FE0000000000C00000FE0000000001C00000FF00000000038000007 F80000000070000003F800000000F0000003FC00000001E0000001FE00000003C0000000 FF00000007800000007F8000000F000000003FC000003C000000000FF000007800000000 07FC0003F00000000001FF801FC000000000007FFFFF0000000000001FFFF80000000000 0001FFC000000000424876C546>I<001FFFFFFFFFE00000001FFFFFFFFFFE0000003FFF FFFFFFFF800000003FF80000FFE00000001FF000001FF00000001FF0000007FC0000001F E0000001FE0000001FE0000000FF0000001FE00000007F8000001FE00000003F8000001F E00000001FC000003FE00000000FE000003FC00000000FE000003FC000000007F000003F C000000007F000003FC000000007F800003FC000000003F800007FC000000003F800007F 8000000003FC00007F8000000003FC00007F8000000001FC00007F8000000001FE00007F 8000000001FE0000FF8000000001FE0000FF0000000001FE0000FF0000000001FE0000FF 0000000001FE0000FF0000000001FE0000FF0000000001FE0001FF0000000003FE0001FE 0000000003FE0001FE0000000003FE0001FE0000000003FE0001FE0000000003FE0001FE 0000000003FE0003FE0000000003FC0003FC0000000007FC0003FC0000000007FC0003FC 0000000007FC0003FC0000000007F80003FC0000000007F80007FC000000000FF80007F8 000000000FF00007F8000000000FF00007F8000000001FF00007F8000000001FE00007F8 000000001FE0000FF8000000003FC0000FF0000000003FC0000FF0000000007F80000FF0 000000007F00000FF000000000FF00000FF000000000FE00001FF000000001FC00001FE0 00000003F800001FE000000007F000001FE00000000FF000001FE00000001FE000001FE0 0000003FC000003FE00000007F0000003FC0000000FE0000003FC0000003FC0000003FC0 00000FF00000007FC000003FE0000000FFE00003FF800000FFFFFFFFFFFE000000FFFFFF FFFFF0000000FFFFFFFFFF0000000047447CC34B>I<001FFFFFFFFFFFFF001FFFFFFFFF FFFF001FFFFFFFFFFFFF00003FF800000FFF00001FF0000000FF00001FF00000007F0000 1FE00000001F00001FE00000001F00001FE00000000F00001FE00000000700001FE00000 000700003FE00000000700003FC00000000700003FC00000000700003FC0000000030000 3FC00000000300003FC00000000300007FC00000000300007F800000000300007F800006 000300007F800006000300007F800006000300007F80000600000000FF80000C00000000 FF00000C00000000FF00000C00000000FF00001C00000000FF00001C00000000FF00003C 00000001FF0000F800000001FE0003F800000001FFFFFFF800000001FFFFFFF800000001 FFFFFFF800000001FE0007F800000003FE0001F000000003FC0000F000000003FC000070 00000003FC00007000000003FC00007000000003FC00007000000007FC00006000000007 F8000060000C0007F8000060000C0007F8000060000C0007F800006000180007F8000000 0018000FF80000000018000FF00000000030000FF00000000030000FF00000000070000F F00000000060000FF00000000060001FF000000000E0001FE000000000C0001FE0000000 01C0001FE000000003C0001FE00000000380001FE00000000780003FE00000000F80003F C00000001F00003FC00000003F00003FC0000000FF00007FC0000003FE0000FFC000003F FE00FFFFFFFFFFFFFE00FFFFFFFFFFFFFC00FFFFFFFFFFFFFC0040447CC342>I<001FFF FFFFFFFFFE001FFFFFFFFFFFFE001FFFFFFFFFFFFE00003FF800001FFE00001FF0000001 FE00001FF00000007E00001FE00000003E00001FE00000001E00001FE00000001E00001F E00000000E00001FE00000000E00003FE00000000E00003FC00000000E00003FC0000000 0600003FC00000000600003FC00000000600003FC00000000600007FC00000000600007F 800000000600007F800000000600007F80000C000600007F80000C000600007F80000C00 000000FF80001800000000FF00001800000000FF00001800000000FF00003800000000FF 00003800000000FF00007800000001FF00007000000001FE0001F000000001FE0007F000 000001FFFFFFF000000001FFFFFFF000000001FFFFFFF000000003FE000FE000000003FC 0003E000000003FC0001E000000003FC0000E000000003FC0000E000000003FC0000E000 000007FC0000C000000007F80000C000000007F80000C000000007F80000C000000007F8 0000C000000007F80000C00000000FF80000000000000FF00000000000000FF000000000 00000FF00000000000000FF00000000000000FF00000000000001FF00000000000001FE0 0000000000001FE00000000000001FE00000000000001FE00000000000001FE000000000 00003FE00000000000003FC00000000000003FC00000000000003FC00000000000007FC0 000000000000FFF00000000000FFFFFFF800000000FFFFFFF800000000FFFFFFF8000000 003F447CC340>I<000000001FF80001C000000001FFFF0001C00000000FFFFFC0038000 00003FF003F00780000001FF8000780F80000003FC00003C0F8000000FF000000E1F8000 001FC00000073F8000007F80000003FF000000FF00000003FF000001FE00000001FF0000 03FC00000000FF000007F800000000FF00000FF0000000007F00001FE0000000007E0000 3FC0000000003E00007F80000000003E0000FF80000000003E0000FF00000000001E0001 FE00000000001E0003FE00000000001C0003FC00000000001C0007FC00000000001C0007 F800000000001C000FF800000000001C000FF800000000001C001FF0000000000018001F F0000000000018003FF0000000000000003FE0000000000000003FE0000000000000003F E0000000000000007FC0000000000000007FC0000000000000007FC0000000000000007F C0000000000000007FC000000000000000FFC000000000000000FF8000000000000000FF 8000000000000000FF8000000000000000FF8000000000000000FF80000001FFFFFF80FF 80000003FFFFFF80FF80000003FFFFFF80FF8000000000FFE000FF80000000007FC000FF 80000000003FC0007F80000000007FC0007F80000000007FC0007F80000000007F80007F C0000000007F80003FC0000000007F80003FC0000000007F80003FC000000000FF80001F E000000000FF80001FE000000000FF00000FF000000000FF00000FF000000000FF000007 F800000001FF000003F800000001FF000003FC00000003FF000001FE00000003FE000000 FF00000007FE0000007F8000000E7E0000003FC000001C7E0000000FF00000783E000000 07FC0001F01E00000001FF801FC01C000000007FFFFF000C000000001FFFFC0000000000 0001FFC000000000424876C54D>I<001FFFFFFC007FFFFFF0001FFFFFF8007FFFFFE000 1FFFFFF8007FFFFFE000003FFC000000FFF00000001FF00000007FC00000001FF0000000 7FC00000001FE00000007F800000001FE00000007F800000001FE00000007F800000001F E00000007F800000001FE0000000FF800000003FE0000000FF800000003FC0000000FF00 0000003FC0000000FF000000003FC0000000FF000000003FC0000000FF000000003FC000 0001FF000000007FC0000001FF000000007F80000001FE000000007F80000001FE000000 007F80000001FE000000007F80000001FE000000007F80000003FE00000000FF80000003 FE00000000FF00000003FC00000000FF00000003FC00000000FF00000003FC00000000FF 00000003FC00000000FF00000007FC00000001FF00000007FC00000001FE00000007F800 000001FFFFFFFFFFF800000001FFFFFFFFFFF800000001FFFFFFFFFFF800000001FE0000 000FF800000003FE0000000FF800000003FC0000000FF000000003FC0000000FF0000000 03FC0000000FF000000003FC0000000FF000000003FC0000001FF000000007FC0000001F F000000007F80000001FE000000007F80000001FE000000007F80000001FE000000007F8 0000001FE000000007F80000003FE00000000FF80000003FE00000000FF00000003FC000 00000FF00000003FC00000000FF00000003FC00000000FF00000003FC00000000FF00000 007FC00000001FF00000007FC00000001FE00000007F800000001FE00000007F80000000 1FE00000007F800000001FE00000007F800000001FE0000000FF800000003FE0000000FF 800000003FC0000000FF000000003FC0000000FF000000003FC0000000FF000000007FC0 000001FF00000000FFE0000003FF800000FFFFFFE003FFFFFF8000FFFFFFE003FFFFFF80 00FFFFFFC003FFFFFF00004C447CC349>I<001FFFFFFE001FFFFFFE001FFFFFFE00001F FE0000000FF80000000FF80000000FF00000000FF00000000FF00000000FF00000000FF0 0000001FF00000001FE00000001FE00000001FE00000001FE00000001FE00000003FE000 00003FC00000003FC00000003FC00000003FC00000003FC00000007FC00000007F800000 007F800000007F800000007F800000007F80000000FF80000000FF00000000FF00000000 FF00000000FF00000000FF00000001FF00000001FE00000001FE00000001FE00000001FE 00000001FE00000003FE00000003FC00000003FC00000003FC00000003FC00000003FC00 000007FC00000007F800000007F800000007F800000007F800000007F80000000FF80000 000FF00000000FF00000000FF00000000FF00000000FF00000001FF00000001FE0000000 1FE00000001FE00000003FE00000007FF000007FFFFFF000FFFFFFF000FFFFFFF0002744 7DC323>I<000007FFFFFF000007FFFFFF000007FFFFFF00000003FFC000000000FF8000 000000FF8000000000FF0000000000FF0000000000FF0000000000FF0000000001FF0000 000001FF0000000001FE0000000001FE0000000001FE0000000001FE0000000003FE0000 000003FE0000000003FC0000000003FC0000000003FC0000000003FC0000000007FC0000 000007FC0000000007F80000000007F80000000007F80000000007F8000000000FF80000 00000FF8000000000FF0000000000FF0000000000FF0000000000FF0000000001FF00000 00001FF0000000001FE0000000001FE0000000001FE0000000001FE0000000003FE00000 00003FE0000000003FC0000000003FC0000000003FC0000000003FC0000000007FC00000 00007FC0000000007F80000000007F80000000007F80000000007F80001F0000FF80007F 8000FF8000FFC000FF0000FFC000FF0000FFC000FF0000FFC001FE0000FF8001FE0000FF 8003FC0000FF0003FC0000D80007F80000E00007F0000060000FE0000070001FC0000038 003F8000001C007F0000000F81FC00000003FFF0000000007F80000000304679C332>I< 001FFFFFFC00003FFFF8001FFFFFFC00003FFFF8003FFFFFF800003FFFF800003FFC0000 000FFF0000001FF000000007F80000001FF000000007E00000001FE000000007C0000000 1FE00000000F000000001FE00000001E000000001FE000000038000000001FE000000070 000000003FE0000000E0000000003FC0000001C0000000003FC000000380000000003FC0 00000E00000000003FC000001C00000000003FC000003800000000007FC0000070000000 00007F800000E000000000007F8000038000000000007F8000070000000000007F80000E 0000000000007F80001C000000000000FF800038000000000000FF0000E0000000000000 FF0001C0000000000000FF000380000000000000FF0007C0000000000000FF000FC00000 00000001FF003FE0000000000001FE007FE0000000000001FE00FFF0000000000001FE01 DFF0000000000001FE038FF8000000000001FE0E0FF8000000000003FE1C07FC00000000 0003FC3807FC000000000003FC7003FE000000000003FDE003FE000000000003FF8001FF 000000000003FF0001FF000000000007FE0000FF800000000007FC0000FF800000000007 F800007FC00000000007F800007FC00000000007F800003FE00000000007F800003FE000 0000000FF800001FF0000000000FF000001FF0000000000FF000000FF8000000000FF000 000FF8000000000FF0000007FC000000000FF0000007FC000000001FF0000003FE000000 001FE0000003FE000000001FE0000001FF000000001FE0000001FF000000001FE0000000 FF800000001FE0000000FF800000003FE00000007FC00000003FC00000007FC00000003F C00000007FE00000003FC00000007FF00000007FC00000007FF0000000FFE0000001FFFC 0000FFFFFFE0000FFFFFE000FFFFFFE0001FFFFFE000FFFFFFE0001FFFFFE0004D447CC3 4C>I<001FFFFFFF0000001FFFFFFF0000001FFFFFFF000000003FFC00000000001FF000 000000001FF000000000001FE000000000001FE000000000001FE000000000001FE00000 0000001FE000000000003FE000000000003FC000000000003FC000000000003FC0000000 00003FC000000000003FC000000000007FC000000000007F8000000000007F8000000000 007F8000000000007F8000000000007F800000000000FF800000000000FF000000000000 FF000000000000FF000000000000FF000000000000FF000000000001FF000000000001FE 000000000001FE000000000001FE000000000001FE000000000001FE000000000003FE00 0000000003FC000000000003FC000000000003FC000000000003FC000000000003FC0000 00000007FC000000000007F8000000030007F8000000030007F8000000030007F8000000 060007F800000006000FF800000006000FF00000000E000FF00000000C000FF00000000C 000FF00000001C000FF000000018001FF000000038001FE000000038001FE00000007800 1FE000000070001FE0000000F0001FE0000001F0003FE0000003E0003FC0000007E0003F C000000FE0003FC000003FE0007FC00000FFC000FFC0000FFFC0FFFFFFFFFFFFC0FFFFFF FFFFFF80FFFFFFFFFFFF8038447CC33D>I<001FFFF00000000000FFFFC0001FFFF80000 000000FFFF80001FFFF80000000001FFFF8000003FF800000000037FC00000001FF80000 000003FF000000001FF80000000006FF0000000019FC0000000006FE0000000019FC0000 00000CFE0000000019FC000000000CFE0000000019FC0000000018FE0000000018FE0000 000019FE0000000038FE0000000031FE0000000030FE0000000031FC0000000030FE0000 000061FC0000000030FE00000000C1FC00000000307F00000000C1FC00000000307F0000 000183FC00000000707F0000000183FC00000000607F0000000303F800000000607F0000 000303F800000000603F8000000603F800000000603F8000000603F800000000603F8000 000C07F800000000E03F8000000C07F800000000C03F8000001807F000000000C01FC000 001807F000000000C01FC000003007F000000000C01FC000006007F000000000C01FC000 00600FF000000001C01FC00000C00FF000000001800FE00000C00FE000000001800FE000 01800FE000000001800FE00001800FE000000001800FE00003000FE0000000018007F000 03001FE0000000038007F00006001FE0000000030007F00006001FC0000000030007F000 0C001FC0000000030007F00018001FC0000000030003F80018001FC0000000030003F800 30003FC0000000070003F80030003FC0000000060003F80060003F80000000060003F800 60003F80000000060001FC00C0003F80000000060001FC00C0003F80000000060001FC01 80007F800000000E0001FC0180007F800000000C0001FC0300007F000000000C0000FE03 00007F000000000C0000FE0600007F000000000C0000FE0C00007F000000000C0000FE0C 0000FF000000001C0000FE180000FF000000001800007F180000FE000000001800007F30 0000FE000000001800007F300000FE000000001800007F600000FE000000001800003FE0 0001FE000000003800003FC00001FE000000003800003FC00001FC000000007800003F80 0001FC000000007800003F000001FC00000001FC00001F000003FC00000007FF00001E00 0007FE000000FFFFF8001E0007FFFFFE0000FFFFF8001C0007FFFFFE0000FFFFF0000C00 07FFFFFC00005A447BC359>I<001FFFF8000001FFFFF0001FFFF8000001FFFFE0001FFF FC000001FFFFE000001FFC0000001FFC0000000FFE00000007F00000001FFE00000003E0 00000019FF00000001C000000019FF000000018000000018FF800000018000000018FF80 00000180000000187FC000000380000000387FC000000380000000303FE0000003000000 00303FE000000300000000301FF000000300000000301FF000000300000000300FF80000 0700000000700FF8000007000000006007FC000006000000006007FC0000060000000060 03FE000006000000006003FE000006000000006001FF00000E00000000E001FF00000E00 000000C000FF80000C00000000C000FF80000C00000000C0007FC0000C00000000C0007F C0000C00000000C0003FE0001C00000001C0003FE0001C0000000180001FF00018000000 0180001FF000180000000180000FF800180000000180000FF8001800000001800007FC00 3800000003800007FC003800000003000003FE003000000003000003FE00300000000300 0001FF003000000003000001FF003000000003000000FF807000000007000000FF807000 0000060000007FC060000000060000007FC060000000060000003FE06000000006000000 3FE060000000060000001FF0E00000000E0000001FF0E00000000C0000000FF8C0000000 0C0000000FF8C00000000C00000007FCC00000000C00000007FCC00000000C00000003FF C00000001C00000003FFC00000001800000001FF800000001800000001FF800000001800 000000FF800000001800000000FF8000000018000000007F8000000038000000007F8000 000038000000003F0000000078000000003F0000000078000000001F00000001FC000000 001F00000007FF000000000F000000FFFFF80000000F000000FFFFF800000006000000FF FFF0000000060000004C447CC349>I<000000003FF000000000000003FFFF0000000000 001FC01FE000000000007E0003F00000000001F80000FC0000000007E000007E00000000 0FC000003F800000003F0000000FC00000007E0000000FE0000000FC00000007F0000001 F800000003F0000007F000000003F8000007E000000001FC00000FC000000001FC00001F C000000000FE00003F8000000000FE00007F0000000000FF0000FF00000000007F0000FE 00000000007F0001FE00000000007F8003FC00000000007F8003FC00000000007F8007F8 00000000003FC007F800000000003FC00FF800000000003FC00FF000000000003FC01FF0 00000000003FC01FF000000000003FC01FE000000000003FC03FE000000000003FC03FE0 00000000007FC03FC000000000007FC07FC000000000007FC07FC000000000007FC07FC0 00000000007FC07FC000000000007FC07FC000000000007FC0FF800000000000FF80FF80 0000000000FF80FF800000000000FF80FF800000000000FF80FF800000000001FF00FF80 0000000001FF00FF800000000001FF00FF800000000001FE00FF800000000003FE00FF80 0000000003FE00FF800000000007FC007F800000000007FC007F800000000007F8007F80 000000000FF8007F80000000000FF0007FC0000000001FE0003FC0000000001FE0003FC0 000000003FC0001FC0000000007F80001FE0000000007F80001FE000000000FF00000FE0 00000001FE000007F000000001FC000007F000000003F8000003F800000007F0000001FC 0000000FE0000000FC0000001FC00000007E0000003F000000003F000000FE000000001F 800001F8000000000FE00007F00000000003F8001FC00000000000FE00FE000000000000 3FFFF800000000000003FF8000000000424876C54C>I<001FFFFFFFFFC000001FFFFFFF FFF800001FFFFFFFFFFF0000003FF80001FF8000001FF000003FE000001FF000000FF000 001FE0000007F800001FE0000003FC00001FE0000003FC00001FE0000001FE00001FE000 0001FE00003FE0000001FF00003FC0000000FF00003FC0000000FF00003FC0000000FF00 003FC0000000FF00003FC0000000FF00007FC0000001FF00007F80000001FF00007F8000 0001FF00007F80000001FF00007F80000001FE00007F80000003FE0000FF80000003FE00 00FF00000003FC0000FF00000007F80000FF00000007F80000FF0000000FF00000FF0000 001FE00001FF0000003FC00001FE0000007F000001FE000001FE000001FE000007F80000 01FE00003FE0000001FFFFFFFF80000003FFFFFFFC00000003FC00000000000003FC0000 0000000003FC00000000000003FC00000000000003FC00000000000007FC000000000000 07F800000000000007F800000000000007F800000000000007F800000000000007F80000 000000000FF80000000000000FF00000000000000FF00000000000000FF0000000000000 0FF00000000000000FF00000000000001FF00000000000001FE00000000000001FE00000 000000001FE00000000000001FE00000000000001FE00000000000003FE0000000000000 3FC00000000000003FC00000000000003FC00000000000007FC0000000000000FFE00000 000000FFFFFFE000000000FFFFFFE000000000FFFFFFC00000000040447CC342>I<001F FFFFFFFE000000001FFFFFFFFFE00000001FFFFFFFFFF8000000003FF80007FE00000000 1FF00000FF800000001FF000003FC00000001FE000001FE00000001FE000000FF0000000 1FE0000007F80000001FE0000003FC0000001FE0000003FC0000003FE0000003FE000000 3FC0000001FE0000003FC0000001FE0000003FC0000001FE0000003FC0000001FE000000 3FC0000001FE0000007FC0000003FE0000007F80000003FE0000007F80000003FE000000 7F80000003FE0000007F80000007FC0000007F80000007FC000000FF80000007F8000000 FF0000000FF0000000FF0000000FE0000000FF0000001FC0000000FF0000003F80000000 FF0000007F00000001FF000001FE00000001FE000003F800000001FE00001FE000000001 FE0000FF8000000001FFFFFFFC0000000001FFFFFFF00000000003FE0001FC0000000003 FC00007F0000000003FC00003F8000000003FC00001FC000000003FC00000FE000000003 FC00000FF000000007FC000007F800000007F8000007F800000007F8000007F800000007 F8000003F800000007F8000003F800000007F8000007F80000000FF8000007F80000000F F0000007F80000000FF0000007F80000000FF0000007F80000000FF0000007F80000000F F0000007F80000001FF000000FF80000001FE000000FF80000001FE000000FF80000001F E000000FF80000001FE000000FF80000001FE000000FF80038003FE000000FF80030003F C000000FF80030003FC000000FF80030003FC000000FF80070007FC0000007F8006000FF E0000007F800E0FFFFFFE00003FC01C0FFFFFFE00001FC0380FFFFFFC00000FE0F000000 000000003FFE0000000000000007F00045467CC348>82 D<0000003FE00070000001FFFC 0070000007FFFF00E000001FC01FC1E000007F0003E1E00000FC0000F3E00001F800007F E00003F000003FE00007E000001FC0000FC000001FC0000F8000000FC0001F8000000FC0 001F00000007C0003F00000007C0003E0000000780007E0000000780007E000000038000 7E0000000380007E000000038000FE000000038000FE000000030000FE000000030000FF 000000030000FF000000030000FF8000000000007F8000000000007FC000000000007FF0 00000000007FFC00000000003FFF80000000003FFFF8000000001FFFFF800000000FFFFF F000000007FFFFFC00000003FFFFFF00000000FFFFFF800000003FFFFFC000000007FFFF E0000000007FFFF0000000000FFFF00000000000FFF800000000001FF800000000000FFC 000000000007FC000000000003FC000000000003FC000000000001FC000000000001FC00 0C00000001FC001C00000000FC001800000000FC001800000000FC001800000000FC0018 00000000FC001800000001FC003800000001F8003800000001F8003C00000001F0003C00 000003F0003C00000003F0003E00000007E0007E00000007C0007F0000000FC0007F8000 001F80007FC000003F00007DE000007E000078F00000FC0000F87E0003F80000F01FC00F E00000E00FFFFF800000E001FFFE000000C0003FF000000034487BC536>I<07FFFFFFFF FFFFFF07FFFFFFFFFFFFFF07FFFFFFFFFFFFFF0FFE0003FF0003FF0FE00003FE00007F0F C00003FE00003F0F000003FC00001F1E000003FC00000F1E000003FC00000F1C000003FC 00000718000003FC00000738000007FC00000638000007F800000630000007F800000630 000007F800000660000007F800000660000007F80000066000000FF80000066000000FF0 000006C000000FF0000006C000000FF0000006C000000FF00000060000000FF000000000 00001FF00000000000001FE00000000000001FE00000000000001FE00000000000001FE0 0000000000001FE00000000000003FE00000000000003FC00000000000003FC000000000 00003FC00000000000003FC00000000000003FC00000000000007FC00000000000007F80 0000000000007F800000000000007F800000000000007F800000000000007F8000000000 0000FF80000000000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FF00000000000001FF00000000000001FE00000000000001FE0000000000 0001FE00000000000001FE00000000000001FE00000000000003FE00000000000003FC00 000000000003FC00000000000003FC00000000000003FC00000000000003FC0000000000 0007FC00000000000007F800000000000007F800000000000007F80000000000000FF800 00000000003FFE0000000001FFFFFFFFC0000001FFFFFFFF80000001FFFFFFFF80000040 4475C346>IIII<0007FFFFFC0003FFFFE00007FFFFFC0003FFFFE0000FFFFFFC0007FFFFE000001F FFC00000FFFC00000007FF0000007FC000000003FF0000003F0000000003FE0000003E00 00000001FF0000003C0000000001FF000000380000000000FF800000700000000000FF80 0000E000000000007FC00001C000000000007FC000018000000000003FE0000300000000 00003FE000060000000000001FF0000C0000000000001FF0001C0000000000000FF80038 0000000000000FF8003000000000000007FC006000000000000007FC00C0000000000000 03FE018000000000000003FE038000000000000001FF070000000000000001FF0E000000 0000000000FF8C0000000000000000FF9800000000000000007FF000000000000000007F E000000000000000003FE000000000000000003FE000000000000000001FF00000000000 0000001FF000000000000000000FF800000000000000000FF800000000000000001FFC00 000000000000003FFC000000000000000073FE000000000000000063FE00000000000000 00C1FF000000000000000181FF000000000000000380FF800000000000000700FF800000 000000000E007FC00000000000000C007FC000000000000018007FE00000000000003000 3FE000000000000060003FF0000000000000E0001FF0000000000001C0001FF000000000 000180000FF800000000000300000FF8000000000006000007FC00000000000C000007FC 00000000001C000003FE000000000038000003FE000000000070000001FF000000000060 000001FF0000000000C0000000FF8000000001C0000000FF8000000003800000007FC000 00000F800000007FE00000001F800000007FE00000007FC0000000FFF0000003FFE00000 03FFFC00007FFFFC00001FFFFFF000FFFFFC00001FFFFFF000FFFFFC00001FFFFFF0004B 447EC349>II E /FH 47 122 df<00000000007FFF8000000000000000 1FFFFFF000000000000001FFFFFFFC0000000000000FFFFFFFFE0000000000007FFFFFFF FF800000000001FFFFE007FFC00000000003FFFE00007FE0000000000FFFF000001FF000 0000001FFFC000007FF0000000003FFF000000FFF8000000007FFE000001FFF800000000 FFFC000003FFFC00000001FFF8000007FFFC00000003FFF0000007FFFC00000003FFF000 0007FFFC00000007FFE0000007FFFC00000007FFE000000FFFFE0000000FFFE0000007FF FC0000000FFFC0000007FFFC0000000FFFC0000007FFFC0000000FFFC0000007FFFC0000 000FFFC0000003FFF80000000FFFC0000001FFF00000000FFFC0000000FFE00000000FFF C00000007FC00000000FFFC000000000000000000FFFC000000000000000000FFFC00000 0000000000000FFFC000000000000000000FFFC000000000000000000FFFC00000000000 0000000FFFC000000000000000000FFFC000000000000000000FFFC00000000000000000 0FFFC000000000000000000FFFC000000000000000000FFFC00003FFFFFE0000FFFFFFFF FFFFFFFFFE0000FFFFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFF FFFE0000FFFFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFFFFE0000000FFFE0000001FFFE00 00000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000F FFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE000 0000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FF FE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000 000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFF E0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE00000 00FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE 0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE000000 0FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0 000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000 FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE00 00000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000F FFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE000 0000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FF FE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000000FFFE0000 000FFFE0000000FFFE0000000FFFE0000000FFFE00003FFFFFFFF803FFFFFFFF803FFFFF FFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803FFFFFFFF803 FFFFFFFF803FFFFFFFF803FFFFFFFF8051657DE45A>12 D<00000000F000000000000001 F800000000000007F80000000000001FF80000000000003FF8000000000001FFF8000000 000007FFF800000000007FFFF8000000000FFFFFF8000000FFFFFFFFF8000000FFFFFFFF F8000000FFFFFFFFF8000000FFFFFFFFF8000000FFFF87FFF8000000FFF007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FF F8000000000007FFF8000000000007FFF8000000000007FFF8000000000007FFF8000000 000007FFF80000007FFFFFFFFFFFFF807FFFFFFFFFFFFF807FFFFFFFFFFFFF807FFFFFFF FFFFFF807FFFFFFFFFFFFF807FFFFFFFFFFFFF80395E74DD51>49 D<000001FFF800000000001FFFFFC000000000FFFFFFF800000003FFFFFFFF0000000FFF FFFFFFC000003FFFFFFFFFE000007FFC01FFFFF80000FFE0003FFFFC0001FF00000FFFFE 0003FE000007FFFF0007F8000003FFFF800FF0000001FFFFC01FE0000000FFFFE03FC000 00007FFFF03FFC0000007FFFF87FFE0000003FFFF87FFF0000003FFFFC7FFF8000001FFF FCFFFFC000001FFFFEFFFFC000000FFFFEFFFFE000000FFFFEFFFFE000000FFFFEFFFFE0 00000FFFFFFFFFE000000FFFFFFFFFE0000007FFFFFFFFE0000007FFFFFFFFE0000007FF FF7FFFC0000007FFFF7FFFC0000007FFFF3FFF80000007FFFF1FFF00000007FFFF07FC00 00000FFFFF01F00000000FFFFF00000000000FFFFE00000000000FFFFE00000000000FFF FE00000000001FFFFC00000000001FFFFC00000000001FFFF800000000003FFFF8000000 00003FFFF000000000007FFFE000000000007FFFE00000000000FFFFC00000000000FFFF 800000000001FFFF000000000003FFFE000000000003FFFC000000000007FFF800000000 000FFFF000000000000FFFE000000000001FFF8000000000003FFF0000000000007FFE00 0000000000FFFC000000000001FFF0000000000001FFE0000000000003FF800000000000 07FF0000000000000FFE0000000000001FF80000000000003FF00000000000007FE00000 00000000FFC000003F000001FF8000003F000003FE0000003F000007FC0000003F00000F F80000007E00001FF00000007E00003FE00000007E00007F800000007E00007F00000000 7E0000FE00000000FE0001FC00000000FE0003F800000000FE0007F000000001FC000FC0 00000007FC001FFFFFFFFFFFFC003FFFFFFFFFFFFC007FFFFFFFFFFFFC00FFFFFFFFFFFF FC01FFFFFFFFFFFFFC03FFFFFFFFFFFFF807FFFFFFFFFFFFF80FFFFFFFFFFFFFF81FFFFF FFFFFFFFF83FFFFFFFFFFFFFF87FFFFFFFFFFFFFF8FFFFFFFFFFFFFFF8FFFFFFFFFFFFFF F8FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF0405E78 DD51>I<000000FFFF0000000000000FFFFFF800000000003FFFFFFF0000000001FFFFFF FFC000000003FFFFFFFFF00000000FFFC01FFFFC0000001FFC0007FFFE0000003FE00001 FFFF0000007FC00000FFFF800000FF0000007FFFC00001FE0000007FFFE00003FF000000 3FFFF00003FFC000003FFFF00007FFE000003FFFF80007FFF000001FFFF80007FFF80000 1FFFFC000FFFFC00001FFFFC000FFFFC00001FFFFC000FFFFC00001FFFFC000FFFFC0000 1FFFFC000FFFFE00001FFFFC000FFFFC00001FFFFC000FFFFC00001FFFFC000FFFFC0000 1FFFFC0007FFFC00003FFFFC0007FFF800003FFFF80003FFF000003FFFF80001FFE00000 3FFFF80000FFC000003FFFF000001F0000007FFFF00000000000007FFFE0000000000000 7FFFE0000000000000FFFFC0000000000000FFFF80000000000001FFFF00000000000001 FFFE00000000000003FFFC00000000000007FFF80000000000000FFFF00000000000001F FFE00000000000007FFF8000000000000FFFFE00000000000FFFFFF800000000000FFFFF E000000000000FFFFF0000000000000FFFFFF800000000000FFFFFFF000000000000003F FFE000000000000007FFF800000000000001FFFE00000000000000FFFF00000000000000 7FFF800000000000003FFFE00000000000003FFFF00000000000001FFFF8000000000000 1FFFF80000000000000FFFFC0000000000000FFFFE0000000000000FFFFE000000000000 0FFFFF00000000000007FFFF00000000000007FFFF80000000000007FFFF800000000000 07FFFF80000000000007FFFFC003FC00000007FFFFC00FFF00000007FFFFC01FFF800000 07FFFFC03FFFC0000007FFFFC07FFFE0000007FFFFC07FFFE0000007FFFFC0FFFFF00000 07FFFFC0FFFFF0000007FFFFC0FFFFF0000007FFFFC0FFFFF0000007FFFF80FFFFF00000 07FFFF80FFFFF0000007FFFF80FFFFF000000FFFFF00FFFFE000000FFFFF007FFFE00000 0FFFFF007FFFC000000FFFFE007FFFC000001FFFFE003FFF8000001FFFFC003FFE000000 3FFFF8001FF80000003FFFF0000FF80000007FFFF00007FE000000FFFFE00003FF800001 FFFF800001FFF00007FFFF000000FFFF803FFFFE0000007FFFFFFFFFFC0000001FFFFFFF FFF000000007FFFFFFFFC000000001FFFFFFFE00000000001FFFFFF0000000000001FFFE 00000000426079DD51>I<0000000000001F80000000000000003FC0000000000000007F C000000000000000FFC000000000000000FFC000000000000001FFC000000000000003FF C000000000000007FFC00000000000000FFFC00000000000000FFFC00000000000001FFF C00000000000003FFFC00000000000007FFFC00000000000007FFFC0000000000000FFFF C0000000000001FFFFC0000000000003FFFFC0000000000007FFFFC0000000000007FFFF C000000000000FFFFFC000000000001FFFFFC000000000003FBFFFC000000000007F3FFF C000000000007F3FFFC00000000000FE3FFFC00000000001FC3FFFC00000000003F83FFF C00000000007F03FFFC00000000007F03FFFC0000000000FE03FFFC0000000001FC03FFF C0000000003F803FFFC0000000003F003FFFC0000000007F003FFFC000000000FE003FFF C000000001FC003FFFC000000003F8003FFFC000000003F8003FFFC000000007F0003FFF C00000000FE0003FFFC00000001FC0003FFFC00000003F80003FFFC00000003F80003FFF C00000007F00003FFFC0000000FE00003FFFC0000001FC00003FFFC0000001F800003FFF C0000003F800003FFFC0000007F000003FFFC000000FE000003FFFC000001FC000003FFF C000001F8000003FFFC000003F8000003FFFC000007F0000003FFFC00000FE0000003FFF C00001FC0000003FFFC00001FC0000003FFFC00003F80000003FFFC00007F00000003FFF C0000FE00000003FFFC0000FC00000003FFFC0001FC00000003FFFC0003F800000003FFF C0007F000000003FFFC000FE000000003FFFC000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF00000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF C00000000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF C00000000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF C00000000000007FFFC00000000000007FFFC00000000000007FFFC00000000000007FFF C00000000000007FFFC0000000007FFFFFFFFFFF0000007FFFFFFFFFFF0000007FFFFFFF FFFF0000007FFFFFFFFFFF0000007FFFFFFFFFFF0000007FFFFFFFFFFF485E7CDD51>I< 00C00000000001C001F8000000000FC001FF000000007FC001FFF0000007FFC001FFFF80 00FFFFC001FFFFFFFFFFFF8001FFFFFFFFFFFF0001FFFFFFFFFFFE0001FFFFFFFFFFFC00 01FFFFFFFFFFF80001FFFFFFFFFFF00001FFFFFFFFFFE00001FFFFFFFFFFC00001FFFFFF FFFF800001FFFFFFFFFF000001FFFFFFFFFC000001FFFFFFFFF8000001FFFFFFFFE00000 01FFFFFFFF80000001FFFFFFFC00000001FFFFFFE000000001FC3FFC0000000001FC0000 0000000001FC00000000000001FC00000000000001FC00000000000001FC000000000000 01FC00000000000001FC00000000000001FC00000000000001FC00000000000001FC0000 0000000001FC00000000000001FC00000000000001FC00000000000001FC003FFE000000 01FC03FFFFF0000001FC0FFFFFFE000001FC3FFFFFFF800001FCFFFFFFFFE00001FDFFE0 0FFFF00001FFFE0003FFF80001FFF80000FFFC0001FFE000007FFF0001FF8000003FFF80 01FF0000003FFF8001FE0000001FFFC001FC0000001FFFE001FC0000000FFFF000F00000 000FFFF000000000000FFFF800000000000FFFF800000000000FFFFC000000000007FFFC 000000000007FFFC000000000007FFFE000000000007FFFE000000000007FFFE00000000 0007FFFE000000000007FFFF000000000007FFFF000000000007FFFF03F000000007FFFF 0FFC00000007FFFF1FFE00000007FFFF3FFF00000007FFFF7FFF80000007FFFF7FFF8000 0007FFFFFFFFC0000007FFFFFFFFC0000007FFFFFFFFC0000007FFFFFFFFC0000007FFFE FFFFC0000007FFFEFFFFC0000007FFFEFFFF80000007FFFEFFFF8000000FFFFC7FFF0000 000FFFFC7FFE0000000FFFFC7FFC0000000FFFF83FF00000000FFFF83F800000001FFFF0 3FC00000001FFFE01FC00000003FFFE00FE00000003FFFC00FF00000007FFF8007FC0000 00FFFF0003FE000001FFFE0001FF800007FFFC0000FFE0001FFFF800007FFE00FFFFF000 003FFFFFFFFFC000000FFFFFFFFF00000007FFFFFFFC00000001FFFFFFF0000000003FFF FF800000000003FFF0000000406078DD51>I<000000001FFF00000000000003FFFFE000 000000001FFFFFF80000000000FFFFFFFE0000000003FFFFFFFF0000000007FFFC03FF80 0000001FFFC0007FC00000003FFF00001FE0000000FFFC00000FF0000001FFF8000007F0 000003FFF000007FF8000007FFE00000FFF800000FFFC00001FFF800001FFF800003FFFC 00003FFF000003FFFC00007FFF000007FFFC00007FFE000007FFFC0000FFFE000007FFFC 0001FFFC000007FFFC0001FFFC000007FFFC0003FFFC000007FFFC0003FFF8000003FFF8 0007FFF8000003FFF80007FFF8000001FFF0000FFFF0000000FFE0000FFFF00000007FC0 001FFFF00000000000001FFFF00000000000001FFFF00000000000003FFFF00000000000 003FFFF00000000000003FFFF00000000000003FFFE00000000000007FFFE001FFE00000 007FFFE00FFFFE0000007FFFE03FFFFF8000007FFFE07FFFFFE000007FFFE0FFFFFFF800 007FFFE1FE03FFFC0000FFFFE3F0007FFE0000FFFFE7E0003FFF0000FFFFEFC0001FFF80 00FFFFEF80000FFFC000FFFFFF000007FFE000FFFFFE000007FFF000FFFFFE000003FFF8 00FFFFFC000003FFFC00FFFFFC000003FFFC00FFFFF8000003FFFE00FFFFF8000001FFFE 00FFFFF8000001FFFF00FFFFF8000001FFFF00FFFFF0000001FFFF80FFFFF0000001FFFF 80FFFFF0000001FFFF80FFFFF0000001FFFF80FFFFF0000001FFFF80FFFFE0000001FFFF C0FFFFE0000001FFFFC0FFFFE0000001FFFFC07FFFE0000001FFFFC07FFFE0000001FFFF C07FFFE0000001FFFFC07FFFE0000001FFFFC07FFFE0000001FFFFC07FFFE0000001FFFF C07FFFE0000001FFFFC03FFFE0000001FFFFC03FFFE0000001FFFFC03FFFE0000001FFFF C03FFFE0000001FFFFC01FFFE0000001FFFFC01FFFF0000001FFFF801FFFF0000001FFFF 800FFFF0000001FFFF800FFFF0000001FFFF800FFFF0000001FFFF0007FFF0000001FFFF 0007FFF0000003FFFE0003FFF0000003FFFE0003FFF8000003FFFC0001FFF8000003FFFC 0001FFFC000003FFF80000FFFC000007FFF000007FFE000007FFF000003FFE00000FFFE0 00001FFF00001FFFC000000FFFC0003FFF80000007FFE000FFFF00000003FFFC07FFFC00 000001FFFFFFFFF800000000FFFFFFFFF0000000003FFFFFFFC0000000000FFFFFFF0000 00000001FFFFF80000000000001FFF80000000426079DD51>I<07E0000000000000000F E0000000000000000FF0000000000000000FFC000000000000000FFFFC0000000000000F FFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF81F FFFFFFFFFFFFFFF81FFFFFFFFFFFFFFFF81FFFFFFFFFFFFFFFF01FFFFFFFFFFFFFFFE01F FFFFFFFFFFFFFFC01FFFFFFFFFFFFFFF801FFFFFFFFFFFFFFF001FFFFFFFFFFFFFFF003F FFFFFFFFFFFFFE003FFFFFFFFFFFFFFC003FFFFFFFFFFFFFF8003FFFFFFFFFFFFFF0003F FFFFFFFFFFFFE0003FE0000000003FE0003F80000000007FC0007F0000000000FF80007F 0000000001FF00007F0000000001FE00007E0000000003FC00007E0000000007FC00007E 000000000FF800007E000000001FF000007E000000003FE00000FC000000003FC00000FC 000000007F800000FC00000000FF800000FC00000001FF0000000000000003FE00000000 00000003FC0000000000000007F8000000000000000FF8000000000000001FF000000000 0000001FE0000000000000003FE0000000000000007FC000000000000000FFC000000000 000000FF8000000000000001FF8000000000000001FF0000000000000003FF0000000000 000007FF0000000000000007FE000000000000000FFE000000000000000FFE0000000000 00001FFC000000000000001FFC000000000000003FFC000000000000003FFC0000000000 00007FF8000000000000007FF800000000000000FFF800000000000000FFF80000000000 0000FFF800000000000001FFF000000000000001FFF000000000000003FFF00000000000 0003FFF000000000000003FFF000000000000007FFF000000000000007FFF00000000000 0007FFF000000000000007FFF00000000000000FFFE00000000000000FFFE00000000000 000FFFE00000000000000FFFE00000000000001FFFE00000000000001FFFE00000000000 001FFFE00000000000001FFFE00000000000001FFFE00000000000001FFFE00000000000 003FFFE00000000000003FFFE00000000000003FFFE00000000000003FFFE00000000000 003FFFE00000000000003FFFE00000000000003FFFE00000000000003FFFE00000000000 003FFFE00000000000003FFFE00000000000003FFFE00000000000003FFFE00000000000 003FFFE00000000000001FFFC00000000000001FFFC00000000000000FFF800000000000 0003FE0000000000000001FC0000000000456377E051>I<0000003FFF80000000000003 FFFFFC00000000001FFFFFFF80000000007FFFFFFFE000000001FFFFFFFFF800000003FF F007FFFC0000000FFF00007FFE0000001FFC00001FFF0000003FF000000FFF8000007FE0 000003FFC00000FFC0000003FFE00000FFC0000001FFF00001FF80000000FFF00001FF80 000000FFF80003FF000000007FF80003FF000000007FF80007FF000000007FFC0007FF00 0000003FFC0007FF000000003FFC000FFF000000003FFC000FFF800000003FFC000FFF80 0000003FFC000FFF800000003FFC000FFFC00000003FFC000FFFE00000003FFC000FFFF0 0000007FFC000FFFF80000007FF8000FFFFE0000007FF8000FFFFF8000007FF8000FFFFF C00000FFF00007FFFFF00000FFF00007FFFFFC0001FFE00007FFFFFF0003FFC00003FFFF FF8003FFC00003FFFFFFE007FF800001FFFFFFF80FFF000001FFFFFFFE1FFE000000FFFF FFFF7FF8000000FFFFFFFFFFF00000007FFFFFFFFFC00000003FFFFFFFFF800000001FFF FFFFFE000000000FFFFFFFFF8000000007FFFFFFFFE000000001FFFFFFFFF000000000FF FFFFFFFC000000003FFFFFFFFE000000007FFFFFFFFF00000001FFFFFFFFFF80000007FF FFFFFFFFC000000FFFFFFFFFFFE000003FFE3FFFFFFFF000007FFC0FFFFFFFF80000FFF0 03FFFFFFFC0001FFE000FFFFFFFC0003FFC0007FFFFFFE0007FF80001FFFFFFE000FFF00 0007FFFFFF000FFF000001FFFFFF001FFE000000FFFFFF803FFE0000003FFFFF803FFC00 00000FFFFF807FFC00000007FFFFC07FF800000001FFFFC07FF8000000007FFFC07FF800 0000003FFFC0FFF8000000001FFFC0FFF0000000001FFFC0FFF0000000000FFFC0FFF000 00000007FFC0FFF00000000007FFC0FFF00000000007FFC0FFF00000000003FFC0FFF000 00000003FFC0FFF00000000003FF80FFF00000000003FF80FFF80000000003FF807FF800 00000003FF007FF80000000007FF007FFC0000000007FF003FFC0000000007FE003FFE00 0000000FFE001FFE000000000FFC001FFF000000001FF8000FFF800000003FF80007FFC0 0000007FF00003FFF0000000FFE00001FFFC000003FFC00000FFFF00001FFF8000007FFF F001FFFE0000003FFFFFFFFFFC0000000FFFFFFFFFF000000003FFFFFFFFE000000000FF FFFFFF00000000000FFFFFF80000000000007FFF00000000426079DD51>I<01FC0007FF 000FFF801FFFC03FFFE07FFFF07FFFF0FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFF F87FFFF07FFFF03FFFE01FFFC00FFF8007FF0001FC000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000001FC0007FF000FFF801FFFC03FFFE07FFFF07FFF F0FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF8FFFFF87FFFF07FFFF03FFFE01FFFC00FFF 8007FF0001FC00154074BF2D>58 D<0000000000000FE00000000000000000000000001F F00000000000000000000000001FF00000000000000000000000003FF800000000000000 00000000003FF80000000000000000000000003FF80000000000000000000000007FFC00 00000000000000000000007FFC000000000000000000000000FFFE000000000000000000 000000FFFE000000000000000000000000FFFE000000000000000000000001FFFF000000 000000000000000001FFFF000000000000000000000003FFFF8000000000000000000000 03FFFF800000000000000000000007FFFFC00000000000000000000007FFFFC000000000 00000000000007FFFFC0000000000000000000000FFFFFE0000000000000000000000FFF FFE0000000000000000000001FFFFFF0000000000000000000001FFFFFF0000000000000 000000001FFFFFF0000000000000000000003FFFFFF8000000000000000000003FFFFFF8 000000000000000000007FBFFFFC000000000000000000007FBFFFFC0000000000000000 00007F1FFFFC00000000000000000000FF1FFFFE00000000000000000000FE1FFFFE0000 0000000000000001FE0FFFFF00000000000000000001FE0FFFFF00000000000000000001 FC07FFFF00000000000000000003FC07FFFF80000000000000000003F807FFFF80000000 000000000007F803FFFFC0000000000000000007F803FFFFC0000000000000000007F001 FFFFC000000000000000000FF001FFFFE000000000000000000FE001FFFFE00000000000 0000001FE000FFFFF000000000000000001FE000FFFFF000000000000000001FC0007FFF F000000000000000003FC0007FFFF800000000000000003F80007FFFF800000000000000 007F80003FFFFC00000000000000007F80003FFFFC00000000000000007F00001FFFFC00 00000000000000FF00001FFFFE0000000000000000FE00001FFFFE0000000000000001FE 00000FFFFF0000000000000001FE00000FFFFF0000000000000001FC000007FFFF000000 0000000003FC000007FFFF8000000000000003F8000007FFFF8000000000000007F80000 03FFFFC000000000000007F8000003FFFFC000000000000007F0000001FFFFC000000000 00000FF0000001FFFFE00000000000000FE0000001FFFFE00000000000001FE0000000FF FFF00000000000001FE0000000FFFFF00000000000001FC00000007FFFF0000000000000 3FC00000007FFFF80000000000003F800000007FFFF80000000000007F800000003FFFFC 0000000000007FFFFFFFFFFFFFFC0000000000007FFFFFFFFFFFFFFC000000000000FFFF FFFFFFFFFFFE000000000000FFFFFFFFFFFFFFFE000000000001FFFFFFFFFFFFFFFF0000 00000001FFFFFFFFFFFFFFFF000000000001FC0000000007FFFF000000000003FC000000 0007FFFF800000000003F80000000007FFFF800000000007F80000000003FFFFC0000000 0007F00000000003FFFFC00000000007F00000000001FFFFC0000000000FF00000000001 FFFFE0000000000FE00000000000FFFFE0000000001FE00000000000FFFFF0000000001F C00000000000FFFFF0000000001FC000000000007FFFF0000000003FC000000000007FFF F8000000003F8000000000003FFFF8000000007F8000000000003FFFFC000000007F0000 000000003FFFFC000000007F0000000000001FFFFC00000000FF0000000000001FFFFE00 000000FE0000000000000FFFFE00000001FE0000000000000FFFFF00000001FC00000000 00000FFFFF00000003FE00000000000007FFFF8000001FFFC0000000000007FFFF8000FF FFFFFFE0000000FFFFFFFFFFFEFFFFFFFFE0000000FFFFFFFFFFFEFFFFFFFFE0000000FF FFFFFFFFFEFFFFFFFFE0000000FFFFFFFFFFFEFFFFFFFFE0000000FFFFFFFFFFFEFFFFFF FFE0000000FFFFFFFFFFFE6F647BE37A>65 DI<000000000001FFFF00000003C000000000007FFFFFF0000007C00000000007FF FFFFFE00000FC0000000007FFFFFFFFFC0001FC000000001FFFFFFFFFFF0003FC0000000 0FFFFFFFFFFFFC007FC00000003FFFFFF8007FFE00FFC0000000FFFFFF000007FF81FFC0 000001FFFFF0000001FFC3FFC0000007FFFFC00000007FE7FFC000000FFFFF000000001F FFFFC000003FFFFC0000000007FFFFC000007FFFF00000000003FFFFC00000FFFFE00000 000001FFFFC00001FFFF800000000000FFFFC00003FFFF0000000000007FFFC00007FFFE 0000000000003FFFC0000FFFFC0000000000001FFFC0001FFFF80000000000000FFFC000 3FFFF800000000000007FFC0003FFFF000000000000007FFC0007FFFE000000000000003 FFC000FFFFE000000000000003FFC001FFFFC000000000000001FFC001FFFFC000000000 000001FFC003FFFF8000000000000000FFC003FFFF8000000000000000FFC007FFFF0000 0000000000007FC007FFFF00000000000000007FC00FFFFF00000000000000007FC00FFF FE00000000000000003FC01FFFFE00000000000000003FC01FFFFE00000000000000003F C01FFFFE00000000000000003FC03FFFFC00000000000000001FC03FFFFC000000000000 00001FC03FFFFC00000000000000001FC03FFFFC00000000000000001FC07FFFFC000000 000000000000007FFFFC000000000000000000007FFFF8000000000000000000007FFFF8 000000000000000000007FFFF800000000000000000000FFFFF800000000000000000000 FFFFF800000000000000000000FFFFF800000000000000000000FFFFF800000000000000 000000FFFFF800000000000000000000FFFFF800000000000000000000FFFFF800000000 000000000000FFFFF800000000000000000000FFFFF800000000000000000000FFFFF800 000000000000000000FFFFF800000000000000000000FFFFF800000000000000000000FF FFF800000000000000000000FFFFF800000000000000000000FFFFF80000000000000000 0000FFFFF8000000000000000000007FFFF8000000000000000000007FFFF80000000000 00000000007FFFF8000000000000000000007FFFFC000000000000000000007FFFFC0000 00000000000000003FFFFC000000000000000000003FFFFC000000000000000000003FFF FC00000000000000000FC03FFFFC00000000000000000FC01FFFFE00000000000000000F C01FFFFE00000000000000000FC01FFFFE00000000000000000FC00FFFFE000000000000 00000FC00FFFFF00000000000000001FC007FFFF00000000000000001F8007FFFF000000 00000000001F8003FFFF80000000000000001F8003FFFF80000000000000003F8001FFFF C0000000000000003F0001FFFFC0000000000000003F0000FFFFE0000000000000007F00 007FFFE000000000000000FE00003FFFF000000000000000FE00003FFFF8000000000000 01FC00001FFFF800000000000001FC00000FFFFC00000000000003F8000007FFFE000000 00000007F0000003FFFF0000000000000FE0000001FFFF8000000000001FE0000000FFFF E000000000003FC00000007FFFF00000000000FF800000003FFFFC0000000001FF000000 000FFFFF0000000007FE0000000007FFFFC00000001FF80000000001FFFFF80000007FF0 0000000000FFFFFF000003FFE000000000003FFFFFF8003FFF8000000000000FFFFFFFFF FFFE00000000000001FFFFFFFFFFF8000000000000007FFFFFFFFFE00000000000000007 FFFFFFFF8000000000000000007FFFFFF800000000000000000001FFFF00000000006266 77E375>IIII73 D77 DI<00000000001FFFE000000000000000000007FFFFFF800000 0000000000003FFFFFFFF00000000000000001FFFFFFFFFE000000000000000FFFFFFFFF FFC00000000000003FFFFC00FFFFF0000000000000FFFFC0000FFFFC000000000003FFFE 000001FFFF000000000007FFF80000007FFF80000000001FFFF00000003FFFE000000000 3FFFC00000000FFFF0000000007FFF8000000007FFF800000000FFFF0000000003FFFC00 000003FFFE0000000001FFFF00000007FFFC0000000000FFFF80000007FFF80000000000 7FFF8000000FFFF000000000003FFFC000001FFFF000000000003FFFE000003FFFE00000 0000001FFFF000007FFFE000000000001FFFF800007FFFC000000000000FFFF80000FFFF C000000000000FFFFC0001FFFF80000000000007FFFE0001FFFF80000000000007FFFE00 03FFFF00000000000003FFFF0003FFFF00000000000003FFFF0007FFFF00000000000003 FFFF8007FFFE00000000000001FFFF800FFFFE00000000000001FFFFC00FFFFE00000000 000001FFFFC00FFFFE00000000000001FFFFC01FFFFC00000000000000FFFFE01FFFFC00 000000000000FFFFE01FFFFC00000000000000FFFFE03FFFFC00000000000000FFFFF03F FFFC00000000000000FFFFF03FFFFC00000000000000FFFFF03FFFF8000000000000007F FFF07FFFF8000000000000007FFFF87FFFF8000000000000007FFFF87FFFF80000000000 00007FFFF87FFFF8000000000000007FFFF87FFFF8000000000000007FFFF8FFFFF80000 00000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFF F8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFF FCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000 007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000 000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8000000000000007FFFFCFFFFF8 000000000000007FFFFCFFFFF8000000000000007FFFFC7FFFF8000000000000007FFFF8 7FFFF8000000000000007FFFF87FFFF8000000000000007FFFF87FFFFC00000000000000 FFFFF87FFFFC00000000000000FFFFF87FFFFC00000000000000FFFFF83FFFFC00000000 000000FFFFF03FFFFC00000000000000FFFFF03FFFFC00000000000000FFFFF03FFFFC00 000000000000FFFFF01FFFFE00000000000001FFFFE01FFFFE00000000000001FFFFE01F FFFE00000000000001FFFFE00FFFFE00000000000001FFFFC00FFFFF00000000000003FF FFC007FFFF00000000000003FFFF8007FFFF00000000000003FFFF8003FFFF8000000000 0007FFFF0003FFFF80000000000007FFFF0001FFFFC000000000000FFFFE0001FFFFC000 000000000FFFFE0000FFFFE000000000001FFFFC0000FFFFE000000000001FFFFC00007F FFF000000000003FFFF800003FFFF000000000003FFFF000001FFFF800000000007FFFE0 00001FFFFC0000000000FFFFE000000FFFFC0000000000FFFFC0000007FFFE0000000001 FFFF80000003FFFF0000000003FFFF00000001FFFF8000000007FFFE00000000FFFFE000 00001FFFFC000000003FFFF00000003FFFF0000000001FFFFC000000FFFFE0000000000F FFFF000003FFFFC00000000003FFFFC0000FFFFF000000000000FFFFFC00FFFFFC000000 0000003FFFFFFFFFFFF00000000000000FFFFFFFFFFFC000000000000003FFFFFFFFFF00 000000000000007FFFFFFFF8000000000000000007FFFFFF800000000000000000001FFF E00000000000666677E379>II82 D86 D<000003FFFE000000000000007FFFFF F0000000000003FFFFFFFE00000000000FFFFFFFFF80000000001FFFFFFFFFE000000000 3FFE001FFFF0000000007FE00007FFF800000000FFF80001FFFC00000001FFFC0000FFFE 00000001FFFC00007FFF00000003FFFE00003FFF80000003FFFE00003FFFC0000003FFFE 00001FFFE0000003FFFE00001FFFE0000003FFFE00000FFFF0000003FFFE00000FFFF000 0003FFFE00000FFFF0000001FFFC000007FFF8000001FFFC000007FFF8000000FFF80000 07FFF80000007FF0000007FFF80000001FC0000007FFF80000000000000007FFF8000000 0000000007FFF80000000000000007FFF80000000000000007FFF80000000000000007FF F80000000000000007FFF80000000000000007FFF8000000000001FFFFFFF80000000000 7FFFFFFFF80000000007FFFFFFFFF8000000007FFFFFFFFFF800000001FFFFFF07FFF800 00000FFFFFC007FFF80000003FFFFE0007FFF80000007FFFF00007FFF8000001FFFFC000 07FFF8000003FFFF000007FFF8000007FFFE000007FFF800000FFFF8000007FFF800001F FFF8000007FFF800001FFFF0000007FFF800003FFFE0000007FFF800007FFFE0000007FF F800007FFFC0000007FFF800007FFFC0000007FFF80000FFFF80000007FFF80000FFFF80 000007FFF80000FFFF80000007FFF80000FFFF80000007FFF80000FFFF8000000FFFF800 00FFFF8000000FFFF80000FFFF8000001FFFF80000FFFFC000001FFFF800007FFFC00000 3FFFF800007FFFE000003FFFF800003FFFE000007DFFFC00003FFFF00001F9FFFC00001F FFF80003F1FFFF80000FFFFE000FE1FFFFFF0007FFFFC07FC0FFFFFF8001FFFFFFFF807F FFFF80007FFFFFFF003FFFFF80001FFFFFFC000FFFFF800003FFFFF00001FFFF0000001F FF00000000000049437CC14E>97 D<0007FF80000000000000FFFFFF80000000000000FF FFFF80000000000000FFFFFF80000000000000FFFFFF80000000000000FFFFFF80000000 000000FFFFFF8000000000000000FFFF80000000000000007FFF80000000000000003FFF 80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000 00003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000 0000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000000 3FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000 000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF 80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000 00003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000 0000000000003FFF8000FFF8000000003FFF800FFFFF800000003FFF807FFFFFF0000000 3FFF81FFFFFFFC0000003FFF87FFFFFFFF0000003FFF8FFF00FFFFC000003FFFBFF0001F FFE000003FFFFFC00007FFF000003FFFFF000003FFF800003FFFFE000000FFFC00003FFF F8000000FFFE00003FFFF00000007FFF00003FFFE00000003FFF80003FFFC00000003FFF C0003FFFC00000001FFFC0003FFFC00000001FFFE0003FFFC00000001FFFE0003FFFC000 00000FFFF0003FFFC00000000FFFF0003FFFC00000000FFFF8003FFFC00000000FFFF800 3FFFC00000000FFFF8003FFFC000000007FFFC003FFFC000000007FFFC003FFFC0000000 07FFFC003FFFC000000007FFFC003FFFC000000007FFFE003FFFC000000007FFFE003FFF C000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FF FE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000 000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE00 3FFFC000000007FFFE003FFFC000000007FFFC003FFFC000000007FFFC003FFFC0000000 07FFFC003FFFC000000007FFFC003FFFC00000000FFFF8003FFFC00000000FFFF8003FFF C00000000FFFF8003FFFC00000000FFFF0003FFFC00000000FFFF0003FFFC00000001FFF E0003FFFC00000001FFFE0003FFFC00000003FFFC0003FFFE00000003FFF80003FFFE000 00007FFF00003FFFF00000007FFF00003FFFF8000000FFFE00003FFFFC000001FFFC0000 3FFEFF000007FFF800003FFC7F80000FFFF000003FF83FE0003FFFC000003FF00FFC03FF FF8000003FE007FFFFFFFE0000003FC001FFFFFFF80000003F8000FFFFFFE00000003F00 001FFFFF0000000000000003FFE00000004F657BE35A>I<0000000FFFF00000000001FF FFFF800000000FFFFFFFF00000003FFFFFFFFC000000FFFFFFFFFE000003FFFE001FFF00 0007FFF80001FF80000FFFE00007FFC0001FFF80000FFFE0007FFF00000FFFE000FFFE00 001FFFF000FFFE00001FFFF001FFFC00001FFFF003FFF800001FFFF007FFF800001FFFF0 07FFF000001FFFF00FFFF000001FFFF00FFFF000000FFFE01FFFE000000FFFE01FFFE000 0007FFC03FFFE0000003FF803FFFE0000000FE003FFFE000000000007FFFC00000000000 7FFFC000000000007FFFC000000000007FFFC00000000000FFFFC00000000000FFFFC000 00000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000 FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC000 00000000FFFFC00000000000FFFFC00000000000FFFFC000000000007FFFC00000000000 7FFFC000000000007FFFE000000000007FFFE000000000003FFFE000000000003FFFE000 000000003FFFF000000000001FFFF000000000FC1FFFF000000000FC0FFFF800000001FC 0FFFF800000001F807FFF800000001F803FFFC00000003F803FFFE00000007F001FFFE00 000007E000FFFF0000000FE0007FFF8000001FC0003FFFE000007F80001FFFF00000FF00 0007FFFC0003FE000003FFFFC03FFC000000FFFFFFFFF00000003FFFFFFFE00000000FFF FFFF8000000001FFFFFC00000000000FFFC000003E437BC148>I<000000000000007FF8 0000000000000FFFFFF80000000000000FFFFFF80000000000000FFFFFF8000000000000 0FFFFFF80000000000000FFFFFF80000000000000FFFFFF8000000000000000FFFF80000 000000000007FFF80000000000000003FFF80000000000000003FFF80000000000000003 FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8 0000000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000 0003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000 000000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003 FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000 00000003FFF80000000000000003FFF8000000000FFF8003FFF800000001FFFFF803FFF8 0000000FFFFFFE03FFF80000003FFFFFFF83FFF8000000FFFFFFFFE3FFF8000003FFFF80 7FF3FFF8000007FFF8000FFBFFF800001FFFE00003FFFFF800003FFFC00000FFFFF80000 7FFF0000007FFFF80000FFFE0000003FFFF80001FFFC0000001FFFF80003FFFC0000000F FFF80003FFF800000007FFF80007FFF800000007FFF8000FFFF000000007FFF8000FFFF0 00000007FFF8001FFFE000000007FFF8001FFFE000000007FFF8003FFFE000000007FFF8 003FFFE000000007FFF8003FFFE000000007FFF8007FFFC000000007FFF8007FFFC00000 0007FFF8007FFFC000000007FFF8007FFFC000000007FFF800FFFFC000000007FFF800FF FFC000000007FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC000000007 FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC0 00000007FFF800FFFFC000000007FFF800FFFFC000000007FFF800FFFFC000000007FFF8 00FFFFC000000007FFF800FFFFC000000007FFF8007FFFC000000007FFF8007FFFC00000 0007FFF8007FFFC000000007FFF8007FFFC000000007FFF8003FFFE000000007FFF8003F FFE000000007FFF8003FFFE000000007FFF8001FFFE000000007FFF8001FFFE000000007 FFF8000FFFF000000007FFF8000FFFF000000007FFF80007FFF00000000FFFF80007FFF8 0000000FFFF80003FFF80000001FFFF80001FFFC0000003FFFF80000FFFE0000007FFFF8 00007FFE000000FFFFF800003FFF800003FFFFFC00001FFFC00007FFFFFE00000FFFF000 1FF7FFFFFE0007FFFE01FFE7FFFFFE0001FFFFFFFF87FFFFFE00007FFFFFFE07FFFFFE00 001FFFFFF807FFFFFE000003FFFFE007FFFFFE0000003FFE0007FFC0004F657BE35A>I< 0000000FFFC0000000000001FFFFFC00000000000FFFFFFF80000000003FFFFFFFE00000 0000FFFFFFFFF800000003FFFE03FFFC00000007FFF0007FFF0000001FFFC0001FFF8000 003FFF80000FFFC000007FFF000007FFE00000FFFE000003FFF00001FFFC000001FFF000 03FFFC000001FFF80003FFF8000000FFF80007FFF8000000FFFC000FFFF0000000FFFC00 0FFFF00000007FFE001FFFF00000007FFE001FFFE00000007FFE003FFFE00000003FFF00 3FFFE00000003FFF003FFFE00000003FFF007FFFE00000003FFF007FFFC00000003FFF00 7FFFC00000001FFF807FFFC00000001FFF80FFFFC00000001FFF80FFFFC00000001FFF80 FFFFC00000001FFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80 FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF00FFFFC0000000000000FFFFC0000000000000 FFFFC0000000000000FFFFC0000000000000FFFFC0000000000000FFFFC0000000000000 7FFFC00000000000007FFFC00000000000007FFFC00000000000007FFFE0000000000000 7FFFE00000000000003FFFE00000000000003FFFE00000000000001FFFE0000000000000 1FFFF0000000000F001FFFF0000000001F800FFFF0000000003F8007FFF8000000003F80 07FFF8000000007F0003FFFC000000007F0001FFFE00000000FE0000FFFE00000001FE00 007FFF00000003FC00003FFF80000007F800001FFFE000000FF000000FFFF000003FE000 0003FFFC0001FFC0000001FFFFC01FFF000000007FFFFFFFFE000000001FFFFFFFF80000 000007FFFFFFE00000000000FFFFFF00000000000007FFF000000041437CC14A>I<0000 00003FFC0000000007FFFF800000003FFFFFC0000001FFFFFFF0000007FFFFFFF800000F FFF03FFC00001FFF807FFC00007FFE00FFFE0000FFFC00FFFE0000FFF801FFFF0001FFF0 01FFFF0003FFF001FFFF0007FFE001FFFF0007FFE001FFFF000FFFC001FFFF000FFFC001 FFFF000FFFC000FFFE001FFF80007FFC001FFF80003FF8001FFF80001FF0001FFF800007 C0001FFF80000000001FFF80000000001FFF80000000001FFF80000000001FFF80000000 001FFF80000000001FFF80000000001FFF80000000001FFF80000000001FFF8000000000 1FFF80000000001FFF80000000001FFF80000000001FFF80000000001FFF80000000001F FF80000000FFFFFFFFFFC000FFFFFFFFFFC000FFFFFFFFFFC000FFFFFFFFFFC000FFFFFF FFFFC000FFFFFFFFFFC000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0 000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC000 0000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC00000 00001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000 001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC000000000 1FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001F FFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFF C0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0 000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC000 0000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC0000000001FFFC00000 00001FFFC0000000001FFFC00000007FFFFFFFFC00007FFFFFFFFC00007FFFFFFFFC0000 7FFFFFFFFC00007FFFFFFFFC00007FFFFFFFFC000038657CE431>I<0000000000000007 F8000000007FFE00003FFE0000000FFFFFF001FFFF0000007FFFFFFE03FFFF800001FFFF FFFF8FFFFF800003FFFFFFFFDFFDFFC0000FFFF00FFFFFC1FFC0001FFF8001FFFF01FFC0 003FFF0000FFFC03FFC0007FFE00007FFE01FFC000FFFC00003FFF01FFC001FFF800001F FF81FF8001FFF800001FFF80FF0003FFF800001FFFC03E0003FFF800001FFFC0000007FF F000000FFFE0000007FFF000000FFFE0000007FFF000000FFFE000000FFFF000000FFFF0 00000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000 000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF00000 0FFFF000000FFFF0000007FFF000000FFFE0000007FFF000000FFFE0000007FFF000000F FFE0000003FFF800001FFFC0000003FFF800001FFFC0000001FFF800001FFF80000001FF F800001FFF80000000FFFC00003FFF000000007FFE00007FFE000000003FFF0000FFFC00 0000001FFF8001FFF8000000001FFFF00FFFF0000000003FFFFFFFFFC0000000003FFFFF FFFF80000000007C7FFFFFFE0000000000FC0FFFFFF00000000000FC007FFE0000000000 00FC000000000000000001FC000000000000000001FC000000000000000001FC00000000 0000000001FC000000000000000001FE000000000000000001FE000000000000000001FF 000000000000000001FF800000000000000001FFF00000000000000001FFFFFFFFFF8000 000001FFFFFFFFFFFE00000000FFFFFFFFFFFFC0000000FFFFFFFFFFFFF00000007FFFFF FFFFFFFC0000007FFFFFFFFFFFFF0000003FFFFFFFFFFFFF8000001FFFFFFFFFFFFFC000 000FFFFFFFFFFFFFE0000007FFFFFFFFFFFFF000003FFFFFFFFFFFFFF80000FFFFFFFFFF FFFFF80003FFFFFFFFFFFFFFFC0007FFE0000001FFFFFC000FFF000000000FFFFE001FFE 0000000001FFFE003FFC00000000007FFE007FF800000000003FFF007FF800000000001F FF00FFF800000000001FFF00FFF000000000001FFF00FFF000000000000FFF00FFF00000 0000000FFF00FFF000000000000FFF00FFF000000000000FFF00FFF000000000000FFF00 FFF800000000001FFF007FF800000000001FFE007FFC00000000003FFE003FFC00000000 003FFC003FFE00000000007FFC001FFF0000000000FFF8000FFFC000000003FFF00007FF E000000007FFE00003FFF80000001FFFC00000FFFF000000FFFF0000007FFFF8001FFFFE 0000001FFFFFFFFFFFF800000007FFFFFFFFFFE000000000FFFFFFFFFF00000000000FFF FFFFF00000000000003FFFFC000000004A607CC151>I<0007FF8000000000000000FFFF FF8000000000000000FFFFFF8000000000000000FFFFFF8000000000000000FFFFFF8000 000000000000FFFFFF8000000000000000FFFFFF800000000000000000FFFF8000000000 000000007FFF8000000000000000003FFF8000000000000000003FFF8000000000000000 003FFF8000000000000000003FFF8000000000000000003FFF8000000000000000003FFF 8000000000000000003FFF8000000000000000003FFF8000000000000000003FFF800000 0000000000003FFF8000000000000000003FFF8000000000000000003FFF800000000000 0000003FFF8000000000000000003FFF8000000000000000003FFF800000000000000000 3FFF8000000000000000003FFF8000000000000000003FFF8000000000000000003FFF80 00000000000000003FFF8000000000000000003FFF8000000000000000003FFF80000000 00000000003FFF8000000000000000003FFF8000000000000000003FFF80000000000000 00003FFF8000000000000000003FFF80001FFF00000000003FFF8000FFFFF0000000003F FF8007FFFFFC000000003FFF801FFFFFFF000000003FFF803FFFFFFF800000003FFF807F E07FFFC00000003FFF81FE001FFFE00000003FFF83F8000FFFF00000003FFF87F00007FF F00000003FFF8FC00007FFF80000003FFF8F800003FFF80000003FFF9F000003FFFC0000 003FFFBE000003FFFC0000003FFFBC000001FFFC0000003FFFFC000001FFFE0000003FFF F8000001FFFE0000003FFFF8000001FFFE0000003FFFF0000001FFFE0000003FFFF00000 01FFFE0000003FFFE0000001FFFE0000003FFFE0000001FFFE0000003FFFE0000001FFFE 0000003FFFE0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE000000 3FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0 000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001 FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE00 00003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003F FFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC000 0001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FF FE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000 003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFF C0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC00000 01FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE 0000003FFFC0000001FFFE0000FFFFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FF FFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFF F007FFFFFFFF8051647BE35A>I<000FE00000003FF80000007FFC000001FFFF000001FF FF000003FFFF800003FFFF800007FFFFC00007FFFFC00007FFFFC00007FFFFC00007FFFF C00007FFFFC00007FFFFC00003FFFF800003FFFF800001FFFF000001FFFF0000007FFC00 00003FF80000000FE0000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000007FF80007FFFFF80007FFFFF80007FFFFF80007FFF FF80007FFFFF80007FFFFF800000FFFF8000007FFF8000003FFF8000003FFF8000003FFF 8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 00003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000 003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF800000 3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F FF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF 8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 00003FFF8000003FFF8000003FFF8000003FFF8000FFFFFFFFC0FFFFFFFFC0FFFFFFFFC0 FFFFFFFFC0FFFFFFFFC0FFFFFFFFC022657BE42C>I<00000001FC0000000007FF000000 000FFF800000003FFFE00000003FFFE00000007FFFF00000007FFFF0000000FFFFF80000 00FFFFF8000000FFFFF8000000FFFFF8000000FFFFF8000000FFFFF8000000FFFFF80000 007FFFF00000007FFFF00000003FFFE00000003FFFE00000000FFF8000000007FF000000 0001FC000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000FFF800001FFFFFF80000 1FFFFFF800001FFFFFF800001FFFFFF800001FFFFFF800001FFFFFF80000000FFFF80000 0007FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF800000003FFF80000 0003FFF800000003FFF800000003FFF800000003FFF800000003FFF807F00003FFF81FFC 0003FFF83FFE0003FFF87FFF0003FFF8FFFF8007FFF0FFFF8007FFF0FFFF8007FFF0FFFF 8007FFE0FFFF800FFFE0FFFF800FFFC0FFFF801FFFC0FFFF801FFF807FFF003FFF007FFE 007FFE003FFC00FFFC001FFE03FFF0000FFFFFFFE00007FFFFFF800001FFFFFE0000007F FFF800000007FF8000002D8288E431>I<0007FF80000000000000FFFFFF800000000000 00FFFFFF80000000000000FFFFFF80000000000000FFFFFF80000000000000FFFFFF8000 0000000000FFFFFF8000000000000000FFFF80000000000000007FFF8000000000000000 3FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000 000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF 80000000000000003FFF80000000000000003FFF80000000000000003FFF800000000000 00003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF8000 0000000000003FFF80000000000000003FFF80000000000000003FFF8000000000000000 3FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF80000000 000000003FFF80000000000000003FFF80000000000000003FFF80000000000000003FFF 80000000000000003FFF80000000000000003FFF800003FFFFFF80003FFF800003FFFFFF 80003FFF800003FFFFFF80003FFF800003FFFFFF80003FFF800003FFFFFF80003FFF8000 03FFFFFF80003FFF8000003FFF8000003FFF8000000FFC0000003FFF8000001FF0000000 3FFF8000003FE00000003FFF800000FFC00000003FFF800001FF800000003FFF800003FF 000000003FFF800007FC000000003FFF80000FF8000000003FFF80003FF0000000003FFF 80007FE0000000003FFF8000FFC0000000003FFF8001FF00000000003FFF8003FE000000 00003FFF800FFC00000000003FFF801FF800000000003FFF803FF000000000003FFF807F C000000000003FFF80FFE000000000003FFF83FFF000000000003FFF87FFF80000000000 3FFF8FFFF800000000003FFF9FFFFC00000000003FFFBFFFFE00000000003FFFFFFFFE00 000000003FFFFFFFFF00000000003FFFFFFFFF80000000003FFFFCFFFFC0000000003FFF F87FFFC0000000003FFFF07FFFE0000000003FFFE03FFFF0000000003FFFC01FFFF80000 00003FFF801FFFF8000000003FFF800FFFFC000000003FFF8007FFFE000000003FFF8003 FFFF000000003FFF8003FFFF000000003FFF8001FFFF800000003FFF8000FFFFC0000000 3FFF80007FFFE00000003FFF80007FFFE00000003FFF80003FFFF00000003FFF80001FFF F80000003FFF80000FFFFC0000003FFF80000FFFFC0000003FFF800007FFFE0000003FFF 800003FFFF0000003FFF800001FFFF0000003FFF800001FFFF8000003FFF800000FFFFC0 00003FFF8000007FFFE000003FFF800000FFFFF000FFFFFFFFE00FFFFFFFF0FFFFFFFFE0 0FFFFFFFF0FFFFFFFFE00FFFFFFFF0FFFFFFFFE00FFFFFFFF0FFFFFFFFE00FFFFFFFF0FF FFFFFFE00FFFFFFFF04C647BE355>I<0007FF8000FFFFFF8000FFFFFF8000FFFFFF8000 FFFFFF8000FFFFFF8000FFFFFF800000FFFF8000007FFF8000003FFF8000003FFF800000 3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F FF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF 8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 00003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000 003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF800000 3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F FF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF 8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF80 00003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000 003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF800000 3FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003FFF8000003F FF8000003FFF8000003FFF8000003FFF8000FFFFFFFFE0FFFFFFFFE0FFFFFFFFE0FFFFFF FFE0FFFFFFFFE0FFFFFFFFE023647BE32C>I<0007FF80001FFF00000000FFF8000000FF FFFF8000FFFFF0000007FFFF800000FFFFFF8007FFFFFC00003FFFFFE00000FFFFFF801F FFFFFF0000FFFFFFF80000FFFFFF803FFFFFFF8001FFFFFFFC0000FFFFFF807FE07FFFC0 03FF03FFFE0000FFFFFF81FE001FFFE00FF000FFFF000000FFFF83F8000FFFF01FC0007F FF8000007FFF87F00007FFF03F80003FFF8000003FFF8FC00007FFF87E00003FFFC00000 3FFF8F800003FFF87C00001FFFC000003FFF9F000003FFFCF800001FFFE000003FFFBE00 0003FFFDF000001FFFE000003FFFBC000001FFFDE000000FFFE000003FFFFC000001FFFF E000000FFFF000003FFFF8000001FFFFC000000FFFF000003FFFF8000001FFFFC000000F FFF000003FFFF0000001FFFF8000000FFFF000003FFFF0000001FFFF8000000FFFF00000 3FFFE0000001FFFF0000000FFFF000003FFFE0000001FFFF0000000FFFF000003FFFE000 0001FFFF0000000FFFF000003FFFE0000001FFFF0000000FFFF000003FFFC0000001FFFE 0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE 0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE 0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE 0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000F FFF000003FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF00000 3FFFC0000001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000003FFFC000 0001FFFE0000000FFFF000003FFFC0000001FFFE0000000FFFF000FFFFFFFFF007FFFFFF FF803FFFFFFFFCFFFFFFFFF007FFFFFFFF803FFFFFFFFCFFFFFFFFF007FFFFFFFF803FFF FFFFFCFFFFFFFFF007FFFFFFFF803FFFFFFFFCFFFFFFFFF007FFFFFFFF803FFFFFFFFCFF FFFFFFF007FFFFFFFF803FFFFFFFFC7E417BC087>I<0007FF80001FFF00000000FFFFFF 8000FFFFF0000000FFFFFF8007FFFFFC000000FFFFFF801FFFFFFF000000FFFFFF803FFF FFFF800000FFFFFF807FE07FFFC00000FFFFFF81FE001FFFE0000000FFFF83F8000FFFF0 0000007FFF87F00007FFF00000003FFF8FC00007FFF80000003FFF8F800003FFF8000000 3FFF9F000003FFFC0000003FFFBE000003FFFC0000003FFFBC000001FFFC0000003FFFFC 000001FFFE0000003FFFF8000001FFFE0000003FFFF8000001FFFE0000003FFFF0000001 FFFE0000003FFFF0000001FFFE0000003FFFE0000001FFFE0000003FFFE0000001FFFE00 00003FFFE0000001FFFE0000003FFFE0000001FFFE0000003FFFC0000001FFFE0000003F FFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC000 0001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FF FE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000 003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFF C0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC00000 01FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE 0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE000000 3FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0 000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001 FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE00 00003FFFC0000001FFFE0000003FFFC0000001FFFE0000FFFFFFFFF007FFFFFFFF80FFFF FFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFFF007FFFFFFFF80FFFFFFFFF0 07FFFFFFFF80FFFFFFFFF007FFFFFFFF8051417BC05A>I<00000007FFE0000000000000 FFFFFF000000000007FFFFFFE0000000001FFFFFFFF8000000007FFFFFFFFE00000001FF FE007FFF80000007FFF0000FFFE000000FFFC00003FFF000001FFF800001FFF800003FFF 000000FFFC00007FFE0000007FFE0000FFFC0000003FFF0001FFF80000001FFF8003FFF8 0000001FFFC003FFF00000000FFFC007FFF00000000FFFE00FFFE000000007FFF00FFFE0 00000007FFF01FFFE000000007FFF81FFFE000000007FFF81FFFE000000007FFF83FFFC0 00000003FFFC3FFFC000000003FFFC3FFFC000000003FFFC7FFFC000000003FFFE7FFFC0 00000003FFFE7FFFC000000003FFFE7FFFC000000003FFFEFFFFC000000003FFFFFFFFC0 00000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC0 00000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC0 00000003FFFFFFFFC000000003FFFFFFFFC000000003FFFFFFFFC000000003FFFF7FFFC0 00000003FFFE7FFFC000000003FFFE7FFFC000000003FFFE7FFFC000000003FFFE3FFFE0 00000007FFFC3FFFE000000007FFFC3FFFE000000007FFFC1FFFE000000007FFF81FFFE0 00000007FFF80FFFF00000000FFFF00FFFF00000000FFFF007FFF00000000FFFE003FFF8 0000001FFFC003FFF80000001FFFC001FFFC0000003FFF8000FFFE0000007FFF00007FFF 000000FFFE00003FFF800001FFFC00001FFFC00003FFF8000007FFF0000FFFE0000003FF FE007FFFC0000000FFFFFFFFFF000000003FFFFFFFFC0000000007FFFFFFE00000000000 FFFFFF00000000000007FFE000000048437CC151>I<0007FF8000FFF8000000FFFFFF80 0FFFFF800000FFFFFF807FFFFFF00000FFFFFF81FFFFFFFC0000FFFFFF87FFFFFFFF0000 FFFFFF8FFF01FFFFC000FFFFFFBFF0003FFFE00000FFFFFFC0000FFFF000007FFFFF0000 07FFF800003FFFFE000003FFFC00003FFFF8000001FFFE00003FFFF0000000FFFF00003F FFE0000000FFFF80003FFFC00000007FFFC0003FFFC00000007FFFC0003FFFC00000003F FFE0003FFFC00000003FFFE0003FFFC00000001FFFF0003FFFC00000001FFFF0003FFFC0 0000001FFFF8003FFFC00000000FFFF8003FFFC00000000FFFF8003FFFC00000000FFFFC 003FFFC00000000FFFFC003FFFC00000000FFFFC003FFFC000000007FFFC003FFFC00000 0007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003F FFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007 FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC0 00000007FFFE003FFFC000000007FFFE003FFFC000000007FFFE003FFFC00000000FFFFC 003FFFC00000000FFFFC003FFFC00000000FFFFC003FFFC00000000FFFFC003FFFC00000 000FFFF8003FFFC00000001FFFF8003FFFC00000001FFFF8003FFFC00000001FFFF0003F FFC00000003FFFF0003FFFC00000003FFFE0003FFFC00000007FFFE0003FFFC00000007F FFC0003FFFE0000000FFFF80003FFFE0000000FFFF00003FFFF0000001FFFF00003FFFF8 000003FFFE00003FFFFC000007FFFC00003FFFFF00000FFFF800003FFFFF80001FFFF000 003FFFFFE0007FFFC000003FFFCFFC03FFFF8000003FFFC7FFFFFFFE0000003FFFC1FFFF FFF80000003FFFC0FFFFFFE00000003FFFC01FFFFF000000003FFFC003FFE0000000003F FFC0000000000000003FFFC0000000000000003FFFC0000000000000003FFFC000000000 0000003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000003FFFC0 000000000000003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000 003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000003FFFC00000 00000000003FFFC0000000000000003FFFC0000000000000003FFFC0000000000000003F FFC0000000000000003FFFC0000000000000003FFFC0000000000000FFFFFFFFF0000000 0000FFFFFFFFF00000000000FFFFFFFFF00000000000FFFFFFFFF00000000000FFFFFFFF F00000000000FFFFFFFFF000000000004F5D7BC05A>I<000FFF000FFC00FFFFFF003FFF 80FFFFFF00FFFFE0FFFFFF01FFFFF0FFFFFF03FFFFF8FFFFFF07FC7FFCFFFFFF0FE0FFFE 00FFFF1F80FFFE007FFF3F01FFFF003FFF3E01FFFF003FFF7E01FFFF003FFF7C01FFFF00 3FFFF801FFFF003FFFF801FFFF003FFFF001FFFF003FFFF000FFFE003FFFF000FFFE003F FFE0007FFC003FFFE0003FF8003FFFE0000FE0003FFFC0000000003FFFC0000000003FFF C0000000003FFFC0000000003FFFC0000000003FFF80000000003FFF80000000003FFF80 000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF8000 0000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF800000 00003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000 003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF8000000000 3FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003F FF80000000003FFF80000000003FFF80000000003FFF80000000003FFF80000000003FFF 80000000FFFFFFFFF80000FFFFFFFFF80000FFFFFFFFF80000FFFFFFFFF80000FFFFFFFF F80000FFFFFFFFF8000038417BC042>114 D<00003FFF8007800007FFFFF81F80001FFF FFFE7F80007FFFFFFFFF8001FFFFFFFFFF8003FFE001FFFF8007FF00001FFF800FFC0000 07FF801FF0000003FF801FF0000000FF803FE0000000FF807FE00000007F807FC0000000 3F807FC00000003F80FFC00000003F80FFC00000001F80FFC00000001F80FFE00000001F 80FFF00000001F80FFF80000001F80FFFC0000000000FFFF0000000000FFFFE000000000 FFFFFF000000007FFFFFF80000007FFFFFFFC000003FFFFFFFFC00003FFFFFFFFF00001F FFFFFFFFC0000FFFFFFFFFF00007FFFFFFFFF80003FFFFFFFFFC0001FFFFFFFFFE0000FF FFFFFFFF00003FFFFFFFFF80000FFFFFFFFFC00003FFFFFFFFC000007FFFFFFFE0000003 FFFFFFF00000001FFFFFF000000000FFFFF0000000001FFFF80000000007FFF87C000000 01FFF8FC00000000FFF8FC000000007FF8FE000000003FF8FE000000003FF8FE00000000 1FF8FF000000001FF8FF000000001FF8FF800000001FF0FF800000001FF0FFC00000001F F0FFC00000003FF0FFE00000003FE0FFF00000007FE0FFF80000007FC0FFFE000000FF80 FFFF000003FF00FFFFC0000FFE00FFFFFC007FFC00FFDFFFFFFFF800FF0FFFFFFFF000FE 03FFFFFFC000F8007FFFFE0000F0000FFFE0000035437BC140>I<000007E00000000000 07E0000000000007E0000000000007E0000000000007E0000000000007E000000000000F E000000000000FE000000000000FE000000000000FE000000000000FE000000000001FE0 00000000001FE000000000001FE000000000003FE000000000003FE000000000007FE000 000000007FE00000000000FFE00000000001FFE00000000001FFE00000000003FFE00000 000007FFE0000000000FFFE0000000001FFFE0000000007FFFE000000001FFFFE0000000 0FFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FFFFFFFFFFFE00FF FFFFFFFFFE00001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001F FFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFF E0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0 000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE000 0000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE00000 00001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000000 001FFFE0000000001FFFE0000000001FFFE0000000001FFFE0000FC0001FFFE0000FC000 1FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001F FFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFFE0000FC0001FFF E0001FC0000FFFF0001F80000FFFF0001F80000FFFF0003F800007FFF0003F000007FFF8 007F000003FFFC007E000001FFFE00FC000000FFFF83FC0000007FFFFFF80000003FFFFF F00000000FFFFFC000000003FFFF80000000003FFC0000325C7DDA3F>I<0007FFC00000 003FFE0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE 0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE0000FFFFFFC00007FFFFFE000000 FFFFC0000007FFFE0000007FFFC0000003FFFE0000003FFFC0000001FFFE0000003FFFC0 000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001 FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE00 00003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003F FFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC000 0001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FF FE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000 003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFF C0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC00000 01FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE 0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE000000 3FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0000001FFFE0000003FFFC0 000001FFFE0000003FFFC0000003FFFE0000003FFFC0000003FFFE0000003FFFC0000003 FFFE0000003FFFC0000007FFFE0000003FFFC0000007FFFE0000003FFFC000000FFFFE00 00001FFFC000000FFFFE0000001FFFC000001FFFFE0000001FFFC000003EFFFE0000000F FFE000007EFFFE0000000FFFE00000FCFFFF00000007FFF00001F8FFFF80000003FFF800 07F0FFFFFF800001FFFF003FE0FFFFFF800000FFFFFFFFC0FFFFFF8000007FFFFFFF00FF FFFF8000001FFFFFFE00FFFFFF80000003FFFFF800FFFFFF800000003FFF8000FFF00000 51427BC05A>III<7FFFFF FFC0007FFFFFF87FFFFFFFC0007FFFFFF87FFFFFFFC0007FFFFFF87FFFFFFFC0007FFFFF F87FFFFFFFC0007FFFFFF87FFFFFFFC0007FFFFFF8001FFFF8000007FFF000000FFFF800 0001FF00000007FFFC000001FE00000003FFFE000003FC00000001FFFF000007F8000000 01FFFF80000FF000000000FFFF80001FE0000000007FFFC0001FE0000000003FFFE0003F C0000000001FFFF0007F80000000001FFFF800FF00000000000FFFF801FE000000000007 FFFC03FC000000000003FFFE07F8000000000001FFFF07F8000000000001FFFF8FF00000 00000000FFFF9FE00000000000007FFFFFC00000000000003FFFFF800000000000001FFF FF000000000000001FFFFE000000000000000FFFFC0000000000000007FFFC0000000000 000003FFFE0000000000000001FFFF0000000000000001FFFF8000000000000000FFFF80 000000000000007FFFC0000000000000007FFFE000000000000000FFFFF0000000000000 01FFFFF800000000000003FFFFF800000000000007FFFFFC0000000000000FF3FFFE0000 000000001FE1FFFF0000000000001FC0FFFF8000000000003FC0FFFF8000000000007F80 7FFFC00000000000FF003FFFE00000000001FE001FFFF00000000003FC000FFFF8000000 0007F8000FFFF80000000007F00007FFFC000000000FF00003FFFE000000001FE00001FF FF000000003FC00000FFFF800000007F800000FFFF80000000FF0000007FFFC0000001FE 0000003FFFE0000001FC0000001FFFF0000007FC0000000FFFF800003FFF0000000FFFF8 00FFFFFFF00001FFFFFFFFFFFFFFF00001FFFFFFFFFFFFFFF00001FFFFFFFFFFFFFFF000 01FFFFFFFFFFFFFFF00001FFFFFFFFFFFFFFF00001FFFFFFFF50407EBF55>II E /FI 24 107 df<7FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFF FFFFFFE03C04789A4D>0 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B0B 789E1C>I<600000000006F8000000000FFC000000001F7E000000003F3F000000007E1F 80000000FC0FC0000001F807E0000003F003F0000007E001F800000FC000FC00001F8000 7E00003F00003F00007E00001F8000FC00000FC001F8000007E003F0000003F007E00000 01F80FC0000000FC1F800000007E3F000000003F7E000000001FFC000000000FF8000000 0007F00000000007F0000000000FF8000000001FFC000000003F7E000000007E3F000000 00FC1F80000001F80FC0000003F007E0000007E003F000000FC001F800001F8000FC0000 3F00007E00007E00003F0000FC00001F8001F800000FC003F0000007E007E0000003F00F C0000001F81F80000000FC3F000000007E7E000000003FFC000000001FF8000000000F60 0000000006303072B04D>I<00007000000000F800000000F800000000F800000000F800 000000F800000000F800000000F800000000F80000000070000078007000F07C007001F0 FF007007F87F80700FF03FE0703FE00FF0707F8003F870FE0000FE73F800003F77E00000 0FFF80000003FE00000000F800000003FE0000000FFF8000003F77E00000FE73F80003F8 70FE000FF0707F803FE0703FE07F80700FF0FF007007F87C007001F078007000F0000070 00000000F800000000F800000000F800000000F800000000F800000000F800000000F800 000000F800000000700000252B7AAD32>I<00000000C00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E0000000007FFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC0 7FFFFFFFFFFFFFFF8000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 7FFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFC07FFFFFFFFFFFFFFF80 42427BC14D>6 D<0001FF0000000FFFE000003FFFF800007FFFFC0001FFFFFF0003FFFF FF8007FFFFFFC00FFFFFFFE01FFFFFFFF01FFFFFFFF03FFFFFFFF87FFFFFFFFC7FFFFFFF FC7FFFFFFFFCFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE7FFFFFFFFC7FFFFFFFFC7FFFFFFFFC3F FFFFFFF81FFFFFFFF01FFFFFFFF00FFFFFFFE007FFFFFFC003FFFFFF8001FFFFFF00007F FFFC00003FFFF800000FFFE0000001FF000027267BAB32>15 D<00000000000000E00000 0000000003F00000000000000FF00000000000003FE0000000000000FF80000000000003 FE0000000000000FF80000000000003FE0000000000000FF80000000000003FE00000000 00000FF80000000000003FE0000000000000FF80000000000003FE0000000000001FF800 00000000007FE0000000000001FF80000000000007FE0000000000001FF0000000000000 7FC0000000000001FF00000000000007FC0000000000001FF00000000000007FC0000000 000001FF00000000000007FC0000000000001FF00000000000007FC0000000000000FF00 000000000000FF000000000000007FC00000000000001FF000000000000007FC00000000 000001FF000000000000007FC00000000000001FF000000000000007FC00000000000001 FF000000000000007FC00000000000001FF000000000000007FC00000000000001FF8000 00000000007FE00000000000001FF800000000000007FE00000000000000FF8000000000 00003FE00000000000000FF800000000000003FE00000000000000FF800000000000003F E00000000000000FF800000000000003FE00000000000000FF800000000000003FE00000 000000000FF000000000000003F000000000000000E00000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 0000000000007FFFFFFFFFFFFFE0FFFFFFFFFFFFFFF0FFFFFFFFFFFFFFF07FFFFFFFFFFF FFE03C4E78BE4D>20 D<0007F0000000000080001FFE0000000001C0007FFF8000000001 C000FFFFE000000001C001FFFFF000000001C003FFFFF800000001C007F80FFC00000001 C00FE001FE00000003C01F80007F00000003801F00001FC0000003803E00000FE0000007 803C000007F00000070038000003F800000F0078000001FC00001F0070000000FE00003E 00700000003F80007E00F00000001FE001FC00E00000000FFC07F800E000000007FFFFF0 00E000000003FFFFE000E000000001FFFFC000E0000000007FFF8000E0000000001FFE00 00400000000003F8000042187BA44D>24 D<000007800000000000000000000007800000 00000000000000000780000000000000000000000F80000000000000000000000F000000 00000000000000000F00000000000000000000001F00000000000000000000001E000000 00000000000000001E00000000000000000000003E00000000000000000000003C000000 00000000000000007C0000000000000000000000F80000000000000000000000F8000000 0000000000000001F00000000000000000000003E00000000000000000000007E0000000 000000000000000FC0000000000000000000001F80000000000000000000003F00000000 000000000000007E0000000000000000000000FC0000000000000000000003F800000000 0000000000000FE0000000000000000000003FFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF FFFFFFFFFF80FFFFFFFFFFFFFFFFFFFFFF803FFFFFFFFFFFFFFFFFFFFF000FE000000000 00000000000003F80000000000000000000000FC00000000000000000000007E00000000 000000000000003F00000000000000000000001F80000000000000000000000FC0000000 0000000000000007E00000000000000000000003E00000000000000000000001F0000000 0000000000000000F80000000000000000000000F800000000000000000000007C000000 00000000000000003C00000000000000000000003E00000000000000000000001E000000 00000000000000001E00000000000000000000001F00000000000000000000000F000000 00000000000000000F00000000000000000000000F800000000000000000000007800000 00000000000000000780000000000000000000000780000000000000000059347BB264> 32 D<0000000000000000F00000000000000000000000F00000000000000000000000F0 0000000000000000000000F8000000000000000000000078000000000000000000000078 00000000000000000000007C00000000000000000000003C00000000000000000000003C 00000000000000000000003E00000000000000000000001E00000000000000000000001F 00000000000000000000000F80000000000000000000000F800000000000000000000007 C00000000000000000000003E00000000000000000000003F00000000000000000000001 F80000000000000000000000FC00000000000000000000007E0000000000000000000000 3F00000000000000000000001F80000000000000000000000FE000000000000000000000 03F8007FFFFFFFFFFFFFFFFFFFFE00FFFFFFFFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFFFF FFFF807FFFFFFFFFFFFFFFFFFFFE0000000000000000000003F800000000000000000000 0FE0000000000000000000001F80000000000000000000003F0000000000000000000000 7E0000000000000000000000FC0000000000000000000001F80000000000000000000003 F00000000000000000000003E00000000000000000000007C0000000000000000000000F 80000000000000000000000F80000000000000000000001F00000000000000000000001E 00000000000000000000003E00000000000000000000003C00000000000000000000003C 00000000000000000000007C000000000000000000000078000000000000000000000078 0000000000000000000000F80000000000000000000000F00000000000000000000000F0 0000000000000000000000F000000059347BB264>I<0000000000000300000000000000 0000000007800000000000000000000007C00000000000000000000003C0000000000000 0000000003E00000000000000000000001E00000000000000000000001F0000000000000 0000000000F800000000000000000000007800000000000000000000007C000000000000 00000000003E00000000000000000000001F00000000000000000000000F800000000000 00000000000FC00000000000000000000007E00000000000000000000003F00000007FFF FFFFFFFFFFFFF8000000FFFFFFFFFFFFFFFFFC000000FFFFFFFFFFFFFFFFFE0000007FFF FFFFFFFFFFFFFF00000000000000000000000FC00000000000000000000007E000000000 00000000000003F80000000000000000000000FE00000000000000000000007F80000000 000000000000001FE00000000000000000000007FC0000000000000000000001FF800000 0000000000000001FF8000000000000000000007FC000000000000000000001FE0000000 000000000000007F8000000000000000000000FE0000000000000000000003F800000000 00000000000007E0000000000000000000000FC000007FFFFFFFFFFFFFFFFF000000FFFF FFFFFFFFFFFFFE000000FFFFFFFFFFFFFFFFFC0000007FFFFFFFFFFFFFFFF80000000000 000000000003F00000000000000000000007E0000000000000000000000FC00000000000 00000000000F80000000000000000000001F00000000000000000000003E000000000000 00000000007C0000000000000000000000780000000000000000000000F8000000000000 0000000001F00000000000000000000001E00000000000000000000003E0000000000000 0000000003C00000000000000000000007C0000000000000000000000780000000000000 0000000003000000000059387BB464>41 D<0000001C00000001C00000000000003E0000 0003E00000000000003C00000001E00000000000007C00000001F0000000000000780000 0000F0000000000000F800000000F8000000000000F00000000078000000000001F00000 00007C000000000001E0000000003C000000000003E0000000003E000000000007C00000 00001F00000000000780000000000F00000000000F80000000000F80000000001F000000 000007C0000000003E000000000003E0000000007E000000000003F000000000FFFFFFFF FFFFFFF800000001FFFFFFFFFFFFFFFC00000003FFFFFFFFFFFFFFFE00000007FFFFFFFF FFFFFFFF0000000FC00000000000001F8000001F800000000000000FC000007F00000000 00000007F00000FC0000000000000001F80003F80000000000000000FE000FE000000000 000000003F803FC000000000000000001FE0FF00000000000000000007F8FF0000000000 0000000007F83FC000000000000000001FE00FE000000000000000003F8003F800000000 00000000FE0000FC0000000000000001F800007F0000000000000007F000001F80000000 0000000FC000000FC00000000000001F80000007FFFFFFFFFFFFFFFF00000003FFFFFFFF FFFFFFFE00000001FFFFFFFFFFFFFFFC00000000FFFFFFFFFFFFFFF8000000007E000000 000003F0000000003E000000000003E0000000001F000000000007C0000000000F800000 00000F80000000000780000000000F000000000007C0000000001F000000000003E00000 00003E000000000001E0000000003C000000000001F0000000007C000000000000F00000 000078000000000000F800000000F80000000000007800000000F00000000000007C0000 0001F00000000000003C00000001E00000000000003E00000003E00000000000001C0000 0001C00000005D387DB464>44 D<000000FFFFFF00000007FFFFFF8000003FFFFFFF8000 00FFFFFFFF000003FF800000000007FC00000000001FE000000000003F8000000000007E 000000000000FC000000000001F8000000000003F0000000000007E0000000000007C000 000000000F8000000000001F8000000000001F0000000000003E0000000000003E000000 0000003C0000000000007C0000000000007C00000000000078000000000000F800000000 0000F8000000000000F0000000000000F0000000000000FFFFFFFFFFFF00FFFFFFFFFFFF 80FFFFFFFFFFFF80FFFFFFFFFFFF00F0000000000000F0000000000000F8000000000000 F8000000000000780000000000007C0000000000007C0000000000003C0000000000003E 0000000000003E0000000000001F0000000000001F8000000000000F80000000000007C0 000000000007E0000000000003F0000000000001F8000000000000FC0000000000007E00 00000000003F8000000000001FE0000000000007FC000000000003FF800000000000FFFF FFFF0000003FFFFFFF80000007FFFFFF80000000FFFFFF00313A78B542>50 D<00000000000600000000000F00000000001F00000000001F00000000003E0000000000 3E00000000007C00000000007C0000000000F80000000000F80000000001F00000000001 F00000000003E00000000003E00000000007C00000000007C0000000000F80000000000F 80000000001F00000000001F00000000003E00000000003E00000000007C00000000007C 0000000000F80000000000F80000000001F00000000001F00000000003E00000000003E0 0000000007C00000000007C0000000000F80000000000F80000000001F00000000001F00 000000003E00000000003E00000000007C00000000007C0000000000F80000000000F800 00000001F00000000001F00000000003E00000000003E00000000007C00000000007C000 0000000F80000000000F80000000001F00000000001F00000000003E00000000003E0000 0000007C00000000007C0000000000F80000000000F80000000001F00000000001F00000 000003E00000000003E00000000007C00000000007C0000000000F80000000000F800000 00001F00000000001F00000000003E00000000003E00000000007C00000000007C000000 0000F80000000000F80000000001F00000000001F00000000003E00000000003E0000000 0007C00000000007C0000000000F80000000000F80000000001F00000000001F00000000 003E00000000003E00000000007C00000000007C0000000000F80000000000F800000000 00F00000000000600000000000305C72C600>54 D<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0FCFEFEFCF0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F06007267BAB00>I<7FFFFFFFFFE0 FFFFFFFFFFF0FFFFFFFFFFF07FFFFFFFFFF00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F01FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF07FFFFFFFFFF00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F00000000000F00000000000F0 0000000000F00000000000F00000000000F00000000000F07FFFFFFFFFF0FFFFFFFFFFF0 FFFFFFFFFFF07FFFFFFFFFE02C457BC437>57 D<7FFFFFFFFFFFFCFFFFFFFFFFFFFEFFFF FFFFFFFFFE7FFFFFFFFFFFFE0000000000001E0000000000001E0000000000001E000000 0000001E0000000000001E0000000000001E0000000000001E0000000000001E00000000 00001E0000000000001E0000000000001E0000000000001E0000000000001E0000000000 001E0000000000001E0000000000001E0000000000001E0000000000001E000000000000 1E0000000000001E0000000000001E0000000000001E0000000000000C371B7BA342>I< 000000380000000000007C0000000000007C000000000000FE000000000000FE00000000 0001FF000000000001FF000000000001EF000000000003EF800000000003EF8000000000 07C7C00000000007C7C0000000000F83E0000000000F83E0000000001F01F0000000001F 01F0000000001E00F0000000003E00F8000000003E00F8000000007C007C000000007C00 7C00000000F8003E00000000F8003E00000001F0001F00000001F0001F00000001E0000F 00000003E0000F80000003E0000F80000007C00007C0000007C00007C000000F800003E0 00000F800003E000001F000001F000001F000001F000001E000000F000003E000000F800 003E000000F800007C0000007C00007C0000007C0000F80000003E0000F80000003E0001 F00000001F0001F00000001F0003E00000000F8003E00000000F8003C0000000078007C0 00000007C007C000000007C00F8000000003E00F8000000003E01F0000000001F01F0000 000001F03E0000000000F83E0000000000F83C0000000000787C00000000007C7C000000 00007CF800000000003EF800000000003EF000000000001E6000000000000C373D7BBA42 >94 D<6000000000000CF000000000001EF800000000003EF800000000003E7C00000000 007C7C00000000007C3C0000000000783E0000000000F83E0000000000F81F0000000001 F01F0000000001F00F8000000003E00F8000000003E007C000000007C007C000000007C0 03C0000000078003E00000000F8003E00000000F8001F00000001F0001F00000001F0000 F80000003E0000F80000003E00007C0000007C00007C0000007C00003E000000F800003E 000000F800001E000000F000001F000001F000001F000001F000000F800003E000000F80 0003E0000007C00007C0000007C00007C0000003E0000F80000003E0000F80000001E000 0F00000001F0001F00000001F0001F00000000F8003E00000000F8003E000000007C007C 000000007C007C000000003E00F8000000003E00F8000000001E00F0000000001F01F000 0000001F01F0000000000F83E0000000000F83E00000000007C7C00000000007C7C00000 000003EF800000000003EF800000000001EF000000000001FF000000000001FF00000000 0000FE000000000000FE0000000000007C0000000000007C00000000000038000000373D 7BBA42>I<0000000FE0000000FFE0000003FC0000000FE00000003FC00000007F800000 00FF00000000FE00000001FC00000001FC00000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8 00000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800000003F800000003F800000007F0000000 07F00000000FE00000001FE00000003FC00000007F80000000FE00000007F8000000FFE0 000000FFE000000007F800000000FE000000007F800000003FC00000001FE00000000FE0 00000007F000000007F000000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000001FC00000001FC00000000FE 00000000FF000000007F800000003FC00000000FE000000003FC00000000FFE00000000F E0236479CA32>102 DI<00000C00001E00003E00003E00003C00007C00007C0000 F80000F80000F00001F00001F00003E00003E00003C00007C00007C0000F80000F80000F 00001F00001F00003E00003E00003C00007C00007C0000780000F80000F80001F00001F0 0001E00003E00003E00007C00007C0000780000F80000F80001F00001F00001E00003E00 003E00007C00007C0000780000F80000F80000F80000F800007800007C00007C00003E00 003E00001E00001F00001F00000F80000F800007800007C00007C00003E00003E00001E0 0001F00001F00000F80000F800007800007C00007C00003C00003E00003E00001F00001F 00000F00000F80000F800007C00007C00003C00003E00003E00001F00001F00000F00000 F80000F800007C00007C00003C00003E00003E00001E00000C176476CA27>I<600000F0 0000F80000F800007800007C00007C00003E00003E00001E00001F00001F00000F80000F 800007800007C00007C00003E00003E00001E00001F00001F00000F80000F80000780000 7C00007C00003C00003E00003E00001F00001F00000F00000F80000F800007C00007C000 03C00003E00003E00001F00001F00000F00000F80000F800007C00007C00003C00003E00 003E00003E00003E00003C00007C00007C0000F80000F80000F00001F00001F00003E000 03E00003C00007C00007C0000F80000F80000F00001F00001F00003E00003E00003C0000 7C00007C0000780000F80000F80001F00001F00001E00003E00003E00007C00007C00007 80000F80000F80001F00001F00001E00003E00003E00007C00007C0000780000F80000F8 0000F0000060000017647BCA27>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 F0F0F0F0F0F060046474CA1C>I E /FJ 14 120 df<1F003F807FC0FFE0FFE0FFE0FFE0 FFE07FC03F801F000B0B6C8A33>46 D<000000007800000000F800000001FC00000001FC 00000003FC00000003FC00000007F800000007F80000000FF00000000FF00000001FE000 00001FE00000001FC00000003FC00000003FC00000007F800000007F80000000FF000000 00FF00000001FE00000001FE00000001FC00000003FC00000003FC00000007F800000007 F80000000FF00000000FF00000001FE00000001FE00000001FC00000003FC00000003FC0 0000007F800000007F80000000FF00000000FF00000001FE00000001FE00000001FC0000 0003FC00000003FC00000007F800000007F80000000FF00000000FF00000000FE0000000 1FE00000001FE00000003FC00000003FC00000007F800000007F80000000FF00000000FF 00000000FE00000001FE00000001FE00000003FC00000003FC00000007F800000007F800 00000FF00000000FF00000000FE00000001FE00000001FE00000003FC00000003FC00000 007F800000007F80000000FF00000000FF00000000FE00000000FE000000007C00000000 7C00000000264D7AC433>I<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B2B6CAA33>58 D<000007F8000000003FFF00000000FFFF80000003FFFFE000000FFFFFF000001FFFFFF8 00003FFC0FF800007FE003FC0000FF8001FC0001FF0000FE0003FC00007E0003F8007E7F 0007F801FFBF0007F007FFFF000FE00FFFFF800FC01FFFFF801FC03FFFFF801F803FC3FF 803F807F81FF803F007F00FFC03F00FE007FC07F00FC003FC07E01FC003FC07E01F8001F C07E01F8001FC0FE01F8001FC0FC03F8001FC0FC03F0000FC0FC03F0000FC0FC03F0000F C0FC03F0000FC0FC03F0000FC0FC03F0000FC0FC03F0000FC0FC03F0000FC0FC03F0000F C0FC03F8001FC0FE01F8001F807E01F8001F807E01F8001F807E01FC003F807F00FC003F 003F00FE007F003F007F00FE003F807F81FE001F803FC3FC001FC03FFFFC000FC01FFFF8 000FE00FFFF00007F007FFE00007F801FF800003F8007E000003FC00000F8001FF00001F C000FF80003FC0007FE000FFC0003FFC07FF80001FFFFFFF00000FFFFFFE000003FFFFF8 000000FFFFF00000003FFF8000000007FC00002A3F7CBD33>64 D<001FFC00000000FFFF 80000003FFFFE0000007FFFFF000000FFFFFFC00001FFFFFFE00001FF007FF00001FE001 FF00001FE000FF80001FE0003F80000FC0003FC0000780001FC0000000001FE000000000 0FE0000000000FE0000000000FE0000000000FE0000000000FE00000000FFFE0000001FF FFE000001FFFFFE000007FFFFFE00001FFFFFFE00007FFFF0FE0000FFFC00FE0001FFC00 0FE0003FF0000FE0007FC0000FE0007F80000FE000FF00000FE000FE00000FE000FE0000 0FE000FE00000FE000FE00000FE000FE00000FE000FF00001FE0007F00001FE0007F8000 7FE0003FE000FFF0003FF807FFFFF01FFFFFFFFFF80FFFFFFFFFF807FFFFF3FFF803FFFF C1FFF800FFFF003FF0001FF00000002D2E7BAC33>97 D<0000007FF800000000FFFC0000 0001FFFC00000001FFFC00000000FFFC000000007FFC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC000001FF01FC000007FFC1FC00001FFFF1FC0000 7FFFF9FC0000FFFFFFFC0001FFFFFFFC0003FF81FFFC0007FE003FFC000FF8001FFC000F F0000FFC001FE00007FC001FC00003FC003FC00003FC003F800001FC007F800001FC007F 000001FC007F000001FC00FF000001FC00FE000001FC00FE000001FC00FE000001FC00FE 000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FF 000001FC007F000001FC007F000003FC007F800003FC003F800003FC003FC00007FC003F C00007FC001FE0000FFC001FF0001FFC000FF8003FFC0007FC007FFC0003FF81FFFFF003 FFFFFFFFF800FFFFFDFFFC007FFFF9FFFC003FFFE1FFF8000FFF80FFF00001FE0000002E 3E7DBC33>100 D<3FFC000000007FFE00000000FFFE00000000FFFE000000007FFE0000 00003FFE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000 000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE0000 000000FE01FF000000FE07FFC00000FE1FFFF00000FE7FFFF80000FEFFFFF80000FFFFFF FC0000FFFF07FE0000FFF801FE0000FFF000FE0000FFE000FF0000FFC0007F0000FF8000 7F0000FF80007F0000FF00007F0000FF00007F0000FF00007F0000FE00007F0000FE0000 7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000 7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000 7F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000 7F0000FE00007F0000FE00007F003FFFF80FFFFC7FFFFC1FFFFEFFFFFE3FFFFFFFFFFE3F FFFF7FFFFC1FFFFE3FFFF80FFFFC303D7FBC33>104 D<0000E000000003F800000003F8 00000007FC00000007FC00000007FC00000003F800000003F800000000E0000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000003FFFF800007FFFFC00007FFFFC00007FFFFC00007FFFFC00003F FFFC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001 FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC 00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00 000001FC00000001FC00000001FC00000001FC00000001FC00000001FC00000001FC0000 0001FC00000001FC00000001FC00007FFFFFFFC0FFFFFFFFE0FFFFFFFFF0FFFFFFFFF0FF FFFFFFE07FFFFFFFC0243E78BD33>I<7FF800000000FFFC00000000FFFC00000000FFFC 00000000FFFC000000007FFC0000000000FC0000000000FC0000000000FC0000000000FC 0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC0000000000FC 0000000000FC0000000000FC0000000000FC01FFFFC000FC03FFFFE000FC07FFFFF000FC 07FFFFF000FC03FFFFE000FC01FFFFC000FC000FF00000FC001FE00000FC003FC00000FC 007F800000FC00FF000000FC01FE000000FC03FC000000FC07F8000000FC0FF0000000FC 1FE0000000FC3FC0000000FC7F80000000FCFFC0000000FDFFE0000000FFFFE0000000FF FFF0000000FFF3F8000000FFE3FC000000FFC1FC000000FF80FE000000FF007F000000FE 007F000000FC003F800000FC001FC00000FC001FE00000FC000FE00000FC0007F00000FC 0003F80000FC0003FC0000FC0001FC0000FC0000FE007FFFF80FFFF0FFFFFC1FFFF8FFFF FC1FFFFCFFFFFC1FFFFCFFFFFC1FFFF87FFFF80FFFF02E3D7EBC33>107 D<000001FE00003FFC0FFFC0007FFE1FFFF000FFFE7FFFF800FFFEFFFFFE007FFFFFFFFF 003FFFFE07FF0000FFF800FF8000FFE0007FC000FFC0003FE000FF80001FE000FF80000F F000FF00000FF000FF000007F000FE000007F800FE000003F800FE000003F800FE000003 FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001FC00FE000001 FC00FE000001FC00FE000001FC00FE000001FC00FE000003FC00FE000003F800FE000003 F800FF000007F800FF000007F000FF80000FF000FF80000FE000FFC0001FE000FFC0003F C000FFE0007FC000FFF801FF8000FFFE07FF0000FFFFFFFE0000FEFFFFFC0000FE7FFFF8 0000FE3FFFE00000FE0FFF800000FE03FE000000FE0000000000FE0000000000FE000000 0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000 0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000 003FFFF80000007FFFFC000000FFFFFE000000FFFFFE0000007FFFFC0000003FFFF80000 002E427FAB33>112 D<00000003FE007FFF801FFF80FFFFC07FFFE0FFFFC1FFFFE0FFFF C3FFFFF0FFFFC7FFFFF07FFFCFFE0FF0001FDFF00FF0001FFFC007E0001FFF8003C0001F FF000000001FFE000000001FFC000000001FF8000000001FF8000000001FF0000000001F F0000000001FE0000000001FE0000000001FE0000000001FC0000000001FC0000000001F C0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001F C0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001F C0000000001FC0000000001FC0000000001FC00000007FFFFFFE0000FFFFFFFF0000FFFF FFFF0000FFFFFFFF0000FFFFFFFF00007FFFFFFE00002C2C7DAB33>114 D<0003C00000000007E0000000000FE0000000000FE0000000000FE0000000000FE00000 00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 003FFFFFFFFC007FFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE00FFFFFFFFFE007FFFFFFFFC 00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 00000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE00000 00000FE0000000000FE0000000000FE0000000000FE0001F00000FE0003F80000FE0003F 80000FE0003F80000FE0003F80000FE0003F80000FE0007F80000FF0007F000007F000FF 000007F801FF000007FE07FE000003FFFFFC000001FFFFF8000000FFFFF00000007FFFE0 0000001FFF8000000007FC000029387EB633>116 D<3FFC001FFE007FFE003FFF00FFFE 007FFF00FFFE007FFF007FFE003FFF003FFE001FFF0000FE00007F0000FE00007F0000FE 00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE 00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE 00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE 00007F0000FE00007F0000FE00007F0000FE00007F0000FE00007F0000FE0000FF0000FE 0000FF0000FE0001FF0000FE0001FF0000FF0003FF00007F800FFF00007FE03FFFFC003F FFFFFFFE003FFFFFFFFF001FFFFF7FFF000FFFFE7FFE0003FFF83FFC0000FFC00000302C 7FAA33>I<7FFF8007FFF8FFFFC00FFFFCFFFFE01FFFFCFFFFE01FFFFCFFFFC00FFFFC7F FF8007FFF80FC000000FC00FE000001FC007E000001F8007E000001F8007E000001F8007 E000001F8007E000001F8007F000003F8003F000003F0003F000003F0003F000003F0003 F00FC03F0003F01FE03F0003F01FE03F0001F83FF07E0001F83FF07E0001F83FF07E0001 F87FF87E0001F87CF87E0001F87CF87E0000F87CF87C0000FCFCFCFC0000FCFCFCFC0000 FCFCFCFC0000FCF87CFC0000FCF87CFC00007CF87CF800007DF87EF800007DF03EF80000 7DF03EF800007FF03FF800007FF03FF800003FE01FF000003FE01FF000003FE01FF00000 3FC00FF000000F8007C0002E2B7EAA33>119 D E /FK 85 125 df<0000001FFC000000 00000001FFFFC0000000000007F007F000000000001F8000FC00000000007E00003F0000 000001FC00001FC000000003F0000007E000000007E0000003F00000000FC0000001F800 00001F80000000FC0000003F000000007E0000007F000000007F000000FE000000003F80 0001FC000000001FC00003FC000000001FE00003F8000000000FE00007F8000000000FF0 0007F00000000007F0000FF00000000007F8000FF00000000007F8001FE00000000003FC 001FE00000000003FC003FE00000000003FE003FC00000000001FE003FC00000000001FE 007FC00000000001FF007FC00000000001FF007FC00000000001FF007F800000000000FF 007F8180000000C0FF00FF8180000000C0FF80FF8180000000C0FF80FF81FFFFFFFFC0FF 80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF 80FF81FFFFFFFFC0FF80FF81FFFFFFFFC0FF80FF8180000000C0FF80FF8180000000C0FF 80FF8180000000C0FF80FF800000000000FF807F800000000000FF007FC00000000001FF 007FC00000000001FF007FC00000000001FF003FC00000000001FE003FC00000000001FE 003FE00000000003FE001FE00000000003FC001FE00000000003FC000FE00000000003F8 000FF00000000007F80007F00000000007F00007F8000000000FF00003F8000000000FE0 0003FC000000001FE00001FC000000001FC00000FE000000003F8000007F000000007F00 00007F000000007F0000003F80000000FE0000001FC0000001FC00000007E0000003F000 000003F0000007E000000001FC00001FC0000000007E00003F00000000001F8000FC0000 00000007F007F0000000000001FFFFC00000000000001FFC0000000041487BC54C>2 D<000000FFC001FC0000000FFFF80FFF0000003F803E3F03C00000FC00077E07E00003F8 000FFC0FF00007F0003FF81FF0000FE0007FF01FF0001FC0007FF01FF0003F80007FE01F F0007F00007FE01FF0007F00007FE00FE000FF00003FC0038000FE00001FC0000000FE00 001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 00FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF00000FE00001FC0000000FE00 001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 0000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00 001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC0000000FE00001FC000 0000FE00001FC0000000FE00001FC0000000FE00001FC0000001FF00003FF000007FFFFC 0FFFFFE0007FFFFC0FFFFFE0007FFFFC0FFFFFE0003C467EC539>11 D<000001FF000000000FFFE00000007F80F8000001FC001C000003F8000E000007E0000F 00000FC0007F00001FC000FF80003F8000FF80007F0000FF80007F0000FF8000FF0000FF 8000FE00007F0000FE00003E0000FE0000000000FE0000000000FE0000000000FE000000 0000FE0000000000FE0000000000FE0000000000FE0000000000FE0000000000FE000000 0000FE0000000000FE0000000000FE00003F80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF 8000FE0000FF8000FE00007F8000FE00003F8000FE00003F8000FE00003F8000FE00003F 8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F 8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F 8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F 8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F 8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F 8001FF00007FC07FFFFC1FFFFF7FFFFC1FFFFF7FFFFC1FFFFF30467EC536>I<000001FF C00000000FFFFB8000007F803F800001FC003F800003F800FF800007E000FF80001FC000 FF80001FC000FF80003F8000FF80007F0000FF80007F00007F8000FF00003F8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 3F8000FE00003F8000FE00003F80FFFFFFFFFF80FFFFFFFFFF80FFFFFFFFFF8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE0000 3F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8000FE00003F8001FF0000 7FC07FFFFC1FFFFF7FFFFC1FFFFF7FFFFC1FFFFF30467EC536>I<000000FF80003FE000 0000000FFFF001FFFC000000003F807C0FF01F00000000FC000E3F800380000003F80007 7F0001C0000007F0000FFC0001E000000FE0003FF8000FE000001FC0007FF8001FF00000 3F80007FF0001FF000007F00007FE0001FF000007F00007FE0001FF00000FF00007FE000 1FF00000FE00007FC0000FE00000FE00001FC00007C00000FE00001FC00000000000FE00 001FC00000000000FE00001FC00000000000FE00001FC00000000000FE00001FC0000000 0000FE00001FC00000000000FE00001FC00000000000FE00001FC00000000000FE00001F C00000000000FE00001FC00000000000FE00001FC00000000000FE00001FC00000000000 FE00001FC00007F000FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFFFFF000FFFFFFFFFFFFFF FFF00000FE00001FC0001FF00000FE00001FC0000FF00000FE00001FC00007F00000FE00 001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F0 0000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001F C00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000 FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC000 07F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00 001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F0 0000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001F C00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000 FE00001FC00007F00000FE00001FC00007F00000FE00001FC00007F00000FE00001FC000 07F00001FF00003FE0000FF8007FFFFC0FFFFF83FFFFE07FFFFC0FFFFF83FFFFE07FFFFC 0FFFFF83FFFFE04B467EC551>I<000000000600000000000600000000000C0000000000 1C0000000000180000000000380000000000300000000000600000007F8060000003FFF0 C000000FC0FCC000003E001F8000007C000F800000F00003C00001E00007E00003E00007 F00007C0000CF8000F80000C7C000F8000187C001F8000187E003F0000303F003F000070 3F003F0000603F007F0000E03F807E0000C01F807E0001801F807E0001801F80FE000300 1FC0FE0003001FC0FE0006001FC0FE000E001FC0FE000C001FC0FE001C001FC0FE001800 1FC0FE0030001FC0FE0030001FC0FE0060001FC07E0060001F807E00C0001F807F01C000 3F803F0180003F003F0380003F001F0300003E001F8600007E000F8600007C000FCC0000 FC0007CC0000F80003F80001F00001F80003E00000F80007C000007E001F0000007F807E 000000C7FFF8000000C07F80000001800000000001800000000003000000000007000000 00000600000000000E00000000000C00000000001800000000001800000000002A3F7DB4 31>28 D<1E007F80FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC0FFC07F807F807F807F807F80 7F807F807F807F807F807F807F803F003F003F003F003F003F003F003F003F003F003F00 1E001E001E001E001E001E001E001E001E001E001E001E000C000C000C000C000C000000 0000000000000000000000000000000000001E007F807F80FFC0FFC0FFC0FFC07F807F80 1E000A4778C61B>33 D<1E0003C07F800FF0FF801FF0FFC01FF8FFC01FF8FFE01FFCFFE0 1FFCFFE01FFC7FE00FFC1E6003CC0060000C0060000C0060000C0060000C00E0001C00C0 001800C0001800C0001801C00038018000300380007003000060070000E0060000C00E00 01C01C0003803800070070000E0060000C001E1D7DC431>I<1E007F80FF80FFC0FFC0FF E0FFE0FFE07FE01E60006000600060006000E000C000C000C001C0018003800300070006 000E001C003800700060000B1D78C41B>39 D<00000C00001C0000380000700000E00001 C00003C0000780000F00000F00001E00003C00003C0000780000F80000F00001F00001E0 0003E00003E00007C00007C00007C0000F80000F80000F80001F00001F00001F00003F00 003F00003E00003E00007E00007E00007E00007E00007C00007C00007C0000FC0000FC00 00FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC00 00FC0000FC0000FC0000FC0000FC0000FC00007C00007C00007C00007E00007E00007E00 007E00003E00003E00003F00003F00001F00001F00001F00000F80000F80000F800007C0 0007C00007C00003E00003E00001E00001F00000F00000F800007800003C00003C00001E 00000F00000F000007800003C00001C00000E000007000003800001C00000C166476CA26 >II<0000F000000000F000000000F80000 0000F000000000F000000000F000000000F000000000F000000000F000000000F0000078 00F001E0FC00F003F0FF00F00FF07F80F01FE03FC0F03FC00FF060FF0003F861FC0000FC 63F000003F6FC000000FFF00000003FC00000000F000000003FC0000000FFF0000003F6F C00000FC63F00003F861FC000FF060FF003FC0F03FC07F80F01FE0FF00F00FF0FC00F003 F07800F001E00000F000000000F000000000F000000000F000000000F000000000F00000 0000F000000000F800000000F000000000F00000242B7ACA31>I<00000000C000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E0000000007FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FFFFFFFFFFFFFFFF80 7FFFFFFFFFFFFFFF0000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000001E00000000000000001E000000000 00000001E00000000000000001E00000000000000000C00000000041407BB84C>I<1E00 7F80FF80FFC0FFC0FFE0FFE0FFE07FE01E60006000600060006000E000C000C000C001C0 018003800300070006000E001C003800700060000B1D78891B>II<1E007F807F80FFC0FFC0FFC0FFC0 7F807F801E000A0A78891B>I<0000FF00000007FFE000001F81F800003E007C0000FC00 3F0001F8001F8001F0000F8003E00007C007C00003E007C00003E00FC00003F00F800001 F01F800001F81F800001F83F800001FC3F800001FC3F800001FC3F000000FC7F000000FE 7F000000FE7F000000FE7F000000FE7F000000FEFF000000FFFF000000FFFF000000FFFF 000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF00 0000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF000000FFFF0000 00FFFF000000FFFF000000FFFF000000FFFF000000FF7F000000FE7F000000FE7F000000 FE7F000000FE7F000000FE7F800001FE3F800001FC3F800001FC3F800001FC1F800001F8 1F800001F80FC00003F00FC00003F00FC00003F007E00007E003E00007C003F0000FC001 F8001F8000FC003F00003E007C00001F81F8000007FFE0000000FF000028447CC131>48 D<000030000000F0000001F0000003F000001FF00000FFF000FFFFF000FFE7F000FF07F0 000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 000007F0000007F0000007F0000007F0000007F0000007F0000007F000000FF800001FFC 007FFFFFFF7FFFFFFF7FFFFFFF204278C131>I<0003FE0000001FFFC000007FFFF00001 F80FFC0003C001FE00078000FF000E00007F801C00003FC01C00001FE03800001FF03000 000FF07000000FF860000007F86C000007F8FF000007FCFF800007FCFFC00007FCFFC000 03FCFFC00003FCFFC00003FCFFC00003FC7F800007FC3F000007FC00000007FC00000007 F800000007F80000000FF80000000FF00000001FF00000001FE00000001FE00000003FC0 0000007F800000007F00000000FF00000000FE00000001FC00000003F800000007F00000 0007E00000000FC00000001F800000003F000000007C00000000F800000000F000000001 E000000003C000000007800000000F00000C001E00000C003C00000C0038000018007000 001800E000001801C0000018038000003807000000300E000000701FFFFFFFF01FFFFFFF F03FFFFFFFF07FFFFFFFF0FFFFFFFFE0FFFFFFFFE0FFFFFFFFE026427BC131>I<0001FF 0000000FFFE000003FFFFC0000FE01FE0001F0007F8003C0003FC00700001FE00E00001F E00E00000FF00FE0000FF01FF0000FF81FF0000FF81FF00007F81FF80007F81FF00007F8 1FF00007F80FE0000FF803C0000FF80000000FF00000000FF00000000FF00000001FE000 00001FE00000003FC00000003F800000007F00000000FE00000001FC00000003F0000000 1FC000000FFF0000000FFFF000000001FC000000007F000000003F800000001FC0000000 0FE00000000FF000000007F800000007FC00000003FC00000003FE00000003FE00000001 FE00000001FF00000001FF00000001FF1E000001FF7F800001FFFFC00001FFFFC00001FF FFC00001FFFFC00001FFFFC00001FEFF800003FEFF800003FE7E000003FC70000007FC30 000007F83800000FF81C00000FF00E00001FE00780003FC003E0007F8001FE01FE00007F FFF800000FFFE0000001FF000028447CC131>I<00000003800000000003800000000007 80000000000F80000000000F80000000001F80000000003F80000000003F80000000007F 8000000000FF8000000000FF8000000001FF8000000003BF80000000033F80000000073F 80000000063F800000000C3F800000001C3F80000000183F80000000303F80000000703F 80000000603F80000000C03F80000001C03F80000001803F80000003003F80000007003F 80000006003F8000000C003F8000001C003F80000018003F80000030003F80000070003F 80000060003F800000E0003F800001C0003F80000180003F80000380003F80000300003F 80000600003F80000E00003F80000C00003F80001800003F80003800003F80003000003F 80006000003F8000E000003F8000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFFFFFFC00000003F 80000000003F80000000003F80000000003F80000000003F80000000003F80000000003F 80000000003F80000000003F80000000003F80000000003F80000000003F80000000003F 8000000000FFE00000007FFFFFC000007FFFFFC000007FFFFFC02A437DC231>I<060000 00C007C00007C007FC007F8007FFFFFF0007FFFFFE0007FFFFFC0007FFFFF80007FFFFE0 0007FFFF8000063FFC000006000000000600000000060000000006000000000600000000 060000000006000000000600000000060000000006000000000600000000060000000006 0000000006000000000600FF00000607FFC000061F01F000063800FC0006F0007E0007C0 003F000780001F800780001FC00700000FC00600000FE000000007F000000007F0000000 07F000000007F800000003F800000003F800000003FC00000003FC00000003FC00000003 FC00000003FC3E000003FC7F000003FCFF800003FCFF800003FCFF800003FCFF800003FC FF800003F8FF000007F8FE000007F860000007F060000007F07000000FF03000000FE038 00001FC01C00001FC01E00003F800F00007F00078000FE0003C001FC0001F807F000007F FFE000001FFF00000007F8000026447BC131>I<000007FC0000003FFF000000FFFFC000 03FC03E00007E000F0001FC00038003F000058007E0001FC00FE0003FC00FC0007FC01F8 0007FC03F00007FC03F00007FC07E00003F80FE00001F00FE00000001FC00000001FC000 00001FC00000003F800000003F800000003F800000007F800000007F800000007F007F80 007F01FFF0007F0780FC00FF0E003E00FF1C001F80FF38000FC0FF700007E0FF600007E0 FFE00003F0FFC00003F8FFC00001F8FFC00001FCFF800001FCFF800000FEFF800000FEFF 800000FEFF000000FFFF000000FFFF000000FFFF000000FF7F000000FF7F000000FF7F00 0000FF7F000000FF7F000000FF7F800000FF3F800000FF3F800000FF3F800000FE1F8000 00FE1F800001FE1FC00001FC0FC00001FC0FC00003F807E00003F807E00007F003F00007 E001F8000FC000FC001F80007E003F00003F80FE00000FFFF8000003FFE0000000FF8000 28447CC131>I<1C00000000001C00000000001F80000000001FFFFFFFFFC01FFFFFFFFF C01FFFFFFFFFC03FFFFFFFFF803FFFFFFFFF803FFFFFFFFF003FFFFFFFFE00380000000C 00300000001C0070000000380060000000300060000000700060000000E00060000000C0 00C0000001C000C00000038000C000000700000000000600000000000E00000000001C00 00000000180000000000380000000000700000000000600000000000E00000000001C000 00000001C0000000000380000000000780000000000700000000000F00000000000F0000 0000001F00000000001E00000000003E00000000003E00000000007E00000000007C0000 0000007C0000000000FC0000000000FC0000000001FC0000000001FC0000000001FC0000 000003F80000000003F80000000003F80000000003F80000000007F80000000007F80000 000007F80000000007F80000000007F80000000007F8000000000FF8000000000FF80000 00000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000 00000FF8000000000FF80000000007F00000000001C00000002A457BC231>I<0000FF00 000007FFE000001FFFF800007F00FE0000FC003F0001F0001F8003E0000FC003C00007E0 07C00003F00F800001F00F800001F00F000001F81F000000F81F000000F81F000000F81F 000000F81F800000F81F800000F81FC00001F81FC00001F01FE00001F00FF00003E00FFC 0003E007FE0007C007FF800F8003FFC01F0001FFF03E0001FFF87800007FFEF000003FFF C000001FFFC0000007FFE0000003FFF8000007FFFC00001E7FFF00007C1FFF8000F80FFF C001E003FFE003C001FFF007C0007FF80F80003FFC1F00000FFC3E000007FE3E000001FE 7C000000FE7C000000FF7C0000007FF80000003FF80000003FF80000001FF80000001FF8 0000001FF80000001FF80000001FFC0000001E7C0000003E7C0000003E7E0000003C3E00 00007C1F000000F81F800001F00FC00003E007E00007C003F8001F8000FF00FF00003FFF FC00000FFFF0000001FF800028447CC131>I<0000FF00000007FFE000001FFFF800007F 80FC0000FC007E0001F8003F0003F0001F8007E0000FC00FE00007E01FC00007E01FC000 03F03F800003F03F800003F87F800001F87F000001FC7F000001FCFF000001FCFF000001 FCFF000001FEFF000000FEFF000000FEFF000000FEFF000000FEFF000000FEFF000000FF FF000000FFFF000000FFFF000000FF7F000001FF7F000001FF7F000001FF3F800001FF3F 800003FF1F800003FF1FC00003FF0FC00007FF07E00006FF07E0000EFF03F0001CFF01F8 0038FF007C0070FF003F01E0FF000FFF80FE0001FE00FE00000000FE00000001FE000000 01FC00000001FC00000001FC00000001FC00000003F800000003F800000003F00F800007 F01FC00007E03FE0000FE03FE0000FC03FE0001F803FE0001F803FC0003F003F80007E00 1E0000FC001C0001F8000F0003F00007E01FE00003FFFF800000FFFE0000001FF0000028 447CC131>I<1E007F807F80FFC0FFC0FFC0FFC07F807F801E0000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 1E007F807F80FFC0FFC0FFC0FFC07F807F801E000A2B78AA1B>I<1E007F807F80FFC0FF C0FFC0FFC07F807F801E0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000001E007F00FF80FF80FFC0FFC0FFC0FF C07FC01EC000C000C000C000C000C001C001800180018003800300070006000E000C001C 003800700060000A3E78AA1B>I<7FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FFFFFFFF FFFFFFFF807FFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000007FFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF80FFFFFFFF FFFFFFFF807FFFFFFFFFFFFFFF0041187BA44C>61 D<000FFC0000007FFFC00001F007F0 00078001FC000E0000FE001C00007F003800003F807000003FC06000001FC0FE00001FE0 FF00001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE0FF80001FE07F00001FE01C 00003FC00000003FC00000007F800000007F80000000FF00000001FE00000003F8000000 07F000000007E00000000FC00000001F800000001F000000003E000000003C0000000078 0000000078000000007000000000F000000000E000000000E000000000C000000001C000 000001C000000001C0000000018000000001800000000180000000018000000001800000 000180000000018000000001800000000180000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000003 C00000000FF00000000FF00000001FF80000001FF80000001FF80000001FF80000000FF0 0000000FF000000003C0000023467BC52E>63 D<00000000C00000000000000001E00000 000000000001E00000000000000001E00000000000000003F00000000000000003F00000 000000000003F00000000000000007F80000000000000007F80000000000000007F80000 00000000000FFC000000000000000FFC000000000000000FFC0000000000000019FE0000 000000000019FE0000000000000019FE0000000000000030FF0000000000000030FF0000 000000000070FF80000000000000607F80000000000000607F80000000000000E07FC000 0000000000C03FC0000000000000C03FC0000000000001C03FE0000000000001801FE000 0000000001801FE0000000000003001FF0000000000003000FF0000000000003000FF000 0000000006000FF80000000000060007F80000000000060007F800000000000C0003FC00 000000000C0003FC00000000000C0003FC0000000000180001FE0000000000180001FE00 00000000180001FE0000000000300000FF0000000000300000FF0000000000700000FF80 000000006000007F80000000006000007F8000000000E000007FC000000000FFFFFFFFC0 00000000FFFFFFFFC000000001FFFFFFFFE0000000018000001FE0000000018000001FE0 000000030000001FF0000000030000000FF0000000030000000FF0000000060000000FF8 0000000600000007F80000000600000007F80000000C00000003FC0000000C00000003FC 0000000C00000003FC0000001800000001FE0000001800000001FE0000001800000001FE 0000003000000000FF0000003000000000FF0000007800000000FF800000F800000000FF 800001FC00000000FFC0000FFF00000003FFE000FFFFE000007FFFFFC0FFFFE000007FFF FFC0FFFFE000007FFFFFC042477DC649>65 DI<0000000FFE00 0060000000FFFFC000E0000003FFFFF000E000000FFC01FC01E000003FC0003E01E00000 FF00000F83E00003FC000003C7E00007F8000001E7E0000FF0000000FFE0001FE0000000 7FE0003FC00000003FE0007F800000001FE000FF000000000FE001FE000000000FE001FC 0000000007E003FC0000000007E007F80000000003E007F80000000003E00FF000000000 01E00FF00000000001E01FE00000000000E01FE00000000000E03FE00000000000E03FE0 0000000000E03FC00000000000607FC00000000000607FC00000000000607FC000000000 00607FC0000000000000FF80000000000000FF80000000000000FF80000000000000FF80 000000000000FF80000000000000FF80000000000000FF80000000000000FF8000000000 0000FF80000000000000FF80000000000000FF80000000000000FF80000000000000FF80 000000000000FF800000000000007FC00000000000007FC00000000000007FC000000000 00607FC00000000000603FC00000000000603FE00000000000603FE00000000000601FE0 0000000000E01FF00000000000E00FF00000000000C00FF00000000000C007F800000000 01C007F800000000018003FC00000000038001FC00000000038001FE00000000070000FF 000000000600007F800000000E00003FC00000001C00001FE00000003800000FF0000000 78000007F8000000F0000003FC000001E0000000FF000007800000003FC0001F00000000 0FFC00FC0000000003FFFFF00000000000FFFFC000000000000FFE0000003B487BC546> IIII<0000 000FFE00006000000000FFFFC000E000000003FFFFF000E00000000FFC01FC01E0000000 3FC0003E01E0000000FF00000F83E0000003FC000003C7E0000007F8000001E7E000000F F0000000FFE000001FE00000007FE000003FC00000003FE000007F800000001FE00000FF 000000000FE00001FE000000000FE00001FC0000000007E00003FC0000000007E00007F8 0000000003E00007F80000000003E0000FF00000000001E0000FF00000000001E0001FE0 0000000000E0001FE00000000000E0003FE00000000000E0003FE00000000000E0003FC0 000000000060007FC0000000000060007FC0000000000060007FC0000000000060007FC0 00000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF80 00000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF80 00000000000000FF8000000000000000FF8000000000000000FF8000000000000000FF80 00000000000000FF8000000000000000FF80000001FFFFFFC07FC0000001FFFFFFC07FC0 000001FFFFFFC07FC0000000007FF0007FC0000000003FE0003FC0000000001FE0003FE0 000000001FE0003FE0000000001FE0001FE0000000001FE0001FF0000000001FE0000FF0 000000001FE0000FF0000000001FE00007F8000000001FE00007F8000000001FE00003FC 000000001FE00001FE000000001FE00001FE000000001FE00000FF000000001FE000007F 800000001FE000003FC00000003FE000001FE00000003FE000000FF00000007FE0000007 F8000000E7E0000003FE000001C7E0000000FF00000383E00000003FE0000F01E0000000 0FFC00FE00E000000003FFFFF8006000000000FFFFE00000000000000FFE000000004248 7BC54D>III<000FFFFFFE000FFFFFFE000FFFFFFE000003FF80000001FF00000000FF 00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00 000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF0000 0000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF000000 00FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000 FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF 00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00 000000FF00000000FF00000000FF003F0000FF007F8000FF00FFC000FF00FFC000FF00FF C000FF00FFC000FF00FFC001FE00FF8001FE00FF0001FE006C0003FC00700003F8003800 07F8001C0007F0000E000FE00007001F800003E07F000000FFFC0000001FE0000027467B C332>IIIII<0000001FFC00000000000001FFFFC0000000000007F007F000000000001F8000 FC00000000007E00003F0000000001F800000FC000000003F0000007E000000007E00000 03F00000000FC0000001F80000001F80000000FC0000003F000000007E0000007E000000 003F000000FE000000003F800001FC000000001FC00003F8000000000FE00003F8000000 000FE00007F00000000007F00007F00000000007F0000FF00000000007F8000FE0000000 0003F8001FE00000000003FC001FE00000000003FC003FC00000000001FE003FC0000000 0001FE003FC00000000001FE007FC00000000001FF007FC00000000001FF007F80000000 0000FF007F800000000000FF007F800000000000FF00FF800000000000FF80FF80000000 0000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF80000000 0000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF80000000 0000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF807FC0000000 0001FF007FC00000000001FF007FC00000000001FF007FC00000000001FF003FC0000000 0001FE003FE00000000003FE003FE00000000003FE001FE00000000003FC001FE0000000 0003FC000FF00000000007F8000FF00000000007F80007F8000000000FF00007F8000000 000FF00003F8000000000FE00003FC000000001FE00001FE000000003FC00000FE000000 003F8000007F000000007F0000007F80000000FF0000003F80000000FE0000001FC00000 01FC00000007E0000003F000000003F0000007E000000001FC00001FC0000000007E0000 3F00000000001F8000FC000000000007F007F0000000000001FFFFC00000000000001FFC 0000000041487BC54C>II<0000001FFC0000000000 0001FFFFC0000000000007F007F000000000001F8000FC00000000007E00003F00000000 01FC00001FC000000003F0000007E000000007E0000003F00000000FC0000001F8000000 1F80000000FC0000003F000000007E0000007F000000007F000000FE000000003F800001 FC000000001FC00003FC000000001FE00003F8000000000FE00007F8000000000FF00007 F00000000007F0000FF00000000007F8000FF00000000007F8001FE00000000003FC001F E00000000003FC003FE00000000003FE003FC00000000001FE003FC00000000001FE007F C00000000001FF007FC00000000001FF007FC00000000001FF007F800000000000FF007F 800000000000FF00FF800000000000FF80FF800000000000FF80FF800000000000FF80FF 800000000000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF 800000000000FF80FF800000000000FF80FF800000000000FF80FF800000000000FF80FF 800000000000FF80FF800000000000FF807F800000000000FF007FC00000000001FF007F C00000000001FF007FC00000000001FF003FC00000000001FE003FC00000000001FE003F E00000000003FE001FE00000000003FC001FE00000000003FC000FE00000000003F8000F F00000000007F80007F00000000007F00007F80003F0000FF00003F8000FFC000FE00003 FC001C0E001FE00001FC003807001FC00000FE003003803F8000007F007001807F000000 7F006000C07F0000003F806000C0FE0000001FC06000E1FC00000007E0600063F0000000 03F0600077E000000001FC70007FC0000000007E30007F00000000001FB800FC00000000 0007FC07F80000C0000001FFFFFC0000C00000001FFC3C0000C000000000003C0000C000 000000003E0001C000000000001E0001C000000000001F0003C000000000001F00038000 000000001F80078000000000001FC00F8000000000000FF03F8000000000000FFFFF0000 000000000FFFFF00000000000007FFFF00000000000007FFFE00000000000003FFFC0000 0000000003FFFC00000000000001FFF8000000000000007FE0000000000000001F800042 597BC54C>II<0001FF0003 00000FFFE00700003FFFF8070000FE00FE0F0001F8001F0F0007E000079F0007C00003DF 000F800001FF001F000000FF003F0000007F003E0000003F007E0000003F007E0000001F 007C0000001F00FC0000000F00FC0000000F00FC0000000700FC0000000700FC00000007 00FE0000000700FE0000000300FE0000000300FF0000000300FF00000003007F80000000 007FC0000000007FE0000000003FF8000000003FFE000000001FFFE00000000FFFFE0000 0007FFFFE0000003FFFFFC000001FFFFFF000000FFFFFFC000003FFFFFF000000FFFFFF8 000001FFFFFC0000001FFFFE00000001FFFE000000001FFF0000000003FF8000000001FF 8000000000FFC0000000007FC0000000003FC0000000001FC0000000001FE0C00000000F E0C00000000FE0C00000000FE0C000000007E0C000000007E0C000000007E0E000000007 E0E000000007E0E000000007E0F000000007C0F00000000FC0F80000000FC0F80000000F 80FC0000001F80FE0000001F00FF0000003F00FF8000007E00FBC00000FC00F9F00001F8 00F07C0003F000F03FC00FE000E00FFFFF8000E001FFFE0000C0003FF000002B487BC536 >I<3FFFFFFFFFFFFFF83FFFFFFFFFFFFFF83FFFFFFFFFFFFFF83FF0001FF8001FF83F80 000FF00003F83E00000FF00000F87C00000FF000007C7800000FF000003C7800000FF000 003C7000000FF000001C7000000FF000001C7000000FF000001C6000000FF000000C6000 000FF000000C6000000FF000000C6000000FF000000C6000000FF000000CC000000FF000 0006C000000FF0000006C000000FF0000006C000000FF0000006C000000FF00000060000 000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 00000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000 000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF000 00000000001FF80000000000007FFE0000000001FFFFFFFF80000001FFFFFFFF80000001 FFFFFFFF80003F447DC346>IIII89 D91 D<00C0001801C0003803800070070000E00E0001C00C000180 1C00038018000300380007003000060070000E0060000C0060000C0060000C00E0001C00 C0001800C0001800C0001800C0001800CF0019E0FFC01FF8FFE01FFCFFE01FFCFFE01FFC 7FE00FFC7FE00FFC3FE007FC3FC007F80F0001E01E1D71C431>II<0007FC000000003FFF80000000F80FE00000 03C003F00000070001F800000E0000FC00000FC0007E00001FE0007F00001FF0003F8000 1FF0003F80001FF0003F80001FF0001FC0001FF0001FC0000FE0001FC0000380001FC000 0000001FC0000000001FC0000000001FC0000000001FC00000000FFFC0000001FFFFC000 000FFE1FC000003FC01FC00000FF001FC00003FC001FC00007F8001FC0000FF0001FC000 1FE0001FC0003FC0001FC0007FC0001FC0007F80001FC0007F80001FC060FF00001FC060 FF00001FC060FF00001FC060FF00003FC060FF00003FC060FF00003FC060FF80007FC060 7F8000EFC0607FC000C7E0C03FC001C7E0C01FE00783F1C007F81E03FF8001FFFC01FF00 001FE0007C002B2E7CAC31>97 D<01FC00000000FFFC00000000FFFC00000000FFFC0000 000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC03FC000001FC0FFF800001FC3C07 E00001FC7001F80001FDE0007E0001FD80003F0001FF80001F8001FF00001FC001FE0000 0FE001FC000007E001FC000007F001FC000007F001FC000003F801FC000003F801FC0000 03FC01FC000003FC01FC000001FC01FC000001FE01FC000001FE01FC000001FE01FC0000 01FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC0000 01FE01FC000001FE01FC000001FC01FC000003FC01FC000003FC01FC000003F801FC0000 03F801FC000007F001FC000007F001FE00000FE001FE00000FC001FF00001FC001FB0000 3F8001F380007E0001E1C000FC0001E0F001F80001C03C07E00001801FFF8000000003FC 00002F467DC436>I<00007F80000003FFF000000FC07C00003F000F0000FC00038001F8 0001C003F8000FC007F0001FE007E0003FE00FE0003FE01FC0003FE01FC0003FE03F8000 3FE03F80001FC07F800007007F800000007F800000007F00000000FF00000000FF000000 00FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000 FF00000000FF000000007F000000007F800000007F800000003F800000003F800000303F C00000301FC00000700FE00000600FE00000E007F00000C003F80001C001F800038000FC 000700003F001E00001FC078000007FFF0000000FF8000242E7DAC2B>I<000000007F00 0000003FFF000000003FFF000000003FFF0000000001FF0000000000FF00000000007F00 000000007F00000000007F00000000007F00000000007F00000000007F00000000007F00 000000007F00000000007F00000000007F00000000007F00000000007F00000000007F00 000000007F00000000007F00000000007F00000000007F00000000007F00000000007F00 00007F807F000003FFF07F00000FC07C7F00003F000E7F00007E00077F0000FC0003FF00 03F80001FF0007F00000FF0007E00000FF000FE000007F001FC000007F001FC000007F00 3F8000007F003F8000007F007F8000007F007F8000007F007F0000007F00FF0000007F00 FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00 FF0000007F00FF0000007F00FF0000007F00FF0000007F007F0000007F007F8000007F00 7F8000007F003F8000007F003F8000007F001FC000007F001FC000007F000FC00000FF00 0FE00000FF0007F00001FF0003F00003FF0001F800077F8000FC000E7FC0003F001C7FFE 000FC0F87FFE0003FFE07FFE00007F007F002F467DC436>I<0001FE00000007FFC00000 1F03F000007E00FC0000FC007E0001F8003F0003F0003F0007E0001F800FE0001FC00FC0 000FC01FC0000FC03F80000FE03F800007E03F800007E07F800007F07F000007F07F0000 07F0FF000007F0FF000007F0FF000007F0FFFFFFFFF0FFFFFFFFF0FF00000000FF000000 00FF00000000FF00000000FF00000000FF000000007F000000007F000000007F80000000 7F800000003F800000003F800000301FC00000301FC00000700FC00000600FE00000E007 F00000C003F00001C001F800038000FC000700003E001E00001F80F8000003FFE0000000 FF0000242E7DAC2B>I<00000FE00000007FF8000001F81E000003F03F00000FE07F8000 1FC0FF80001F80FF80003F80FF80007F00FF80007F00FF80007F007F0000FE001C0000FE 00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00 000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000 00FFFFFF8000FFFFFF8000FFFFFF800000FE00000000FE00000000FE00000000FE000000 00FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000 FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE 00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00 000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000 0000FE00000000FE00000000FE00000001FF8000007FFFFF00007FFFFF00007FFFFF0000 21467EC51E>I<000000000F800001FC007FE0000FFF81F0F0003F07E381F000FC01FF03 F001F800FE01F003F0007E01E007F0007F000007E0003F00000FE0003F80000FC0001F80 001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0 001FC0001FC0001FC0001FC0001FC0001FC0000FC0001F80000FE0003F800007E0003F00 0007F0007F000003F0007E000001F800FC000001FC01F8000003BF07E00000030FFF8000 000701FC0000000700000000000700000000000F00000000000F00000000000F00000000 000F800000000007C00000000007E00000000007FFFFF8000003FFFFFF000003FFFFFFE0 0001FFFFFFF800007FFFFFFC0001FFFFFFFE0007C0000FFF000F800000FF003F0000003F 803E0000001F807C0000000FC07C0000000FC0F800000007C0F800000007C0F800000007 C0F800000007C0F800000007C0FC0000000FC07C0000000F807E0000001F803E0000001F 001F0000003E000F8000007C0007E00001F80001F80007E000007F003F8000001FFFFE00 000001FFE000002C427DAC31>I<01FC00000000FFFC00000000FFFC00000000FFFC0000 000007FC0000000003FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC01FE000001FC07FFC00001FC1E07 F00001FC3801F80001FC7001FC0001FCE000FC0001FDC000FE0001FD8000FE0001FF8000 7F0001FF00007F0001FF00007F0001FE00007F0001FE00007F0001FE00007F0001FC0000 7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 7F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC0000 7F0001FC00007F0003FE0000FF80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F457DC4 36>I<01E00007F80007F8000FFC000FFC000FFC000FFC0007F80007F80001E000000000 000000000000000000000000000000000000000000000000000000000000000000000000 01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC0001FC0001FC0001FC0001FC0001FC00 01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 01FC0001FC0001FC0001FC0003FE00FFFFF8FFFFF8FFFFF815437DC21C>I<00003C0000 00FF000000FF000001FF800001FF800001FF800001FF800000FF000000FF0000003C0000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000007F80003FFF80003FFF80003FFF800000FF8000 007F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000003F8000 003F8000003F803E003F807F003F80FF807F00FF807F00FF807E00FF807E00FF80FC007F 00F8003C01F0001E03E00007FF800001FE0000195785C21E>I<01FC00000000FFFC0000 0000FFFC00000000FFFC0000000007FC0000000003FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC0000 000001FC001FFFE001FC001FFFE001FC001FFFE001FC000FFF0001FC0007F80001FC0007 E00001FC0007C00001FC0007800001FC000E000001FC001C000001FC0038000001FC0070 000001FC00E0000001FC01C0000001FC0380000001FC0700000001FC0F00000001FC3F80 000001FC7FC0000001FCFFC0000001FDCFE0000001FF8FF0000001FF07F0000001FE03F8 000001FC03FC000001FC01FC000001FC00FE000001FC00FF000001FC007F000001FC003F 800001FC003FC00001FC001FC00001FC000FE00001FC000FF00001FC0007F00001FC0007 F80001FC0003FC0001FC0003FE0001FC0003FF0003FE0007FF80FFFFF81FFFF8FFFFF81F FFF8FFFFF81FFFF82D457DC433>I<01FC00FFFC00FFFC00FFFC0007FC0003FC0001FC00 01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC00 01FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0001FC0003FE00FFFFF8 FFFFF8FFFFF815457DC41C>I<01FC00FF00001FE00000FFFC07FFE000FFFC0000FFFC0F 03F801E07F0000FFFC3C01FC07803F800007FC7000FE0E001FC00003FCE0007E1C000FC0 0001FDC0007F38000FE00001FD80007F30000FE00001FF80003FF00007F00001FF00003F E00007F00001FF00003FE00007F00001FE00003FC00007F00001FE00003FC00007F00001 FE00003FC00007F00001FC00003F800007F00001FC00003F800007F00001FC00003F8000 07F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00 003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F0 0001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F 800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001 FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00003F8000 07F00001FC00003F800007F00001FC00003F800007F00001FC00003F800007F00001FC00 003F800007F00001FC00003F800007F00003FE00007FC0000FF800FFFFF81FFFFF03FFFF E0FFFFF81FFFFF03FFFFE0FFFFF81FFFFF03FFFFE04B2C7DAB52>I<01FC01FE0000FFFC 07FFC000FFFC1E07F000FFFC3801F80007FC7001FC0003FCE000FC0001FDC000FE0001FD 8000FE0001FF80007F0001FF00007F0001FF00007F0001FE00007F0001FE00007F0001FE 00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC 00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC 00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC 00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC 00007F0001FC00007F0001FC00007F0003FE0000FF80FFFFF83FFFFEFFFFF83FFFFEFFFF F83FFFFE2F2C7DAB36>I<00007F8000000003FFF00000000FC0FC0000003E001F000000 7C000F800000F80007C00001F00003E00003E00001F00007C00000F8000FC00000FC000F C00000FC001F8000007E003F8000007F003F8000007F003F0000003F007F0000003F807F 0000003F807F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF 0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF 0000003FC07F0000003F807F0000003F807F8000007F803F8000007F003F8000007F001F 8000007E001FC00000FE000FC00000FC000FE00001FC0007E00001F80003F00003F00001 F80007E00000FC000FC000003E001F0000001FC0FE00000007FFF8000000007F8000002A 2E7DAC31>I<01FC03FC0000FFFC0FFF8000FFFC3C07E000FFFC7001F80007FDE000FE00 01FD80007F0001FF80003F8001FF00001FC001FE00001FE001FC00000FE001FC00000FF0 01FC000007F001FC000007F801FC000003F801FC000003FC01FC000003FC01FC000003FC 01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE 01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000001FE01FC000003FC 01FC000003FC01FC000003FC01FC000007F801FC000007F801FC000007F001FC00000FF0 01FE00000FE001FE00001FC001FF00003FC001FF00003F8001FF80007E0001FDC000FC00 01FCF003F80001FC3C0FE00001FC1FFF800001FC03FC000001FC0000000001FC00000000 01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000 01FC0000000001FC0000000001FC0000000001FC0000000001FC0000000001FC00000000 03FE00000000FFFFF8000000FFFFF8000000FFFFF80000002F3F7DAB36>I<00007F8003 000003FFE00700000FE0780700003F801C0F00007E000E0F0000FC00071F0003F800039F 0007F80001BF0007F00001FF000FE00000FF001FE00000FF001FC00000FF003FC000007F 003FC000007F007F8000007F007F8000007F007F8000007F00FF0000007F00FF0000007F 00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F00FF0000007F 00FF0000007F00FF0000007F00FF0000007F007F8000007F007F8000007F007F8000007F 003F8000007F003FC000007F001FC000007F001FE00000FF000FE00000FF000FF00001FF 0007F00001FF0003F80003FF0001FC00077F0000FE000E7F00003F001C7F00000FC0F87F 000003FFE07F0000007F007F00000000007F00000000007F00000000007F00000000007F 00000000007F00000000007F00000000007F00000000007F00000000007F00000000007F 00000000007F00000000007F00000000007F00000000007F0000000000FF800000003FFF FE0000003FFFFE0000003FFFFE2F3F7DAB33>I<03F803F0FFF81FFCFFF83C3EFFF8707F 07F8E0FF03F9C0FF01F980FF01FB80FF01FB007E01FB003C01FF000001FE000001FE0000 01FE000001FE000001FC000001FC000001FC000001FC000001FC000001FC000001FC0000 01FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0000 01FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC000001FC0000 03FF0000FFFFFE00FFFFFE00FFFFFE00202C7DAB26>I<003FE01801FFFC3807E01F780F 0003F81E0001F83C0000F87C00007878000078F8000038F8000038F8000018F8000018FC 000018FC000018FE000018FF8000007FC000007FFC00003FFFE0001FFFFC000FFFFF0007 FFFFC003FFFFE000FFFFF0001FFFF80000FFF800000FFC000003FCC00001FEC00000FEC0 00007EE000007EE000003EE000003EF000003EF000003EF000003EF800003CFC00007CFC 000078FE0000F8FF0001F0F38003E0F1F00F80E07FFE00C00FF0001F2E7DAC26>I<0006 000000060000000600000006000000060000000E0000000E0000000E0000000E0000001E 0000001E0000001E0000003E0000007E0000007E000000FE000001FE000007FE00001FFF FFF0FFFFFFF0FFFFFFF000FE000000FE000000FE000000FE000000FE000000FE000000FE 000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE 000000FE000000FE000000FE000000FE000000FE000000FE000000FE000C00FE000C00FE 000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C00FE000C007E001C007F 0018007F0018003F0038001F8030001FC0700007E0E00001FFC000007F001E3E7EBC26> I<01FC00007F00FFFC003FFF00FFFC003FFF00FFFC003FFF0007FC0001FF0003FC0000FF 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F 0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F0001FC00007F 0001FC00007F0001FC00007F0001FC0000FF0001FC0000FF0001FC0000FF0001FC0001FF 0001FC0001FF0000FC0001FF0000FE0003FF00007E00077F80007F000E7FC0003F001C7F FE000FC0787FFE0003FFF07FFE00007F807F002F2D7DAB36>IIIII<3FFFFFFFE03FFFFFFFE03FC0003FE03F0000 3FC03C00007F80380000FF00380000FF00300001FE00700003FC00700003FC00700007F8 0060000FF00060000FF00060001FE00060003FC00060003FC00000007F80000000FF0000 0001FF00000001FE00000003FC00000007FC00000007F80000000FF00000001FF0000000 1FE00060003FC00060007F800060007F80006000FF0000C001FE0000C001FE0000C003FC 0000C007F80000C007F80001C00FF00001C01FE00003C01FE00003C03FC00007807F8000 1F80FF8000FF80FFFFFFFF80FFFFFFFF80232B7DAA2B>III E /FL 17 121 df<0F003FC07FE0FFF0FFF0FFF0FFF0FFF0FFF07FE03FC00F00 0C0C768B21>46 D<00001FF800000000FFFF00000003FFFFC000000FF81FF000001FC003 F800003F8001FC00007E00007E0000FC00003F0001FC00003F8001F800001F8003F00000 0FC007F000000FE007E0000007E00FE0000007F00FE0000007F00FE0000007F01FC00000 03F81FC0000003F83FC0000003FC3FC0000003FC3FC0000003FC3FC0000003FC7F800000 01FE7F80000001FE7F80000001FE7F80000001FE7F80000001FE7F80000001FE7F800000 01FEFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF800000 01FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF800000 01FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF800000 01FFFF80000001FFFF80000001FFFF80000001FFFF80000001FFFF80000001FF7F800000 01FE7F80000001FE7F80000001FE7F80000001FE7F80000001FE7FC0000003FE7FC00000 03FE3FC0000003FC3FC0000003FC3FC0000003FC3FC0000003FC1FC0000003F81FC00000 03F81FE0000007F80FE0000007F00FE0000007F007F000000FE007F000000FE003F80000 1FC003F800001FC001FC00003F8000FE00007F00007F0000FE00003F8001FC00001FC003 F800000FF81FF0000003FFFFC0000000FFFF000000001FF8000030517BCE3B>48 D<000007000000000F000000001F000000007F00000000FF00000007FF0000003FFF0000 0FFFFF0000FFFFFF0000FFF9FF0000FFC1FF0000F001FF00000001FF00000001FF000000 01FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001 FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF 00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00 000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF0000 0001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF000000 01FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001 FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF 00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00000001FF00 000001FF00000003FF8000000FFFE000FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE 274F75CE3B>I<7FFFFFFFFFFFFFFFFFF8FFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFF FCFFFFFFFFFFFFFFFFFFFC7FFFFFFFFFFFFFFFFFF8000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000007FFFFFFFFF FFFFFFFFF8FFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFFFC7F FFFFFFFFFFFFFFFFF84E1D7AAB5B>61 D<000000000380000000000000000007C0000000 000000000007C0000000000000000007C000000000000000000FE000000000000000000F E000000000000000000FE000000000000000001FF000000000000000001FF00000000000 0000001FF000000000000000003FF800000000000000003FF800000000000000003FF800 000000000000007FFC00000000000000007FFC0000000000000000FFFE00000000000000 00E7FE0000000000000000E7FE0000000000000001E7FF0000000000000001C3FF000000 0000000001C3FF0000000000000003C3FF800000000000000381FF800000000000000381 FF800000000000000701FFC00000000000000700FFC00000000000000700FFC000000000 00000E00FFE00000000000000E007FE00000000000000E007FE00000000000001C007FF0 0000000000001C003FF00000000000001C003FF000000000000038001FF8000000000000 38001FF800000000000078001FFC00000000000070000FFC00000000000070000FFC0000 00000000F0000FFE000000000000E00007FE000000000000E00007FE000000000001E000 07FF000000000001C00003FF000000000001C00003FF000000000003800003FF80000000 0003800001FF800000000003800001FF800000000007000001FFC00000000007000000FF C00000000007000000FFC0000000000E000000FFE0000000000E0000007FE0000000000E 0000007FE0000000001C0000003FF0000000001FFFFFFFFFF0000000003FFFFFFFFFF800 0000003FFFFFFFFFF8000000003FFFFFFFFFF800000000780000001FFC00000000700000 000FFC00000000700000000FFC00000000F00000000FFE00000000E000000007FE000000 00E000000007FE00000001C000000007FF00000001C000000003FF00000001C000000003 FF000000038000000003FF800000038000000001FF800000038000000001FF8000000700 00000000FFC00000070000000000FFC000000F0000000000FFE000000E00000000007FE0 00000E00000000007FE000001E00000000007FF000001E00000000003FF000003E000000 00003FF000007F00000000003FF80001FF80000000007FFC000FFFE000000001FFFE00FF FFFE0000007FFFFFFEFFFFFE0000007FFFFFFEFFFFFE0000007FFFFFFEFFFFFE0000007F FFFFFE4F557CD458>65 D72 D82 D<0000000000FF000000000001FFFF000000000001FFFF000000000001FFFF0000000000 01FFFF00000000000007FF00000000000001FF00000000000000FF00000000000000FF00 000000000000FF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FF00000000000000FF00000000000000FF00000000000000FF0000000000 0000FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00 000000000000FF00000000000000FF00000000000000FF00000000000000FF000000000F F800FF000000007FFF00FF00000001FFFFE0FF00000007FC03F0FF0000001FE0007CFF00 00003FC0003EFF0000007F00000FFF000000FE000007FF000001FC000003FF000003F800 0003FF000007F8000001FF00000FF0000000FF00000FF0000000FF00001FE0000000FF00 001FE0000000FF00003FC0000000FF00003FC0000000FF00007FC0000000FF00007FC000 0000FF00007FC0000000FF00007F80000000FF0000FF80000000FF0000FF80000000FF00 00FF80000000FF0000FF80000000FF0000FF80000000FF0000FF80000000FF0000FF8000 0000FF0000FF80000000FF0000FF80000000FF0000FF80000000FF0000FF80000000FF00 007F80000000FF00007F80000000FF00007FC0000000FF00007FC0000000FF00003FC000 0000FF00003FC0000000FF00003FE0000000FF00001FE0000000FF00001FE0000000FF00 000FF0000001FF000007F0000003FF000007F8000003FF000003FC000007FF000001FE00 000FFF000000FF00001EFF8000007F80007CFFE000001FC000F8FFFF80000FF807E0FFFF 800003FFFF80FFFF800000FFFE00FFFF8000001FF000FF000039547CD241>100 D<00000FF800000000FFFF00000003FFFFC000000FF80FF000001FC003FC00007F8001FE 0000FF0000FF0001FE00007F8003FC00003F8003F800001FC007F000001FC00FF000000F E00FE000000FE01FE000000FF01FE0000007F03FC0000007F03FC0000007F07FC0000007 F87FC0000007F87F80000007F87F80000003F8FF80000003F8FFFFFFFFFFF8FFFFFFFFFF F8FFFFFFFFFFF8FF8000000000FF8000000000FF8000000000FF8000000000FF80000000 00FF8000000000FF8000000000FF80000000007F80000000007FC0000000007FC0000000 003FC0000000003FC0000000003FE0000000381FE0000000381FE0000000780FF0000000 7007F0000000F007F8000000E003FC000001E001FE000003C000FF00000380007F80000F 80003FC0001F00000FF0003C000007FE01F8000001FFFFE00000007FFF8000000007FC00 002D367DB434>I<0000007F00000003FFE000000FFFF000003FC0F800007F01FC0001FE 03FE0003FC07FE0003F807FE0007F807FE000FF007FE000FF007FE001FE003FC001FE001 F8001FE00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000 003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000000 3FC00000003FC00000003FC00000003FC00000003FC00000003FC00000FFFFFFFE00FFFF FFFE00FFFFFFFE00FFFFFFFE00003FC00000003FC00000003FC00000003FC00000003FC0 0000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC000 00003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000 003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000000 3FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003F C00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0 0000003FE0000000FFF000007FFFFFF8007FFFFFF8007FFFFFF8007FFFFFF80027547DD3 24>I<0078000001FE000003FF000007FF800007FF800007FF800007FF800007FF800007 FF800003FF000001FE000000780000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000007F8000FFFF8000FFFF8000FFFF8000FFFF800003FF800000FF800000 7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 7F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800000 7F8000007F8000007F8000007F800001FFE000FFFFFF80FFFFFF80FFFFFF80FFFFFF8019 507CCF21>105 D<00FF8000000000FFFF8000000000FFFF8000000000FFFF8000000000 FFFF800000000003FF800000000000FF8000000000007F8000000000007F800000000000 7F8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F 8000000000007F8000000000007F8000000000007F8000000000007F8000000000007F80 00000000007F8000000000007F8000000000007F8000000000007F8000000000007F8000 000000007F8000000000007F8000000000007F8000000000007F8000000000007F800000 0000007F8000000000007F8000000000007F8000FFFFF8007F8000FFFFF8007F8000FFFF F8007F8000FFFFF8007F80003FFF80007F80001FFC00007F80001FF000007F80001FC000 007F80001F0000007F80003E0000007F80007C0000007F8000F80000007F8001F0000000 7F8003E00000007F8007800000007F800F000000007F801E000000007F803C000000007F 80FC000000007F81FC000000007F83FE000000007F87FF000000007F8FFF000000007F9E FF800000007FBC7FC00000007FF83FC00000007FF03FE00000007FE01FF00000007FC00F F00000007F800FF80000007F0007FC0000007F0003FE0000007F0003FE0000007F0001FF 0000007F0000FF8000007F00007F8000007F00007FC000007F00003FE000007F00001FE0 00007F00001FF000007F00000FF800007F000007F800007F000007FC00007F000003FE00 007F000003FF00007F000003FF8001FFC00007FFE0FFFFFF803FFFFFFFFFFF803FFFFFFF FFFF803FFFFFFFFFFF803FFFFF38537DD23E>107 D<00FF0007FC000000FFFF003FFF80 0000FFFF00FFFFE00000FFFF01F00FF80000FFFF03C007FC000003FF070003FE000000FF 0E0001FE0000007F1C0000FF0000007F380000FF0000007F300000FF0000007F7000007F 8000007F6000007F8000007FE000007F8000007FC000007F8000007FC000007F8000007F C000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F 8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F 8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F 8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F 8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F 8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F 8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F 800001FFE00001FFE000FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFFFFC0FFFF FFC0FFFFFFC03A347CB341>110 D<00000FFC00000000007FFF8000000001FFFFE00000 0007F807F80000001FE001FE0000003F80007F0000007E00001F800000FC00000FC00001 F8000007E00003F8000007F00007F0000003F80007F0000003F8000FE0000001FC000FE0 000001FC001FC0000000FE001FC0000000FE003FC0000000FF003FC0000000FF007F8000 00007F807F800000007F807F800000007F807F800000007F80FF800000007FC0FF800000 007FC0FF800000007FC0FF800000007FC0FF800000007FC0FF800000007FC0FF80000000 7FC0FF800000007FC0FF800000007FC0FF800000007FC0FF800000007FC07F800000007F 807F800000007F807FC0000000FF807FC0000000FF803FC0000000FF003FC0000000FF00 1FC0000000FE001FE0000001FE000FE0000001FC000FF0000003FC0007F0000003F80003 F8000007F00001FC00000FE00001FC00000FE000007F00003F8000003F80007F0000001F E001FE00000007F807F800000003FFFFF0000000007FFF80000000000FFC00000032367C B43B>I<00FF001F80FFFF007FF0FFFF01FFF8FFFF03E1FCFFFF0783FE03FF0F07FE00FF 1E07FE007F1C07FE007F3807FE007F3007FE007F7003FC007F6000F0007F600000007FE0 0000007FC00000007FC00000007FC00000007FC00000007F800000007F800000007F8000 00007F800000007F800000007F800000007F800000007F800000007F800000007F800000 007F800000007F800000007F800000007F800000007F800000007F800000007F80000000 7F800000007F800000007F800000007F800000007F800000007F800000007F800000007F 800000007F800000007F800000007F800000007FC0000001FFE00000FFFFFFF000FFFFFF F000FFFFFFF000FFFFFFF00027347DB32E>114 D<0007FE00C0007FFF81C001FFFFE3C0 07F803FFC00FC0007FC01F80003FC03F00001FC03E00000FC07E000007C07C000007C0FC 000003C0FC000003C0FC000003C0FC000001C0FE000001C0FE000001C0FF000001C0FF80 0001C07FC00000007FF00000007FFF0000003FFFF800001FFFFF80000FFFFFE00007FFFF F80003FFFFFE0000FFFFFF00003FFFFF800007FFFFC000003FFFE0000003FFE00000007F F00000001FF0E000000FF0E0000007F8E0000007F8F0000003F8F0000003F8F0000001F8 F8000001F8F8000001F8F8000001F8FC000001F0FC000001F0FE000003F0FF000003E0FF 000007E0FF80000FC0FFC0001F80FDF0003F00F8FC01FE00F07FFFF800E01FFFE000C003 FF000025367CB42E>I<7FFFFF800FFFFF807FFFFF800FFFFF807FFFFF800FFFFF807FFF FF800FFFFF8000FFFC0003FFF000003FF80001FF8000001FF80001FE0000000FF80001F8 00000007F80001F000000003FC0001E000000003FE0003C000000001FF00038000000000 FF000780000000007F800F00000000007FC01E00000000003FE03C00000000001FE03800 000000000FF07800000000000FF8F0000000000007FDE0000000000003FDC00000000000 01FFC0000000000001FF80000000000000FF800000000000007F800000000000003FC000 00000000003FE00000000000007FF0000000000000FFF0000000000000E7F80000000000 01E7FC000000000003C3FE00000000000781FE00000000000F00FF00000000000E00FF80 000000001E007FC0000000003C003FC00000000078001FE000000000F0001FF000000000 F0000FF800000001E00007F800000003C00003FC00000007C00003FE0000000FC00001FF 0000003FC00001FF800000FFC00001FFC00007FFE00007FFF000FFFFF8001FFFFFE0FFFF F8001FFFFFE0FFFFF8001FFFFFE0FFFFF8001FFFFFE03B337FB23E>120 D E /FM 18 122 df[<0000000000000000F000000000000000000000000000000001F8 00000000000000000000000000000003FC00000000000000000000000000000003FC0000 0000000000000000000000000003FC00000000000000000000000000000007FE00000000 000000000000000000000007FE00000000000000000000000000000007FE000000000000 0000000000000000000FFF0000000000000000000000000000000FFF0000000000000000 000000000000000FFF0000000000000000000000000000001FFF80000000000000000000 00000000001FFF8000000000000000000000000000001FFF800000000000000000000000 0000003FFFC000000000000000000000000000003FFFC000000000000000000000000000 003FFFC000000000000000000000000000007FFFE000000000000000000000000000007F FFE000000000000000000000000000007FFFE00000000000000000000000000000FFFFF0 0000000000000000000000000000FBFFF00000000000000000000000000001FBFFF80000 000000000000000000000001F3FFF80000000000000000000000000001F1FFF800000000 00000000000000000003F1FFFC0000000000000000000000000003E1FFFC000000000000 0000000000000003E0FFFC0000000000000000000000000007E0FFFE0000000000000000 000000000007C0FFFE0000000000000000000000000007C07FFE00000000000000000000 0000000FC07FFF000000000000000000000000000F803FFF000000000000000000000000 000F803FFF000000000000000000000000001F803FFF800000000000000000000000001F 001FFF800000000000000000000000001F001FFF800000000000000000000000003F001F FFC00000000000000000000000003E000FFFC00000000000000000000000003E000FFFC0 0000000000000000000000007E000FFFE00000000000000000000000007C0007FFE00000 000000000000000000007C0007FFE0000000000000000000000000F80007FFF000000000 0000000000000000F80003FFF0000000000000000000000001F80003FFF8000000000000 000000000001F00003FFF8000000000000000000000001F00001FFF80000000000000000 00000003F00001FFFC000000000000000000000003E00001FFFC00000000000000000000 0003E00000FFFC000000000000000000000007E00000FFFE000000000000000000000007 C000007FFE000000000000000000000007C000007FFE00000000000000000000000FC000 007FFF00000000000000000000000F8000003FFF00000000000000000000000F8000003F FF00000000000000000000001F8000003FFF80000000000000000000001F0000001FFF80 000000000000000000001F0000001FFF80000000000000000000003F0000001FFFC00000 00000000000000003E0000000FFFC0000000000000000000003E0000000FFFC000000000 0000000000007C0000000FFFE0000000000000000000007C00000007FFE0000000000000 00000000FC00000007FFF000000000000000000000F800000007FFF00000000000000000 0000F800000003FFF000000000000000000001F800000003FFF800000000000000000001 F000000003FFF800000000000000000001F000000001FFF800000000000000000003F000 000001FFFC00000000000000000003E000000001FFFC00000000000000000003E0000000 00FFFC00000000000000000007E000000000FFFE00000000000000000007C0000000007F FE00000000000000000007C0000000007FFE0000000000000000000FC0000000007FFF00 00000000000000000F80000000003FFF0000000000000000000F80000000003FFF000000 0000000000001F80000000003FFF8000000000000000001F00000000001FFF8000000000 000000001F00000000001FFF8000000000000000003E00000000001FFFC0000000000000 00003E00000000000FFFC000000000000000007E00000000000FFFE00000000000000000 7C00000000000FFFE000000000000000007C000000000007FFE00000000000000000FC00 0000000007FFF00000000000000000F8000000000007FFF00000000000000000F8000000 000003FFF00000000000000001FFFFFFFFFFFFFFFFF80000000000000001FFFFFFFFFFFF FFFFF80000000000000001FFFFFFFFFFFFFFFFF80000000000000003FFFFFFFFFFFFFFFF FC0000000000000003FFFFFFFFFFFFFFFFFC0000000000000003FFFFFFFFFFFFFFFFFC00 00000000000007E0000000000000FFFE0000000000000007C00000000000007FFE000000 0000000007C00000000000007FFE000000000000000FC00000000000007FFF0000000000 00000F800000000000003FFF000000000000000F800000000000003FFF00000000000000 1F800000000000003FFF800000000000001F000000000000001FFF800000000000001F00 0000000000001FFF800000000000003E000000000000001FFFC00000000000003E000000 000000000FFFC00000000000007E000000000000000FFFE00000000000007C0000000000 00000FFFE00000000000007C0000000000000007FFE0000000000000FC00000000000000 07FFF0000000000000F80000000000000007FFF0000000000000F80000000000000003FF F0000000000001F80000000000000003FFF8000000000001F00000000000000003FFF800 0000000001F00000000000000001FFF8000000000003F00000000000000001FFFC000000 000003E00000000000000000FFFC000000000003E00000000000000000FFFC0000000000 07E00000000000000000FFFE000000000007C000000000000000007FFE000000000007C0 00000000000000007FFE00000000000FC000000000000000007FFF00000000000F800000 0000000000003FFF00000000000F8000000000000000003FFF00000000001F0000000000 000000003FFF80000000001F0000000000000000001FFF80000000003F00000000000000 00001FFFC0000000003F0000000000000000001FFFC0000000007F000000000000000000 0FFFC0000000007F0000000000000000000FFFE000000000FF0000000000000000000FFF E000000000FF00000000000000000007FFE000000001FF00000000000000000007FFF000 000003FF80000000000000000007FFF00000000FFFC000000000000000000FFFF8000000 1FFFE000000000000000000FFFFC0000007FFFF000000000000000003FFFFE000007FFFF FE0000000000000001FFFFFFC000FFFFFFFFC0000000000000FFFFFFFFFFF0FFFFFFFFC0 000000000000FFFFFFFFFFF0FFFFFFFFC0000000000000FFFFFFFFFFF0FFFFFFFFC00000 00000000FFFFFFFFFFF0FFFFFFFFC0000000000000FFFFFFFFFFF0FFFFFFFFC000000000 0000FFFFFFFFFFF0>132 146 123 273 143 65 D[113 141 117 268 135 I[124 141 117 268 146 68 D[48 141 118 268 68 73 D<0000000FFF000000000000000000FF FFF00000000000000003FFFFFE000000000000000FFFFFFF800000000000003FF003FFE0 000000000000FF80007FF8000000000001FC00001FFC000000000003F0000007FE000000 000007E0000003FF80000000000FC0000001FFC0000000001F00000000FFE0000000003E 000000007FF0000000007E000000003FF0000000007C000000003FF800000000F8000000 001FFC00000000F8000000001FFC00000001F0000000000FFE00000001FF000000000FFE 00000001FFC000000007FF00000001FFE000000007FF00000003FFF000000003FF800000 03FFF800000003FF80000003FFF800000003FF80000003FFF800000003FF80000003FFF8 00000001FFC0000003FFF800000001FFC0000003FFF800000001FFC0000003FFF8000000 01FFC0000001FFF000000001FFC0000001FFF000000001FFC00000007FC000000001FFC0 0000003F8000000001FFC0000000000000000001FFC0000000000000000001FFC0000000 000000000001FFC0000000000000000001FFC0000000000000000001FFC0000000000000 000001FFC0000000000000000001FFC0000000000000000001FFC0000000000000003FFF FFC00000000000000FFFFFFFC0000000000001FFFFFFFFC000000000001FFFFF01FFC000 000000007FFF8001FFC00000000003FFF80001FFC0000000000FFFC00001FFC000000000 3FFE000001FFC000000000FFF8000001FFC000000003FFE0000001FFC000000007FFC000 0001FFC00000001FFF00000001FFC00000003FFE00000001FFC00000007FFC00000001FF C0000000FFF800000001FFC0000001FFF000000001FFC0000003FFE000000001FFC00000 07FFC000000001FFC0000007FFC000000001FFC000000FFF8000000001FFC000001FFF00 00000001FFC000001FFF0000000001FFC000003FFE0000000001FFC0003C3FFE00000000 01FFC0003C7FFE0000000001FFC0003C7FFC0000000001FFC0003C7FFC0000000001FFC0 003C7FFC0000000001FFC0003CFFF80000000001FFC0003CFFF80000000003FFC0003CFF F80000000003FFC0003CFFF80000000003FFC0003CFFF80000000003FFC0003CFFF80000 000007FFC0003CFFF80000000007FFC0003CFFF80000000007FFC0003CFFF8000000000F FFC0003CFFFC000000000EFFC0003C7FFC000000001EFFC0003C7FFC000000003CFFC000 3C7FFE000000003C7FE000783FFE00000000787FE000781FFF00000000F07FE000781FFF 80000001E03FF000F00FFFC0000003C03FF000F007FFE0000007C01FF801E003FFF00000 1F001FFC03E001FFF800003E000FFF9FC0007FFE0001FC0007FFFF80001FFFE00FF00003 FFFF000007FFFFFFE00001FFFE000001FFFFFF800000FFF80000003FFFFC0000001FC000 000001FFC0000000000000565E78DB5F>97 D<000000001FFE0000000000000001FFFFE0 0000000000000FFFFFFC0000000000003FFFFFFF000000000000FFF001FFC00000000003 FF80001FF0000000000FFE000003F8000000001FF8000000FE000000003FF00000007F00 000000FFE00000001F80000001FFC00000000FC0000003FF8000000007E0000007FF0000 000003E000000FFE0000000001F000001FFC0000000000F800001FFC0000000000F80000 3FF800000000007C00007FF00000000007FC0000FFF0000000001FFC0000FFE000000000 3FFC0001FFE0000000007FFE0003FFC000000000FFFE0003FFC000000000FFFE0007FFC0 00000000FFFE0007FF8000000000FFFE000FFF8000000000FFFE000FFF8000000000FFFE 000FFF0000000000FFFE001FFF00000000007FFC001FFF00000000007FFC001FFF000000 00001FF0003FFE00000000000FE0003FFE00000000000000003FFE00000000000000007F FE00000000000000007FFE00000000000000007FFE00000000000000007FFC0000000000 0000007FFC00000000000000007FFC0000000000000000FFFC0000000000000000FFFC00 00000000000000FFFC0000000000000000FFFC0000000000000000FFFC00000000000000 00FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FFFC000000 0000000000FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FF FC0000000000000000FFFC0000000000000000FFFC00000000000000007FFC0000000000 0000007FFE00000000000000007FFE00000000000000007FFE00000000000000007FFE00 000000000000003FFE00000000000000003FFE00000000000000003FFF00000000000000 003FFF00000000000000001FFF00000000000000001FFF00000000000000001FFF800000 00000000000FFF80000000000007800FFF800000000000078007FFC000000000000F8007 FFC000000000000F0003FFC000000000000F0003FFE000000000001F0001FFE000000000 001E0001FFF000000000001E0000FFF800000000003E00007FF800000000007C00007FFC 00000000007800003FFE0000000000F800001FFE0000000000F000000FFF0000000001F0 000007FF8000000003E0000003FFC000000007C0000001FFE00000000F80000000FFF000 00001F000000007FF80000003E000000001FFE000000FC000000000FFF800001F8000000 0003FFE0000FE00000000000FFFC007FC000000000003FFFFFFF0000000000000FFFFFFC 00000000000001FFFFE0000000000000001FFE00000000495E7ADB54>99 D[<0000000000000000007E0000000000000000000FFFFE000000000000000003FFFFFE 000000000000000003FFFFFE000000000000000003FFFFFE000000000000000003FFFFFE 000000000000000003FFFFFE000000000000000003FFFFFE00000000000000000003FFFE 000000000000000000007FFE000000000000000000003FFE000000000000000000001FFE 000000000000000000001FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE000000000000000000000FFE000000000000000000000FFE 000000000000000000000FFE0000000000000FFE00000FFE000000000001FFFFE0000FFE 00000000000FFFFFFC000FFE00000000003FFFFFFF000FFE0000000000FFFC00FFC00FFE 0000000003FFE0000FE00FFE000000000FFF000003F80FFE000000001FFC000000FC0FFE 000000003FF80000003E0FFE00000000FFE00000001F0FFE00000001FFC00000000F8FFE 00000003FF8000000007CFFE00000007FF0000000003EFFE0000000FFE0000000001FFFE 0000001FFC0000000000FFFE0000003FFC0000000000FFFE0000003FF800000000007FFE 0000007FF000000000003FFE000000FFF000000000003FFE000000FFE000000000001FFE 000001FFE000000000001FFE000003FFC000000000000FFE000003FFC000000000000FFE 000007FF8000000000000FFE000007FF8000000000000FFE00000FFF8000000000000FFE 00000FFF0000000000000FFE00001FFF0000000000000FFE00001FFF0000000000000FFE 00001FFF0000000000000FFE00003FFE0000000000000FFE00003FFE0000000000000FFE 00003FFE0000000000000FFE00003FFE0000000000000FFE00007FFE0000000000000FFE 00007FFE0000000000000FFE00007FFC0000000000000FFE00007FFC0000000000000FFE 00007FFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE 0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE 0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE 0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE 0000FFFC0000000000000FFE0000FFFC0000000000000FFE0000FFFC0000000000000FFE 0000FFFC0000000000000FFE00007FFC0000000000000FFE00007FFC0000000000000FFE 00007FFC0000000000000FFE00007FFE0000000000000FFE00007FFE0000000000000FFE 00007FFE0000000000000FFE00003FFE0000000000000FFE00003FFE0000000000000FFE 00003FFE0000000000000FFE00001FFE0000000000000FFE00001FFF0000000000000FFE 00001FFF0000000000000FFE00000FFF0000000000000FFE00000FFF0000000000000FFE 000007FF8000000000000FFE000007FF8000000000000FFE000007FF8000000000001FFE 000003FFC000000000001FFE000001FFC000000000003FFE000001FFE000000000003FFE 000000FFE000000000007FFE000000FFF000000000007FFE0000007FF00000000000FFFE 0000003FF80000000001FFFE0000001FFC0000000001EFFE0000000FFE0000000003EFFE 0000000FFE0000000007CFFF00000007FF000000000F8FFF00000003FF800000001F0FFF 80000001FFC00000007E0FFFC00000007FF0000000FC0FFFF80000003FF8000001F80FFF FFF800001FFE000007E00FFFFFF8000007FF80003FC00FFFFFF8000001FFF003FF000FFF FFF80000007FFFFFFC000FFFFFF80000001FFFFFF0000FFFFFF800000003FFFF80000FFF FE00000000003FF800000FC00000>93 145 122 270 106 I<000000007FFC0000000000 000007FFFFC00000000000003FFFFFF8000000000000FFFFFFFE000000000003FFE01FFF 800000000007FF0003FFE0000000001FFC0000FFF0000000003FF000003FF8000000007F E000001FFC00000000FFC0000007FE00000001FF80000007FF00000003FF00000003FF80 000007FE00000001FFC000000FFC00000000FFE000001FF800000000FFE000003FF80000 00007FF000007FF0000000007FF000007FF0000000003FF80000FFE0000000003FFC0001 FFE0000000001FFC0001FFC0000000001FFC0003FFC0000000001FFE0003FF8000000000 0FFE0007FF80000000000FFE0007FF80000000000FFF000FFF00000000000FFF000FFF00 0000000007FF001FFF000000000007FF801FFF000000000007FF801FFE000000000007FF 803FFE000000000007FF803FFE000000000007FF803FFE000000000007FF803FFE000000 000003FFC07FFE000000000003FFC07FFE000000000003FFC07FFC000000000003FFC07F FC000000000003FFC07FFC000000000003FFC0FFFC000000000003FFC0FFFFFFFFFFFFFF FFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFFFFFFFFFFFFFFFFC0FFFC00 00000000000000FFFC0000000000000000FFFC0000000000000000FFFC00000000000000 00FFFC0000000000000000FFFC0000000000000000FFFC0000000000000000FFFC000000 0000000000FFFC0000000000000000FFFC0000000000000000FFFC00000000000000007F FC00000000000000007FFC00000000000000007FFE00000000000000007FFE0000000000 0000007FFE00000000000000003FFE00000000000000003FFE00000000000000003FFE00 000000000000001FFF00000000000000001FFF00000000000000001FFF00000000000000 000FFF00000000000003C00FFF80000000000003C007FF80000000000003C007FF800000 00000007C003FFC00000000000078003FFC00000000000078001FFC000000000000F8001 FFE000000000000F0000FFE000000000001F00007FF000000000001E00007FF800000000 003E00003FF800000000007C00001FFC00000000007800000FFE0000000000F8000007FE 0000000001F0000003FF0000000003E0000001FF8000000007C0000000FFC00000000F80 0000007FF00000001F000000003FF80000007E000000001FFE000000FC0000000007FF80 0003F80000000003FFE0001FF00000000000FFFE00FFC000000000003FFFFFFF00000000 00000FFFFFFC00000000000001FFFFF0000000000000001FFF000000004A5E7BDB54>I< 0000000000000000003FC000000000FFE0000003FFF00000000FFFFE00001FFFFC000000 3FFFFF80007FFFFE000000FFFFFFE000FFC0FE000003FF803FF803FC01FF00000FFE000F FE07E001FF00001FF80003FF1F8003FF00007FF00001FFFF0001FF0000FFC000007FFC00 01FF0001FFC000007FF80001FE0003FF8000003FF80000FC0003FF0000001FF800000000 07FE0000000FFC000000000FFE0000000FFE000000001FFC00000007FF000000001FFC00 000007FF000000003FFC00000007FF800000003FF800000003FF800000007FF800000003 FFC00000007FF800000003FFC00000007FF800000003FFC0000000FFF800000003FFE000 0000FFF000000001FFE0000000FFF000000001FFE0000000FFF000000001FFE0000001FF F000000001FFF0000001FFF000000001FFF0000001FFF000000001FFF0000001FFF00000 0001FFF0000001FFF000000001FFF0000001FFF000000001FFF0000001FFF000000001FF F0000001FFF000000001FFF0000001FFF000000001FFF0000001FFF000000001FFF00000 01FFF000000001FFF0000000FFF000000001FFE0000000FFF000000001FFE0000000FFF0 00000001FFE0000000FFF800000003FFE00000007FF800000003FFC00000007FF8000000 03FFC00000007FF800000003FFC00000003FF800000003FF800000003FFC00000007FF80 0000001FFC00000007FF000000001FFC00000007FF000000000FFE0000000FFE00000000 07FE0000000FFC0000000003FF0000001FF80000000003FF8000003FF80000000001FFC0 00007FF00000000000FFC000007FE00000000001FFF00001FFC00000000003DFF80003FF 000000000003CFFE000FFE00000000000783FF803FF800000000000700FFFFFFE0000000 00000F003FFFFF8000000000000F000FFFFE0000000000001E0000FFE00000000000001E 000000000000000000001E000000000000000000001E000000000000000000003E000000 000000000000003E000000000000000000003E000000000000000000003E000000000000 000000003E000000000000000000003E000000000000000000003F000000000000000000 003F000000000000000000003F800000000000000000001F800000000000000000001FC0 0000000000000000001FE00000000000000000001FF00000000000000000000FF8000000 0000000000000FFE00000000000000000007FFFFFFFFFE000000000007FFFFFFFFFFFC00 00000003FFFFFFFFFFFFC000000001FFFFFFFFFFFFF800000000FFFFFFFFFFFFFE000000 007FFFFFFFFFFFFF800000001FFFFFFFFFFFFFE0000000FFFFFFFFFFFFFFF0000003FFFF FFFFFFFFFFFC00000FFE00000001FFFFFE00003FF00000000007FFFF00007FC000000000 007FFF8000FF0000000000001FFF8001FE00000000000007FFC003FC00000000000001FF E007F800000000000000FFE00FF0000000000000007FF01FF0000000000000003FF01FE0 000000000000001FF03FC0000000000000001FF83FC0000000000000000FF87F80000000 000000000FF87F800000000000000007F87F800000000000000007FCFF80000000000000 0007FCFF000000000000000003FCFF000000000000000003FCFF000000000000000003FC FF000000000000000003FCFF000000000000000003FCFF000000000000000003FCFF0000 00000000000003FCFF800000000000000007FC7F800000000000000007F87F8000000000 00000007F87FC0000000000000000FF83FC0000000000000000FF03FE000000000000000 1FF01FF0000000000000003FE00FF8000000000000007FC00FF8000000000000007FC007 FC00000000000000FF8003FF00000000000003FF0001FF80000000000007FE00007FC000 000000000FF800003FF000000000003FF000001FFC0000000000FFE0000007FF00000000 03FF80000001FFE00000001FFE000000007FFC000000FFF8000000001FFFE0001FFFE000 00000003FFFFFFFFFF0000000000007FFFFFFFF80000000000000FFFFFFFC00000000000 00003FFFF00000000058877CDB5F>103 D[<0007F00000000FF80000001FFC0000003FFE 0000007FFF000000FFFF800000FFFF800000FFFF800000FFFF800000FFFF800000FFFF80 0000FFFF8000007FFF0000003FFE0000001FFC0000000FF800000007F000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000001F80 0001FFFF80007FFFFF80007FFFFF80007FFFFF80007FFFFF80007FFFFF80007FFFFF8000 007FFF8000001FFF8000000FFF80000007FF80000007FF80000003FF80000003FF800000 03FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003 FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF 80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80 000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF8000 0003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF800000 03FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003 FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF 80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80 000003FF80000003FF80000003FF80000003FF80000003FF80000003FF80000003FF8000 0003FF80000003FF80000007FFC000000FFFE000003FFFF800FFFFFFFFF8FFFFFFFFF8FF FFFFFFF8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8>37 137 121 264 52 105 D<00003F000001FFE00000000007FF800000000003FFFF00001FFFFE00000000 7FFFF800000000FFFFFF00007FFFFFC0000001FFFFFF00000000FFFFFF0001FFFFFFF000 0007FFFFFFC0000000FFFFFF0007FC01FFFC00001FF007FFF0000000FFFFFF000FC0003F FE00003F0000FFF8000000FFFFFF001F00000FFF00007C00003FFC000000FFFFFF007E00 0003FF8001F800000FFE00000000FFFF00F8000001FFC003E0000007FF000000001FFF01 F0000001FFE007C0000007FF800000000FFF01E0000000FFE00780000003FF8000000007 FF03C00000007FF00F00000001FFC000000007FF07800000007FF01E00000001FFC00000 0003FF0F000000003FF83C00000000FFE000000003FF0F000000003FF83C00000000FFE0 00000003FF1E000000003FF87800000000FFE000000003FF1C000000001FFC7000000000 7FF000000003FF3C000000001FFCF0000000007FF000000003FF38000000001FFCE00000 00007FF000000003FF78000000001FFDE0000000007FF000000003FF70000000000FFFC0 000000003FF800000003FFF0000000000FFFC0000000003FF800000003FFE0000000000F FF80000000003FF800000003FFE0000000000FFF80000000003FF800000003FFE0000000 000FFF80000000003FF800000003FFE0000000000FFF80000000003FF800000003FFC000 0000000FFF00000000003FF800000003FFC0000000000FFF00000000003FF800000003FF C0000000000FFF00000000003FF800000003FFC0000000000FFF00000000003FF8000000 03FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800 000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003F F800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000 003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE0000 0000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE 00000000003FF800000003FF80000000000FFE00000000003FF800000003FF8000000000 0FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF800000 00000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF80 000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003 FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF80000 0003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF8 00000003FF80000000000FFE00000000003FF800000003FF80000000000FFE0000000000 3FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE000000 00003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00 000000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000F FE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000 000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF8000 0000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF 80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF8000000 03FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003FF800 000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000003F F800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE00000000 003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE0000 0000003FF800000003FF80000000000FFE00000000003FF800000003FF80000000000FFE 00000000003FF800000003FF80000000000FFE00000000003FF800000003FF8000000000 0FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF800000 00000FFE00000000003FF800000003FF80000000000FFE00000000003FF800000003FF80 000000000FFE00000000003FF800000007FFC0000000001FFF00000000007FFC0000000F FFE0000000003FFF8000000000FFFE0000003FFFF800000000FFFFE000000003FFFF8000 FFFFFFFFFE0003FFFFFFFFF8000FFFFFFFFFE0FFFFFFFFFE0003FFFFFFFFF8000FFFFFFF FFE0FFFFFFFFFE0003FFFFFFFFF8000FFFFFFFFFE0FFFFFFFFFE0003FFFFFFFFF8000FFF FFFFFFE0FFFFFFFFFE0003FFFFFFFFF8000FFFFFFFFFE0FFFFFFFFFE0003FFFFFFFFF800 0FFFFFFFFFE0935B79DAA0>109 D<00003F000001FFE00000000003FFFF00001FFFFE00 000000FFFFFF00007FFFFFC0000000FFFFFF0001FFFFFFF0000000FFFFFF0007FC01FFFC 000000FFFFFF000FC0003FFE000000FFFFFF001F00000FFF000000FFFFFF007E000003FF 80000000FFFF00F8000001FFC00000001FFF01F0000001FFE00000000FFF01E0000000FF E000000007FF03C00000007FF000000007FF07800000007FF000000003FF0F000000003F F800000003FF0F000000003FF800000003FF1E000000003FF800000003FF1C000000001F FC00000003FF3C000000001FFC00000003FF38000000001FFC00000003FF78000000001F FC00000003FF70000000000FFE00000003FFF0000000000FFE00000003FFE0000000000F FE00000003FFE0000000000FFE00000003FFE0000000000FFE00000003FFE0000000000F FE00000003FFC0000000000FFE00000003FFC0000000000FFE00000003FFC0000000000F FE00000003FFC0000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000F FE00000003FF80000000000FFE00000003FF80000000000FFE00000007FFC0000000001F FF0000000FFFE0000000003FFF8000003FFFF800000000FFFFE000FFFFFFFFFE0003FFFF FFFFF8FFFFFFFFFE0003FFFFFFFFF8FFFFFFFFFE0003FFFFFFFFF8FFFFFFFFFE0003FFFF FFFFF8FFFFFFFFFE0003FFFFFFFFF8FFFFFFFFFE0003FFFFFFFFF85D5B79DA6A>I<0000 00000FFF000000000000000000FFFFF00000000000000007FFFFFE000000000000003FFF FFFFC0000000000000FFF801FFF0000000000003FFC0003FFC000000000007FE000007FE 00000000001FF8000001FF80000000003FF0000000FFC0000000007FC00000003FE00000 0000FF800000001FF000000001FF000000000FF800000003FE0000000007FC00000007FC 0000000003FE0000000FFC0000000003FF0000001FF80000000001FF8000003FF0000000 0000FFC000003FF00000000000FFC000007FE000000000007FE00000FFC000000000003F F00000FFC000000000003FF00001FFC000000000003FF80003FF8000000000001FFC0003 FF8000000000001FFC0007FF0000000000000FFE0007FF0000000000000FFE000FFF0000 000000000FFF000FFF0000000000000FFF000FFE00000000000007FF001FFE0000000000 0007FF801FFE00000000000007FF803FFE00000000000007FFC03FFE00000000000007FF C03FFE00000000000007FFC03FFC00000000000003FFC07FFC00000000000003FFE07FFC 00000000000003FFE07FFC00000000000003FFE07FFC00000000000003FFE07FFC000000 00000003FFE0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC000000000000 03FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0 FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00 000000000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF0FFFC00000000 000003FFF0FFFC00000000000003FFF0FFFC00000000000003FFF07FFC00000000000003 FFE07FFC00000000000003FFE07FFC00000000000003FFE07FFE00000000000007FFE07F FE00000000000007FFE03FFE00000000000007FFC03FFE00000000000007FFC03FFE0000 0000000007FFC03FFE00000000000007FFC01FFE00000000000007FF801FFF0000000000 000FFF800FFF0000000000000FFF000FFF0000000000000FFF000FFF0000000000000FFF 0007FF8000000000001FFE0007FF8000000000001FFE0003FF8000000000001FFC0003FF C000000000003FFC0001FFC000000000003FF80000FFE000000000007FF00000FFE00000 0000007FF000007FF00000000000FFE000003FF00000000000FFC000001FF80000000001 FF8000001FFC0000000003FF8000000FFE0000000007FF00000007FF000000000FFE0000 0003FF000000000FFC00000001FFC00000003FF800000000FFE00000007FF0000000003F F0000000FFC0000000001FFC000003FF800000000007FE000007FE000000000003FFC000 3FFC000000000000FFF801FFF00000000000003FFFFFFFC00000000000000FFFFFFF0000 000000000001FFFFF800000000000000000FFF0000000000545E7BDB5F>I<00003F0000 0FF00003FFFF00007FFE00FFFFFF0001FFFF80FFFFFF0007FFFFE0FFFFFF001FF00FF0FF FFFF003F803FF0FFFFFF007E007FF8FFFFFF00FC007FF800FFFF01F000FFFC001FFF01E0 00FFFC000FFF03E000FFFC0007FF07C000FFFC0007FF078000FFFC0003FF0F0000FFFC00 03FF0F00007FF80003FF1E00007FF80003FF1E00001FE00003FF3C000007800003FF3C00 0000000003FF78000000000003FF78000000000003FF70000000000003FFF00000000000 03FFF0000000000003FFE0000000000003FFE0000000000003FFE0000000000003FFE000 0000000003FFC0000000000003FFC0000000000003FFC0000000000003FFC00000000000 03FFC0000000000003FFC0000000000003FF80000000000003FF80000000000003FF8000 0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000 0000000003FF80000000000003FF80000000000003FF80000000000003FF800000000000 03FF80000000000003FF80000000000003FF80000000000003FF80000000000003FFC000 0000000007FFC000000000000FFFE000000000003FFFFC00000000FFFFFFFFFFC00000FF FFFFFFFFC00000FFFFFFFFFFC00000FFFFFFFFFFC00000FFFFFFFFFFC00000FFFFFFFFFF C000003E5B7ADA49>114 D<000000FFF80001C000001FFFFF8003C00000FFFFFFE003C0 0007FFFFFFF807C0001FFF0007FE0FC0003FF00000FF1FC000FF8000003F9FC001FE0000 000FFFC003FC00000007FFC007F800000003FFC00FF000000001FFC00FE000000000FFC0 1FC0000000007FC03FC0000000007FC03F80000000003FC03F80000000001FC07F800000 00001FC07F00000000000FC07F00000000000FC0FF00000000000FC0FF000000000007C0 FF000000000007C0FF000000000007C0FF000000000007C0FF800000000007C0FF800000 000003C0FFC00000000003C0FFC00000000003C0FFE00000000003C07FF00000000003C0 7FF80000000003C07FFC0000000003C03FFE0000000000003FFF0000000000001FFFC000 000000001FFFF800000000000FFFFF000000000007FFFFF80000000007FFFFFFC0000000 03FFFFFFFE00000000FFFFFFFFC00000007FFFFFFFF80000003FFFFFFFFE0000000FFFFF FFFF80000007FFFFFFFFE0000001FFFFFFFFF00000003FFFFFFFF800000007FFFFFFFE00 0000007FFFFFFF0000000003FFFFFF80000000003FFFFF800000000001FFFFC000000000 003FFFE000000000000FFFF0000000000003FFF0F00000000001FFF8F00000000000FFF8 F000000000007FF8F800000000003FFCF800000000001FFCF800000000000FFCF8000000 00000FFEF8000000000007FEFC000000000007FEFC000000000003FEFC000000000003FE FC000000000003FEFE000000000001FEFE000000000001FEFE000000000001FEFF000000 000001FEFF000000000001FEFF000000000001FEFF800000000001FCFF800000000001FC FFC00000000003FCFFC00000000003FCFFE00000000003F8FFE00000000007F8FFF00000 000007F0FFF8000000000FF0FFF8000000000FE0FFFC000000001FE0FFBE000000003FC0 FF1F000000007F80FF1F80000000FF00FE0FE0000001FE00FE07F0000007FC00FC01FC00 003FF000F800FFC003FFE000F8003FFFFFFF8000F0000FFFFFFE0000F00003FFFFF00000 E000003FFE0000003F5E7BDB4A>I<000000F000000000000000F000000000000000F000 000000000000F000000000000000F000000000000000F000000000000000F00000000000 0000F000000000000000F000000000000001F000000000000001F000000000000001F000 000000000001F000000000000001F000000000000001F000000000000003F00000000000 0003F000000000000003F000000000000003F000000000000007F000000000000007F000 000000000007F000000000000007F00000000000000FF00000000000000FF00000000000 001FF00000000000001FF00000000000003FF00000000000003FF00000000000007FF000 00000000007FF0000000000000FFF0000000000001FFF0000000000003FFF00000000000 07FFF000000000000FFFF000000000001FFFF000000000007FFFF00000000000FFFFFFFF FFFF000FFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FF FFFFFFFFFFFF0000007FF00000000000007FF00000000000007FF00000000000007FF000 00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 007FF00000000000007FF00000000000007FF00000000000007FF00000000000007FF000 00000000007FF00000000000007FF00000000000007FF00000000000007FF00000000000 007FF00000000000007FF00000000000007FF0000001E000007FF0000001E000007FF000 0001E000007FF0000001E000007FF0000001E000007FF0000001E000007FF0000001E000 007FF0000001E000007FF0000001E000007FF0000001E000007FF0000001E000007FF000 0001E000007FF0000001E000007FF0000001E000007FF0000001E000007FF0000001E000 007FF0000001E000007FF0000001E000007FF0000003E000003FF8000003C000003FF800 0003C000003FF8000003C000003FF8000003C000003FF8000007C000001FFC0000078000 001FFC0000078000000FFC00000F0000000FFE00000F00000007FE00001F00000007FF00 001E00000003FF80003C00000001FFC0007C00000000FFE000F8000000007FF001F00000 00003FFC07E0000000001FFFFFC00000000007FFFF800000000000FFFE0000000000001F F000003B817DFE49>I<00001F8000000000007E000003FFFF800000000FFFFE0000FFFF FF80000003FFFFFE0000FFFFFF80000003FFFFFE0000FFFFFF80000003FFFFFE0000FFFF FF80000003FFFFFE0000FFFFFF80000003FFFFFE0000FFFFFF80000003FFFFFE000000FF FF8000000003FFFE0000001FFF80000000007FFE0000000FFF80000000003FFE00000007 FF80000000001FFE00000007FF80000000001FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000000FFE00000003 FF80000000000FFE00000003FF80000000000FFE00000003FF80000000001FFE00000003 FF80000000001FFE00000003FF80000000001FFE00000003FF80000000001FFE00000003 FF80000000003FFE00000003FF80000000003FFE00000003FF80000000003FFE00000003 FF80000000007FFE00000003FF80000000007FFE00000001FF80000000007FFE00000001 FF8000000000FFFE00000001FF8000000000EFFE00000001FFC000000001EFFE00000001 FFC000000001CFFE00000000FFC000000003CFFE00000000FFC0000000078FFE00000000 7FE0000000078FFF000000007FE00000000F0FFF000000003FF00000001E0FFF80000000 3FF00000003C0FFFC00000001FF8000000780FFFF80000000FFC000001F00FFFFFF80000 07FE000003E00FFFFFF8000003FF80000FC00FFFFFF8000000FFF800FF800FFFFFF80000 007FFFFFFE000FFFFFF80000001FFFFFF8000FFFFFF800000003FFFFE0000FFFFE000000 00001FFE00000FC000005D5D79DA6A>I121 D E end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%PaperSize: Letter %%EndSetup %%Page: 1 1 1 0 bop 1093 895 a FM(An)62 b(In)-5 b(tro)5 b(duction)59 b(to)798 1144 y(Binary)i(Decision)g(Diagrams)1326 1483 y FL(Henrik)38 b(Reif)h(Andersen)1341 3741 y @beginspecial 36 @llx 36 @lly 201 @urx 289 @ury 1984 @rhi @setspecial %%BeginDocument: r.ps save /DotDict 200 dict def DotDict begin /coord-font-family /Times-Roman def /default-font-family /Times-Roman def /coordfont coord-font-family findfont 8 scalefont def /InvScaleFactor 1.0 def /set_scale { dup 1 exch div /InvScaleFactor exch def dup scale } bind def % styles /solid { } bind def /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def /bold { 2 setlinewidth } bind def /filled { } bind def /unfilled { } bind def /rounded { } bind def /diagonals { } bind def % hooks for setting color /nodecolor { sethsbcolor } bind def /edgecolor { sethsbcolor } bind def /graphcolor { sethsbcolor } bind def /nopcolor {pop pop pop} bind def /beginpage { % i j npages /npages exch def /j exch def /i exch def /str 10 string def npages 1 gt { gsave coordfont setfont 0 0 moveto (() show i str cvs show (,) show j str cvs show ()) show grestore } if } bind def /set_font { findfont exch scalefont setfont } def /arrowhead { /arrowwidth exch def /arrowlength exch def gsave 3 1 roll translate rotate newpath arrowlength arrowwidth 2 div moveto 0 0 lineto arrowlength arrowwidth -2 div lineto closepath fill stroke grestore } def % draw aligned label in bounding box aligned to current point % alignfactor tells what fraction to place on the left. % -.5 is centered. /alignedtext { % text labelwidth fontsz alignfactor /alignfactor exch def /fontsz exch def /width exch def /text exch def gsave % even if node or edge is dashed, don't paint text with dashes [] 0 setdash currentpoint newpath moveto text stringwidth pop alignfactor mul fontsz -.3 mul rmoveto text show grestore } def /boxprim { % xcorner ycorner xsize ysize 4 2 roll moveto 2 copy exch 0 rlineto 0 exch rlineto pop neg 0 rlineto closepath } bind def /ellipse_path { /ry exch def /rx exch def /y exch def /x exch def matrix currentmatrix newpath x y translate rx ry scale 0 0 1 0 360 arc setmatrix } bind def /endpage { showpage } bind def /layercolorseq [ % layer color sequence - darkest to lightest [0 0 0] [.2 .8 .8] [.4 .8 .8] [.6 .8 .8] [.8 .8 .8] ] def /setlayer {/maxlayer exch def /curlayer exch def layercolorseq curlayer get aload pop sethsbcolor /nodecolor {nopcolor} def /edgecolor {nopcolor} def /graphcolor {nopcolor} def } bind def /onlayer { curlayer ne {invis} if } def /onlayers { /myupper exch def /mylower exch def curlayer mylower lt curlayer myupper gt or {invis} if } def /curlayer 0 def 14 default-font-family set_font % /arrowlength 10 def % /arrowwidth 5 def gsave 35 35 166 254 boxprim clip newpath 36 36 translate 0 0 1 beginpage 0 0 translate 0 rotate 0.000 0.000 0.000 graphcolor 14.00 /Times-Roman set_font % 0 gsave 10 dict begin newpath 126 36 moveto 72 36 lineto 72 0 lineto 126 0 lineto closepath stroke gsave 10 dict begin 99 19 moveto (0) 7 14.00 -0.50 alignedtext end grestore end grestore % 1 gsave 10 dict begin newpath 54 36 moveto 0 36 lineto 0 0 lineto 54 0 lineto closepath stroke gsave 10 dict begin 27 19 moveto (1) 7 14.00 -0.50 alignedtext end grestore end grestore % 12 gsave 10 dict begin 71 234 27 18 ellipse_path stroke gsave 10 dict begin 71 235 moveto (x) 7 14.00 -0.50 alignedtext end grestore end grestore % 6 gsave 10 dict begin 27 90 27 18 ellipse_path stroke gsave 10 dict begin 27 91 moveto (y) 7 14.00 -0.50 alignedtext end grestore end grestore % 12 -> 6 gsave 10 dict begin dotted newpath 66 216 moveto 58 191 43 143 34 114 curveto stroke 32 108 71.57 10.00 5.00 arrowhead end grestore % 11 gsave 10 dict begin 99 162 27 18 ellipse_path stroke gsave 10 dict begin 99 163 moveto (y) 7 14.00 -0.50 alignedtext end grestore end grestore % 12 -> 11 newpath 78 217 moveto 81 208 85 197 89 187 curveto stroke 92 179 110.56 10.00 5.00 arrowhead % 6 -> 0 gsave 10 dict begin dotted newpath 42 75 moveto 52 65 66 51 77 40 curveto stroke 81 36 135.00 10.00 5.00 arrowhead end grestore % 6 -> 1 newpath 27 72 moveto 27 64 27 54 27 45 curveto stroke 27 36 90.00 10.00 5.00 arrowhead % 11 -> 0 gsave 10 dict begin dotted newpath 111 146 moveto 122 131 136 112 138 108 curveto 142 96 142 83 138 72 curveto 136 68 126 54 117 42 curveto stroke 113 36 56.31 10.00 5.00 arrowhead end grestore % 4 gsave 10 dict begin 99 90 27 18 ellipse_path stroke gsave 10 dict begin 99 91 moveto (z) 6 14.00 -0.50 alignedtext end grestore end grestore % 11 -> 4 newpath 99 144 moveto 99 136 99 126 99 117 curveto stroke 99 108 90.00 10.00 5.00 arrowhead % 4 -> 0 gsave 10 dict begin dotted newpath 99 72 moveto 99 64 99 54 99 45 curveto stroke 99 36 90.00 10.00 5.00 arrowhead end grestore % 4 -> 1 newpath 84 75 moveto 75 66 62 53 51 42 curveto stroke 45 36 45.00 10.00 5.00 arrowhead endpage grestore end restore %%EndDocument @endspecial 473 4431 a FK(Lecture)34 b(notes)f(for)f(49285)g(Adv)-5 b(anced)34 b(Algorithms)c(E97,)i(Octob)s(er)h(1997.)1274 4551 y(\(Minor)f(revisions,)h(Apr.)f(1998\))551 4672 y(E-mail:)41 b FJ(hra@it.dtu.dk)p FK(.)47 b(W)-8 b(eb:)44 b FJ(http://www.it.dtu.dk/)p FI(\030)p FJ(hra)317 4898 y FK(Departmen)m(t)32 b(of)g(Information)e(T)-8 b(ec)m(hnology)g(,)34 b(T)-8 b(ec)m(hnical)32 b(Univ)m(ersit)m(y)h(of)g(Denmark)981 5018 y(Building)d(344,)i(DK-2800)e(Lyngb)m(y)-8 b(,)34 b(Denmark.)p eop %%Page: 1 2 1 1 bop 3721 -460 a FK(1)p eop %%Page: 2 3 2 2 bop 3721 -460 a FK(2)-9 -171 y FH(Preface)-9 48 y FK(This)38 b(note)g(is)g(a)g(short)g(in)m(tro)s(duction)f(to)h(Binary)g (Decision)e(Diagrams.)58 b(It)39 b(pro)m(vides)f(some)g(bac)m(k-)-9 168 y(ground)50 b(kno)m(wledge)h(and)g(describ)s(es)g(the)g(core)g (algorithms.)94 b(More)51 b(details)e(can)i(b)s(e)f(found)h(in)-9 289 y(Bry)m(an)m(t's)37 b(original)32 b(pap)s(er)k(on)f(Reduced)i (Ordered)f(Binary)g(Decision)e(Diagrams)f([Bry86])j(and)g(the)-9 409 y(surv)m(ey)26 b(pap)s(er)e([Bry92].)41 b(A)24 b(recen)m(t)h (extension)g(called)e(Bo)s(olean)g(Expression)i(Diagrams)d(is)h (describ)s(ed)-9 530 y(in)31 b([AH97].)137 650 y(This)42 b(note)g(is)g(a)g(revision)f(of)h(an)g(earlier)e(v)m(ersion)j(from)d (fall)g(1996)h(\(based)i(on)f(v)m(ersions)h(from)-9 770 y(1995)33 b(and)i(1994\).)49 b(The)36 b(ma)5 b(jor)34 b(di\013erences)i(are)f(as)g(follo)m(ws:)46 b(Firstly)-8 b(,)34 b(R)m(OBDDs)h(are)f(no)m(w)i(view)m(ed)-9 891 y(as)31 b(no)s(des)h(of)f(one)h(global)d(graph)i(with)g(one)h(\014xed)h (ordering)d(to)i(re\015ect)g(state-of-the-art)e(of)h(e\016cien)m(t)-9 1011 y(BDD)37 b(pac)m(k)-5 b(ages.)62 b(The)39 b(algorithms)c(ha)m(v)m (e)40 b(b)s(een)f(c)m(hanged)g(\(and)g(simpli\014ed\))d(to)i(re\015ect) h(this)f(fact.)-9 1131 y(Secondly)-8 b(,)25 b(a)d(pro)s(of)g(of)h(the)g (canonicit)m(y)f(lemma)f(has)i(b)s(een)h(added.)40 b(Thirdly)-8 b(,)25 b(the)e(sections)g(presen)m(ting)-9 1252 y(the)30 b(algorithms)d(ha)m(v)m(e)32 b(b)s(een)f(completely)d(restructured.)45 b(Finally)-8 b(,)28 b(the)i(pro)5 b(ject)31 b(prop)s(osal)e(has)h(b)s (een)-9 1372 y(revised.)-9 1705 y FH(Ac)l(kno)l(wledgemen)l(ts)-9 1924 y FK(Thanks)k(to)f(the)g(studen)m(ts)i(on)e(the)h(courses)g(of)f (fall)e(1994,)h(1995,)g(and)h(1996)f(for)h(helping)f(me)g(debug)-9 2044 y(and)41 b(impro)m(v)m(e)h(the)g(notes.)72 b(Thanks)44 b(are)d(also)g(due)i(to)e(Hans)i(Risc)m(hel,)h(Morten)e(Ulrik)e (S\034rensen,)-9 2165 y(Niels)26 b(Maretti,)i(J\034rgen)f(Staunstrup,)j (Kim)25 b(Sk)-5 b(ak)28 b(Larsen,)h(Henrik)e(Hulgaard,)g(and)h(v)-5 b(arious)26 b(p)s(eople)-9 2285 y(on)32 b(the)h(In)m(ternet)h(who)f (found)g(t)m(yp)s(os)g(and)g(suggested)h(impro)m(v)m(emen)m(ts.)p eop %%Page: 3 4 3 3 bop 3721 -460 a FK(3)p eop %%Page: 4 5 4 4 bop -9 -460 a FG(CONTENTS)3178 b FK(4)-9 -171 y FH(Con)l(ten)l(ts) -9 48 y FF(1)90 b(Bo)s(olean)37 b(Expressions)2572 b(6)-9 266 y(2)90 b(Normal)36 b(F)-9 b(orms)2870 b(7)-9 484 y(3)90 b(Binary)37 b(Decision)f(Diagrams)2292 b(8)-9 702 y(4)90 b(Constructing)36 b(and)j(Manipulating)d(R)m(OBDDs)1474 b(15)137 822 y FK(4.1)99 b FE(Mk)31 b FK(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(15)137 943 y(4.2)99 b FE(Build)66 b FK(.)50 b(.)f(.)h(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(17)137 1063 y(4.3)99 b FE(Appl)-7 b(y)49 b FK(.)h(.)f(.)h(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(19)137 1183 y(4.4)99 b FE(Restrict)51 b FK(.)f(.)g(.)g(.)g(.)g(.)g(.) g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(20)137 1304 y(4.5)99 b FE(Sa)-7 b(tCount)p FK(,)34 b FE(AnySa)-7 b(t)p FK(,)33 b FE(AllSa)-7 b(t)72 b FK(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(22)137 1424 y(4.6)99 b FE(Simplify)84 b FK(.)50 b(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(25)137 1544 y(4.7)99 b(Existen)m(tial)32 b(Quan)m(ti\014cation)f(and)i (Substitution)j(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)f(.)h(.)g(.)93 b(25)-9 1762 y FF(5)d(Implemen)m(ting)35 b(the)i(R)m(OBDD)f(op)s(erations)1650 b(27)-9 1980 y(6)90 b(Examples)37 b(of)g(problem)g(solving)f(with)g(R)m(OBDDs)1354 b(27)137 2101 y FK(6.1)99 b(The)34 b(8)e(Queens)i(problem)67 b(.)50 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.) g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(27)137 2221 y(6.2)99 b(Correctness)35 b(of)d(Com)m(binational)e(Circuits)97 b(.)50 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) f(.)h(.)g(.)93 b(29)137 2341 y(6.3)99 b(Equiv)-5 b(alence)33 b(of)f(Com)m(binational)e(Circuits)86 b(.)50 b(.)g(.)g(.)g(.)g(.)f(.)h (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(29)-9 2559 y FF(7)d(V)-9 b(eri\014cation)35 b(with)h(R)m(OBDDs)2205 b(31)137 2680 y FK(7.1)99 b(Knigh)m(ts)33 b(tour)e(.)50 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)93 b(33)-9 2898 y FF(8)d(Pro)6 b(ject:)49 b(An)37 b(R)m(OBDD)g(P)m(ac)m(k) -6 b(age)2050 b(35)137 3116 y(References)2997 b(36)p eop %%Page: 5 6 5 5 bop -9 -460 a FG(CONTENTS)3178 b FK(5)p eop %%Page: 6 7 6 6 bop -9 -460 a FG(1)97 b(BOOLEAN)33 b(EXPRESSIONS)2368 b FK(6)-9 -171 y FH(1)161 b(Bo)t(olean)54 b(Expressions)-9 48 y FK(The)36 b(classical)e(calculus)h(for)h(dealing)e(with)h FD(truth)k(values)k FK(consists)36 b(of)g FD(Bo)-5 b(ole)g(an)36 b(variables)43 b FC(x;)17 b(y)t(;)g(:::)p FK(,)-9 168 y(the)33 b(constan)m(ts)h FD(true)40 b FK(1)32 b(and)h FD(false)39 b FK(0,)33 b(the)g(op)s(erators)f(of)g FD(c)-5 b(onjunction)40 b FI(^)p FK(,)33 b FD(disjunction)39 b FI(_)p FK(,)33 b FD(ne)-5 b(gation)-9 289 y FI(:)p FK(,)44 b FD(implic)-5 b(ation)47 b FI(\))p FK(,)c(and)f FD(bi-implic)-5 b(ation)47 b FI(,)41 b FK(whic)m(h)h(together)f(form)f (the)i(Bo)s(olean)e(expressions.)-9 409 y(Sometimes)28 b(the)i(v)-5 b(ariables)29 b(are)h(called)f FD(pr)-5 b(op)g(ositional)31 b(variables)37 b FK(or)29 b FD(pr)-5 b(op)g(ositional)31 b(letters)39 b FK(and)30 b(the)-9 530 y(Bo)s(olean)h(expressions)j(are)f(then)g(kno)m(wn)h(as)f FD(Pr)-5 b(op)g(ositional)34 b(L)-5 b(o)g(gic)p FK(.)137 650 y(F)d(ormally)g(,)29 b(Bo)s(olean)j(expressions)i(are)f(generated)g (from)e(the)i(follo)m(wing)d(grammar:)899 838 y FC(t)61 b FK(::=)f FC(x)28 b FI(j)g FK(0)f FI(j)g FK(1)h FI(j)f(:)p FC(t)i FI(j)e FC(t)22 b FI(^)h FC(t)28 b FI(j)f FC(t)22 b FI(_)h FC(t)28 b FI(j)f FC(t)h FI(\))f FC(t)h FI(j)g FC(t)g FI(,)f FC(t;)-9 1026 y FK(where)c FC(x)f FK(ranges)g(o)m(v)m(er) h(a)f(set)h(of)e(Bo)s(olean)g(v)-5 b(ariables.)38 b(This)22 b(is)g(called)f(the)h FD(abstr)-5 b(act)25 b(syntax)34 b FK(of)21 b(Bo)s(olean)-9 1146 y(expressions.)44 b(The)31 b(concrete)h(syn)m(tax)g(includes)e(paren)m(theses)j(to)d(solv)m(e)g (am)m(biguities.)40 b(Moreo)m(v)m(er,)33 b(as)-9 1266 y(a)39 b(common)g(con)m(v)m(en)m(tion)i(it)e(is)g(assumed)h(that)g(the) g(op)s(erators)g(bind)g(according)f(to)g(their)h(relativ)m(e)-9 1387 y(priorit)m(y)-8 b(.)42 b(The)33 b(priorities)e(are,)h(with)g(the) h(highest)g(\014rst:)44 b FI(:)p FK(,)33 b FI(^)p FK(,)g FI(_)p FK(,)g FI(,)p FK(,)f FI(\))p FK(.)43 b(Hence,)34 b(for)e(example)857 1575 y FI(:)p FC(x)978 1590 y FB(1)1040 1575 y FI(^)23 b FC(x)1184 1590 y FB(2)1246 1575 y FI(_)f FC(x)1389 1590 y FB(3)1457 1575 y FI(\))27 b FC(x)1639 1590 y FB(4)1707 1575 y FK(=)g(\(\(\()p FI(:)p FC(x)2045 1590 y FB(1)2085 1575 y FK(\))22 b FI(^)h FC(x)2289 1590 y FB(2)2329 1575 y FK(\))f FI(_)g FC(x)2532 1590 y FB(3)2572 1575 y FK(\))28 b FI(\))f FC(x)2820 1590 y FB(4)2877 1575 y FC(:)-9 1763 y FK(A)d(Bo)s(olean)g(expression)i(with)e(v)-5 b(ariables)24 b FC(x)1584 1778 y FB(1)1624 1763 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1898 1778 y FA(n)1969 1763 y FK(denotes)26 b(for)f(eac)m(h)g(assignmen)m(t)g(of)f(truth)h(v)-5 b(alues)-9 1883 y(to)36 b(the)h(v)-5 b(ariables)35 b(itself)h(a)g(truth)h(v)-5 b(alue)36 b(according)g(to)g(the)h(standard)g(truth)g(tables,)g(see)h (\014gure)f(1.)-9 2003 y FD(T)-7 b(ruth)43 b(assignments)48 b FK(are)42 b(written)f(as)h(sequences)j(of)d(assignmen)m(ts)g(of)f(v) -5 b(alues)41 b(to)h(v)-5 b(ariables,)43 b(e.g.,)-9 2124 y([0)p FC(=x)171 2139 y FB(1)210 2124 y FC(;)17 b FK(1)p FC(=x)407 2139 y FB(2)446 2124 y FC(;)g FK(0)p FC(=x)643 2139 y FB(3)682 2124 y FC(;)g FK(1)p FC(=x)879 2139 y FB(4)918 2124 y FK(])31 b(whic)m(h)g(assigns)g(0)f(to)g FC(x)1829 2139 y FB(1)1900 2124 y FK(and)g FC(x)2142 2139 y FB(3)2182 2124 y FK(,)h(1)g(to)f FC(x)2492 2139 y FB(2)2562 2124 y FK(and)h FC(x)2805 2139 y FB(4)2845 2124 y FK(.)43 b(With)30 b(this)g(particular)-9 2244 y(truth)g(assignmen)m(t)g(the)g(ab)s(o)m(v)m(e)h(expression)g(has)g(v) -5 b(alue)29 b(1,)i(whereas)g([0)p FC(=x)2723 2259 y FB(1)2763 2244 y FC(;)17 b FK(1)p FC(=x)2960 2259 y FB(2)2999 2244 y FC(;)g FK(0)p FC(=x)3196 2259 y FB(3)3235 2244 y FC(;)g FK(0)p FC(=x)3432 2259 y FB(4)3471 2244 y FK(])30 b(yields)-9 2364 y(0.)p 685 2557 282 4 v 683 2677 4 121 v 815 2677 V 859 2641 a FI(:)p 965 2677 V 685 2681 282 4 v 683 2801 4 121 v 727 2765 a FK(0)p 815 2801 V 91 w(1)p 965 2801 V 683 2921 V 727 2885 a(1)p 815 2921 V 91 w(0)p 965 2921 V 685 2925 282 4 v 1064 2557 414 4 v 1062 2677 4 121 v 1106 2641 a FI(^)p 1212 2677 V 83 w FK(0)83 b(1)p 1475 2677 V 1064 2681 414 4 v 1062 2801 4 121 v 1114 2765 a(0)p 1212 2801 V 92 w(0)g(0)p 1475 2801 V 1062 2921 V 1114 2885 a(1)p 1212 2921 V 92 w(0)g(1)p 1475 2921 V 1064 2925 414 4 v 1575 2557 V 1573 2677 4 121 v 1616 2641 a FI(_)p 1722 2677 V 84 w FK(0)f(1)p 1986 2677 V 1575 2681 414 4 v 1573 2801 4 121 v 1625 2765 a(0)p 1722 2801 V 92 w(0)g(1)p 1986 2801 V 1573 2921 V 1625 2885 a(1)p 1722 2921 V 92 w(1)g(1)p 1986 2921 V 1575 2925 414 4 v 2085 2557 447 4 v 2083 2677 4 121 v 2127 2641 a FI(\))p 2266 2677 V 82 w FK(0)h(1)p 2530 2677 V 2085 2681 447 4 v 2083 2801 4 121 v 2152 2765 a(0)p 2266 2801 V 108 w(1)g(1)p 2530 2801 V 2083 2921 V 2152 2885 a(1)p 2266 2921 V 108 w(0)g(1)p 2530 2921 V 2085 2925 447 4 v 2629 2557 V 2627 2677 4 121 v 2671 2641 a FI(,)p 2810 2677 V 82 w FK(0)g(1)p 3074 2677 V 2629 2681 447 4 v 2627 2801 4 121 v 2696 2765 a(0)p 2810 2801 V 108 w(1)g(0)p 3074 2801 V 2627 2921 V 2696 2885 a(1)p 2810 2921 V 108 w(0)g(1)p 3074 2921 V 2629 2925 447 4 v 1389 3085 a(Figure)31 b(1:)44 b(T)-8 b(ruth)33 b(tables.)137 3406 y(The)46 b(set)g(of)e(truth)i(v)-5 b(alues)45 b(is)f(often)h(denoted)h Fz(B)71 b FK(=)49 b FI(f)p FK(0)p FC(;)17 b FK(1)p FI(g)p FK(.)80 b(If)45 b(w)m(e)h(\014x)g(an)f(ordering)f(of)h(the)-9 3526 y(v)-5 b(ariables)39 b(of)i(a)f(Bo)s(olean)g(expression)i FC(t)f FK(w)m(e)h(can)f(view)g FC(t)g FK(as)g(de\014ning)g(a)g(function)f (from)g Fz(B)3488 3484 y FA(n)3576 3526 y FK(to)h Fz(B)-9 3647 y FK(where)e FC(n)f FK(is)g(the)g(n)m(um)m(b)s(er)g(of)g(v)-5 b(ariables.)59 b(Notice,)39 b(that)f(the)g(particular)e(ordering)h(c)m (hosen)j(for)e(the)-9 3767 y(v)-5 b(ariables)38 b(is)h(essen)m(tial)h (for)f(what)g(function)h(is)f(de\014ned.)66 b(Consider)40 b(for)f(example)g(the)h(expression)-9 3887 y FC(x)28 b FI(\))g FC(y)t FK(.)44 b(If)33 b(w)m(e)h(c)m(ho)s(ose)g(the)g (ordering)e FC(x)d(<)f(y)36 b FK(then)e(this)f(is)f(the)h(function)g FC(f)11 b FK(\()p FC(x;)17 b(y)t FK(\))27 b(=)i FC(x)f FI(\))g FC(y)t FK(,)33 b(true)g(if)-9 4008 y(the)h(\014rst)h(argumen)m (t)f(implies)e(the)j(second,)h(but)f(if)e(w)m(e)i(c)m(ho)s(ose)h(the)f (ordering)e FC(y)h(<)d(x)j FK(then)h(it)f(is)g(the)-9 4128 y(function)i FC(f)11 b FK(\()p FC(y)t(;)17 b(x)p FK(\))33 b(=)h FC(x)h FI(\))f FC(y)t FK(,)j(true)g(if)f(the)h(second)g (argumen)m(t)g(implies)d(the)j(\014rst.)56 b(When)37 b(w)m(e)h(later)-9 4249 y(consider)f(compact)f(represen)m(tations)i(of) e(Bo)s(olean)g(expressions,)j(suc)m(h)f(v)-5 b(ariable)35 b(orderings)i(pla)m(y)f(a)-9 4369 y(crucial)31 b(role.)137 4489 y(Tw)m(o)41 b(Bo)s(olean)f(expressions)i FC(t)f FK(and)g FC(t)1573 4453 y Fy(0)1637 4489 y FK(are)g(said)f(to)g(b)s(e)h (equal)f(if)g(they)h(yield)f(the)h(same)g(truth)-9 4610 y(v)-5 b(alue)36 b(for)h(all)d(truth)k(assignmen)m(ts.)57 b(A)37 b(Bo)s(olean)f(expression)i(is)f(a)f FD(tautolo)-5 b(gy)47 b FK(if)35 b(it)h(yields)h(true)h(for)-9 4730 y(all)30 b(truth)j(assignmen)m(ts;)g(it)e(is)h FD(satis\014able)39 b FK(if)32 b(it)f(yields)h(true)h(for)f(at)h(least)f(one)h(truth)f (assignmen)m(t.)-9 4922 y FF(Exercise)k(1.1)49 b FK(Sho)m(w)d(ho)m(w)g (all)d(op)s(erators)i(can)g(b)s(e)g(enco)s(ded)i(using)d(only)h FI(:)h FK(and)f FI(_)p FK(.)81 b(Use)46 b(this)-9 5042 y(to)38 b(argue)g(that)g(an)m(y)h(Bo)s(olean)e(expression)j(can)f(b)s (e)f(written)h(using)f(only)g FI(_)p FK(,)i FI(^)p FK(,)g(v)-5 b(ariables,)39 b(and)g FI(:)-9 5162 y FK(applied)31 b(to)h(v)-5 b(ariables.)p eop %%Page: 7 8 7 7 bop -9 -460 a FG(2)97 b(NORMAL)33 b(F)m(ORMS)2755 b FK(7)-9 -171 y FF(Exercise)36 b(1.2)49 b FK(Argue)42 b(that)f FC(t)h FK(and)g FC(t)1456 -207 y Fy(0)1521 -171 y FK(are)g(equal)f(if)f(and)i(only)f(if)g FC(t)i FI(,)g FC(t)2834 -207 y Fy(0)2899 -171 y FK(is)e(a)h(tautology)-8 b(.)69 b(Is)42 b(it)-9 -51 y(p)s(ossible)31 b(to)i(sa)m(y)g(whether)h FC(t)f FK(is)f(satis\014able)g(from)f(the)i(fact)g(that)f FI(:)p FC(t)h FK(is)f(a)h(tautology?)-9 282 y FH(2)161 b(Normal)54 b(F)-13 b(orms)-9 501 y FK(A)29 b(Bo)s(olean)f(expression)j (is)e(in)g FD(Disjunctive)i(Normal)g(F)-7 b(orm)31 b(\(DNF\))i FK(if)28 b(it)g(consists)j(of)e(a)g(disjunction)-9 622 y(of)j(conjunctions)h(of)f(v)-5 b(ariables)31 b(and)i(negations)f(of)g (v)-5 b(ariables,)31 b(i.e.,)h(if)g(it)f(is)h(of)h(the)g(form)932 842 y(\()p FC(t)1005 800 y FB(1)1005 866 y(1)1067 842 y FI(^)23 b FC(t)1191 800 y FB(1)1191 866 y(2)1253 842 y FI(^)f(\001)17 b(\001)g(\001)k(^)h FC(t)1603 800 y FB(1)1603 866 y FA(k)1640 875 y Fx(1)1679 842 y FK(\))g FI(_)g(\001)17 b(\001)g(\001)k(_)h FK(\()p FC(t)2127 800 y FA(l)2127 866 y FB(1)2189 842 y FI(^)h FC(t)2313 800 y FA(l)2313 866 y FB(2)2374 842 y FI(^)g(\001)17 b(\001)g(\001)j(^)j FC(t)2725 800 y FA(l)2725 866 y(k)2762 878 y Fw(l)2790 842 y FK(\))817 b(\(1\))-9 1077 y(where)33 b(eac)m(h)h FC(t)527 1030 y FA(j)527 1102 y(i)596 1077 y FK(is)e(either)h(a)f(v)-5 b(ariable)31 b FC(x)1473 1030 y FA(j)1473 1102 y(i)1542 1077 y FK(or)h(a)h(negation)e(of)h(a)h (v)-5 b(ariable)31 b FI(:)p FC(x)2818 1030 y FA(j)2818 1102 y(i)2855 1077 y FK(.)43 b(An)33 b(example)f(is)1465 1297 y(\()p FC(x)23 b FI(^)f(:)p FC(y)t FK(\))g FI(_)h FK(\()p FI(:)p FC(x)g FI(^)f FC(y)t FK(\))-9 1517 y(whic)m(h)31 b(is)g(a)h(w)m(ell-kno)m(wn)f(function)g(of)g FC(x)h FK(and)f FC(y)k FK(\(whic)m(h)d(one?\).)43 b(A)32 b(more)e(succinct)j (presen)m(tation)e(of)-9 1637 y(\(1\))h(is)g(to)g(write)g(it)g(using)g (indexed)i(v)m(ersions)f(of)f FI(^)h FK(and)g FI(_)p FK(:)1642 1850 y FA(l)1598 1880 y Fv(_)1592 2090 y FA(j)t FB(=1)1731 1774 y Fv(0)1731 1954 y(@)1841 1839 y FA(k)1878 1849 y Fw(j)1820 1880 y Fv(^)1818 2090 y FA(i)p FB(=1)1949 1974 y FC(t)1984 1927 y FA(j)1984 2000 y(i)2021 1774 y Fv(1)2021 1954 y(A)2141 1974 y FC(:)-9 2311 y FK(Similarly)-8 b(,)28 b(a)k FD(Conjunctive)i(Normal)h(F)-7 b(orm)34 b(\(CNF\))h FK(is)d(an)h(expression)h(that)e(can)h(b)s(e)g(written)f (as)1673 2524 y FA(l)1628 2554 y Fv(^)1622 2764 y FA(j)t FB(=1)1761 2448 y Fv(0)1761 2628 y(@)1871 2513 y FA(k)1908 2523 y Fw(j)1850 2554 y Fv(_)1849 2764 y FA(i)p FB(=1)1979 2649 y FC(t)2014 2601 y FA(j)2014 2674 y(i)2051 2448 y Fv(1)2051 2628 y(A)-9 3002 y FK(where)40 b(eac)m(h)h FC(t)541 2955 y FA(j)541 3028 y(i)617 3002 y FK(is)e(either)g(a)h(v)-5 b(ariable)38 b(or)h(a)g(negated)h(v)-5 b(ariable.)63 b(It)39 b(is)g(not)h(di\016cult)f(to)g(pro)m(v)m(e)i(the)-9 3122 y(follo)m(wing)29 b(prop)s(osition:)-9 3326 y FF(Prop)s(osition)35 b(1)49 b FD(A)n(ny)32 b(Bo)-5 b(ole)g(an)30 b(expr)-5 b(ession)31 b(is)g(e)-5 b(qual)32 b(to)g(an)f(expr)-5 b(ession)31 b(in)h(CNF)f(and)g(an)h(expr)-5 b(es-)-9 3446 y(sion)34 b(in)g(DNF.)-9 3650 y FK(In)40 b(general,)h(it)e(is)h (hard)g(to)g(determine)f(whether)j(a)d(Bo)s(olean)g(expression)j(is)d (satis\014able.)65 b(This)41 b(is)-9 3770 y(made)32 b(precise)h(b)m(y)g (a)g(famous)f(theorem)g(due)h(to)f(Co)s(ok)h([Co)s(o71]:)-9 3973 y FF(Theorem)k(1)g(\(Co)s(ok\))48 b FD(Satis\014ability)35 b(of)f(Bo)-5 b(ole)g(an)34 b(expr)-5 b(essions)33 b(is)i(NP-c)-5 b(omplete.)-9 4177 y FK(\(F)d(or)29 b(readers)i(unfamiliar)c(with)j (the)g(notion)g(of)g(NP-completeness)h(the)f(follo)m(wing)e(short)j (summary)-9 4297 y(of)41 b(the)h(pragmatic)e(consequences)46 b(su\016ces.)73 b(Problems)41 b(that)h(are)g(NP-complete)f(can)h(b)s(e) g(solv)m(ed)-9 4418 y(b)m(y)c(algorithms)d(that)j(run)g(in)e(exp)s (onen)m(tial)i(time.)57 b(No)38 b(p)s(olynomial)c(time)i(algorithms)f (are)j(kno)m(wn)-9 4538 y(to)44 b(exist)h(for)f(an)m(y)h(of)f(the)h (NP-complete)f(problems)f(and)i(it)e(is)i(v)m(ery)h(unlik)m(ely)d(that) i(p)s(olynomial)-9 4658 y(time)40 b(algorithms)e(should)j(indeed)h (exist)g(although)e(nob)s(o)s(dy)h(has)h(y)m(et)g(b)s(een)g(able)f(to)g (pro)m(v)m(e)i(their)-9 4779 y(non-existence.\))137 4899 y(Co)s(ok's)35 b(theorem)g(ev)m(en)h(holds)e(when)i(restricted)f(to)f (expressions)j(in)d(CNF.)g(F)-8 b(or)34 b(DNFs)h(satis\014-)-9 5019 y(abilit)m(y)30 b(is)j(decidable)f(in)g(p)s(olynomial)e(time)h (but)i(for)g(DNFs)f(the)i(tautology)d(c)m(hec)m(k)36 b(is)c(hard)h(\(co-NP)-9 5140 y(complete\).)52 b(Although)34 b(satis\014abilit)m(y)g(is)h(easy)i(for)e(DNFs)g(and)h(tautology)f(c)m (hec)m(k)i(easy)g(for)e(CNFs,)p eop %%Page: 8 9 8 8 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) 2102 b FK(8)-9 -171 y(this)30 b(do)s(es)h(not)g(help)g(us)g(since)h (the)f(con)m(v)m(ersion)h(b)s(et)m(w)m(een)h(CNFs)e(and)g(DNFs)g(is)f (exp)s(onen)m(tial)h(as)g(the)-9 -51 y(follo)m(wing)e(example)j(sho)m (ws.)137 70 y(Consider)h(the)g(follo)m(wing)d(CNF)j(o)m(v)m(er)g(the)g (v)-5 b(ariables)31 b FC(x)2199 34 y FB(1)2199 94 y(0)2239 70 y FC(;)17 b(:)g(:)g(:)f(x)2469 34 y FA(n)2469 94 y FB(0)2517 70 y FC(;)h(x)2616 34 y FB(1)2616 94 y(1)2655 70 y FC(;)g(:)g(:)g(:)f(;)h(x)2929 34 y FA(n)2929 94 y FB(1)2976 70 y FK(:)1062 269 y(\()p FC(x)1155 228 y FB(1)1155 293 y(0)1217 269 y FI(_)23 b FC(x)1361 228 y FB(1)1361 293 y(1)1401 269 y FK(\))f FI(^)g FK(\()p FC(x)1642 228 y FB(2)1642 293 y(0)1704 269 y FI(_)h FC(x)1848 228 y FB(2)1848 293 y(1)1888 269 y FK(\))f FI(^)g(\001)17 b(\001)g(\001)k(^)h FK(\()p FC(x)2356 228 y FA(n)2356 293 y FB(0)2426 269 y FI(_)g FC(x)2569 228 y FA(n)2569 293 y FB(1)2617 269 y FK(\))17 b FC(:)-9 468 y FK(The)25 b(corresp)s(onding)g(DNF)f(is)g(a)g(disjunction)g(whic)m(h)h(has)h(a)e (disjunct)h(for)f(eac)m(h)i(of)e(the)h FC(n)p FK(-digit)d(binary)-9 588 y(n)m(um)m(b)s(ers)31 b(from)f(000)17 b FC(:)g(:)g(:)e FK(000)30 b(to)h(111)17 b FC(:)g(:)g(:)e FK(111)30 b(|)g(the)h FC(i)p FK('th)h(digit)c(represen)m(ting)k(a)f(c)m(hoice)g(of)g(either)f FC(x)3730 552 y FA(i)3730 613 y FB(0)-9 709 y FK(\(for)i(0\))g(or)g FC(x)471 673 y FA(i)471 733 y FB(1)543 709 y FK(\(for)g(1\):)1246 826 y(\()p FC(x)1339 790 y FB(1)1339 851 y(0)1401 826 y FI(^)22 b FC(x)1544 790 y FB(2)1544 851 y(0)1606 826 y FI(^)h(\001)17 b(\001)g(\001)j(^)j FC(x)1977 785 y FA(n)p Fy(\000)p FB(1)1977 851 y(0)2137 826 y FI(^)f FC(x)2280 790 y FA(n)2280 851 y FB(0)2327 826 y FK(\))105 b FI(_)1246 947 y FK(\()p FC(x)1339 910 y FB(1)1339 971 y(0)1401 947 y FI(^)22 b FC(x)1544 910 y FB(2)1544 971 y(0)1606 947 y FI(^)h(\001)17 b(\001)g(\001)j(^)j FC(x)1977 905 y FA(n)p Fy(\000)p FB(1)1977 971 y(0)2137 947 y FI(^)f FC(x)2280 910 y FA(n)2280 971 y FB(1)2327 947 y FK(\))105 b FI(_)1792 1042 y FK(.)1792 1075 y(.)1792 1109 y(.)1246 1229 y(\()p FC(x)1339 1193 y FB(1)1339 1254 y(1)1401 1229 y FI(^)22 b FC(x)1544 1193 y FB(2)1544 1254 y(1)1606 1229 y FI(^)h(\001)17 b(\001)g(\001)j(^)j FC(x)1977 1188 y FA(n)p Fy(\000)p FB(1)1977 1253 y(1)2137 1229 y FI(^)f FC(x)2280 1193 y FA(n)2280 1254 y FB(0)2327 1229 y FK(\))105 b FI(_)1224 1349 y FK(\()p FC(x)1317 1313 y FB(1)1317 1374 y(1)1379 1349 y FI(^)22 b FC(x)1522 1313 y FB(2)1522 1374 y(1)1584 1349 y FI(^)h(\001)17 b(\001)g(\001)j(^)j FC(x)1955 1308 y FA(n)p Fy(\000)p FB(1)1955 1374 y(1)2115 1349 y FI(^)f FC(x)2258 1313 y FA(n)2258 1374 y FB(1)2306 1349 y FK(\))17 b FC(:)-9 1508 y FK(Whereas)30 b(the)h(original)26 b(expression)31 b(has)f(size)g(prop)s(ortional)d(to)i FC(n)h FK(the)g(DNF)f(has)h(size)g(prop)s(ortional)-9 1628 y(to)i FC(n)p FK(2)217 1592 y FA(n)264 1628 y FK(.)137 1749 y(The)40 b(next)h(section)e(in)m(tro)s(duces)h(a)g(normal)d(form)i (that)g(has)h(more)f(desirable)g(prop)s(erties)g(than)-9 1869 y(DNFs)32 b(and)h(CNFs.)44 b(In)33 b(particular,)e(there)i(are)g (e\016cien)m(t)g(algorithms)d(for)j(determining)e(the)i(satis\014-)-9 1989 y(abilit)m(y)d(and)j(tautology)e(questions.)-9 2194 y FF(Exercise)36 b(2.1)49 b FK(Describ)s(e)36 b(a)g(p)s(olynomial)d (time)j(algorithm)d(for)j(determining)f(whether)j(a)e(DNF)g(is)-9 2314 y(satis\014able.)-9 2519 y FF(Exercise)g(2.2)49 b FK(Describ)s(e)37 b(a)f(p)s(olynomial)e(time)h(algorithm)f(for)i (determining)g(whether)i(a)e(CNF)i(is)-9 2639 y(a)32 b(tautology)-8 b(.)-9 2844 y FF(Exercise)36 b(2.3)49 b FK(Giv)m(e)32 b(a)g(pro)s(of)g(of)g(prop)s(osition)f(1.)-9 3048 y FF(Exercise)36 b(2.4)49 b FK(Explain)28 b(ho)m(w)i(Co)s(ok's)f (theorem)g(implies)e(that)i(c)m(hec)m(king)h(in-equiv)-5 b(alence)28 b(b)s(et)m(w)m(een)-9 3168 y(Bo)s(olean)j(expressions)j(is) e(NP-hard.)-9 3373 y FF(Exercise)k(2.5)49 b FK(Explain)33 b(ho)m(w)i(the)f(question)h(of)f(tautology)e(and)j(satis\014abilit)m(y) d(can)i(b)s(e)g(decided)h(if)-9 3493 y(w)m(e)e(are)g(giv)m(en)f(an)h (algorithm)c(for)j(c)m(hec)m(king)i(equiv)-5 b(alence)33 b(b)s(et)m(w)m(een)i(Bo)s(olean)c(expressions.)-9 3823 y FH(3)161 b(Binary)54 b(Decision)g(Diagrams)-9 4042 y FK(Let)32 b FC(x)c FI(!)g FC(y)424 4057 y FB(0)463 4042 y FC(;)17 b(y)555 4057 y FB(1)626 4042 y FK(b)s(e)33 b(the)g FD(if-then-else)38 b FK(op)s(erator)32 b(de\014ned)i(b)m(y)1151 4241 y FC(x)28 b FI(!)f FC(y)1409 4256 y FB(0)1448 4241 y FC(;)17 b(y)1540 4256 y FB(1)1639 4241 y FK(=)60 b(\()p FC(x)22 b FI(^)h FC(y)2027 4256 y FB(0)2066 4241 y FK(\))f FI(_)h FK(\()p FI(:)p FC(x)g FI(^)f FC(y)2533 4256 y FB(1)2572 4241 y FK(\))-9 4440 y(hence,)41 b FC(t)c FI(!)g FC(t)540 4455 y FB(0)580 4440 y FC(;)17 b(t)659 4455 y FB(1)736 4440 y FK(is)38 b(true)h(if)e FC(t)h FK(and)g FC(t)1450 4455 y FB(0)1528 4440 y FK(are)g(true)h(or)f(if)f FC(t)h FK(is)g(false)g(and)g FC(t)2761 4455 y FB(1)2839 4440 y FK(is)f(true.)61 b(W)-8 b(e)39 b(call)d FC(t)j FK(the)-9 4560 y FD(test)34 b(expr)-5 b(ession)p FK(.)41 b(All)30 b(op)s(erators)h(can)h(easily)f(b)s(e)g(expressed)k(using)c (only)g(the)g(if-then-else)g(op)s(erator)-9 4681 y(and)37 b(the)g(constan)m(ts)i(0)d(and)i(1.)56 b(Moreo)m(v)m(er,)40 b(this)d(can)g(b)s(e)h(done)f(in)f(suc)m(h)j(a)e(w)m(a)m(y)h(that)f (all)e(tests)j(are)-9 4801 y(p)s(erformed)c(only)h(on)g(\(un-negated\)) g(v)-5 b(ariables)34 b(and)h(v)-5 b(ariables)34 b(o)s(ccur)i(in)e(no)h (other)g(places.)52 b(Hence)-9 4922 y(the)40 b(op)s(erator)g(giv)m(es)h (rise)f(to)g(a)h(new)g(kind)f(of)g(normal)f(form.)66 b(F)-8 b(or)39 b(example,)j FI(:)p FC(x)f FK(is)f(\()p FC(x)i FI(!)f FK(0)p FC(;)17 b FK(1\))f(,)-9 5042 y FC(x)28 b FI(,)f FC(y)34 b FK(is)d FC(x)d FI(!)f FK(\()p FC(y)k FI(!)c FK(1)p FC(;)17 b FK(0\))p FC(;)g FK(\()p FC(y)30 b FI(!)d FK(0)p FC(;)17 b FK(1\).)42 b(Since)32 b(v)-5 b(ariables)30 b(m)m(ust)h(only)g(o)s(ccur)g(in)f(tests)j(the)e(Bo)s (olean)-9 5162 y(expression)i FC(x)g FK(is)f(represen)m(ted)k(as)c FC(x)c FI(!)g FK(1)p FC(;)17 b FK(0)f(.)p eop %%Page: 9 10 9 9 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) 2102 b FK(9)p 215 -267 3364 4 v 215 117 4 385 v 243 -168 a(An)49 b FD(If-then-else)f(Normal)i(F)-7 b(orm)48 b(\(INF\))k FK(is)c(a)h(Bo)s(olean)e(expression)j(built)d(en)m(tirely)243 -47 y(from)28 b(the)h(if-then-else)f(op)s(erator)h(and)g(the)h(constan) m(ts)g(0)f(and)g(1)g(suc)m(h)i(that)e(all)e(tests)j(are)243 73 y(p)s(erformed)i(only)g(on)h(v)-5 b(ariables.)p 3575 117 V 215 120 3364 4 v 137 312 a(If)28 b(w)m(e)i(b)m(y)g FC(t)p FK([0)p FC(=x)p FK(])f(denote)g(the)g(Bo)s(olean)f(expression)i (obtained)e(b)m(y)h(replacing)f FC(x)h FK(with)f(0)h(in)f FC(t)g FK(then)-9 432 y(it)j(is)h(not)h(hard)f(to)g(see)i(that)f(the)g (follo)m(wing)c(equiv)-5 b(alence)33 b(holds:)1373 652 y FC(t)61 b FK(=)f FC(x)28 b FI(!)f FC(t)p FK([1)p FC(=x)p FK(])q FC(;)17 b(t)p FK([0)p FC(=x)p FK(])f FC(:)1258 b FK(\(2\))-9 872 y(This)30 b(is)f(kno)m(wn)i(as)f(the)g FD(Shannon)h(exp)-5 b(ansion)36 b FK(of)30 b FC(t)g FK(with)f(resp)s (ect)i(to)f FC(x)p FK(.)43 b(This)30 b(simple)e(equation)i(has)-9 992 y(a)37 b(lot)g(of)g(useful)h(applications.)57 b(The)38 b(\014rst)h(is)e(to)g(generate)i(an)e(INF)h(from)e(an)m(y)j(expression) g FC(t)p FK(.)59 b(If)38 b FC(t)-9 1113 y FK(con)m(tains)31 b(no)g(v)-5 b(ariables)29 b(it)h(is)h(either)g(equiv)-5 b(alen)m(t)31 b(to)f(0)h(or)g(1)f(whic)m(h)i(is)f(an)f(INF.)i (Otherwise)f(w)m(e)h(form)-9 1233 y(the)h(Shannon)g(expansion)g(of)g FC(t)g FK(with)f(resp)s(ect)i(to)f(one)g(of)f(the)i(v)-5 b(ariables)31 b FC(x)i FK(in)g FC(t)p FK(.)44 b(Th)m(us)34 b(since)g FC(t)p FK([0)p FC(=x)p FK(])-9 1354 y(and)e FC(t)p FK([1)p FC(=x)p FK(])g(b)s(oth)f(con)m(tain)h(one)g(less)g(v)-5 b(ariable)30 b(than)i FC(t)p FK(,)h(w)m(e)g(can)f(recursiv)m(ely)h (\014nd)f(INFs)g(for)g(b)s(oth)f(of)-9 1474 y(these;)i(call)e(them)i FC(t)731 1489 y FB(0)803 1474 y FK(and)f FC(t)1027 1489 y FB(1)1067 1474 y FK(.)44 b(An)32 b(INF)h(for)f FC(t)h FK(is)f(no)m(w)h(simply)1665 1694 y FC(x)28 b FI(!)f FC(t)1910 1709 y FB(1)1950 1694 y FC(;)17 b(t)2029 1709 y FB(0)2068 1694 y FC(:)-9 1914 y FK(W)-8 b(e)33 b(ha)m(v)m(e)g(pro)m (v)m(ed:)-9 2117 y FF(Prop)s(osition)i(2)49 b FD(A)n(ny)35 b(Bo)-5 b(ole)g(an)33 b(expr)-5 b(ession)34 b(is)g(e)-5 b(quivalent)35 b(to)g(an)f(expr)-5 b(ession)34 b(in)g(INF.)-9 2346 y FF(Example)i(1)49 b FK(Consider)37 b(the)f(Bo)s(olean)f (expression)j FC(t)c FK(=)g(\()p FC(x)2265 2361 y FB(1)2339 2346 y FI(,)f FC(y)2520 2361 y FB(1)2559 2346 y FK(\))25 b FI(^)g FK(\()p FC(x)2806 2361 y FB(2)2880 2346 y FI(,)33 b FC(y)3061 2361 y FB(2)3100 2346 y FK(\).)55 b(If)36 b(w)m(e)h(\014nd)g(an)-9 2466 y(INF)k(of)g FC(t)h FK(b)m(y)g(selecting) f(in)g(order)h(the)g(v)-5 b(ariables)40 b FC(x)1982 2481 y FB(1)2022 2466 y FC(;)17 b(y)2114 2481 y FB(1)2153 2466 y FC(;)g(x)2252 2481 y FB(2)2291 2466 y FC(;)g(y)2383 2481 y FB(2)2463 2466 y FK(on)42 b(whic)m(h)g(to)f(p)s(erform)g (Shannon)-9 2586 y(expansions,)33 b(w)m(e)h(get)e(the)h(expressions) 1505 2806 y FC(t)83 b FK(=)g FC(x)1837 2821 y FB(1)1904 2806 y FI(!)28 b FC(t)2067 2821 y FB(1)2106 2806 y FC(;)17 b(t)2185 2821 y FB(0)1465 2952 y FC(t)1500 2967 y FB(0)1623 2952 y FK(=)83 b FC(y)1830 2967 y FB(1)1897 2952 y FI(!)27 b FK(0)p FC(;)17 b(t)2152 2967 y FB(00)1465 3097 y FC(t)1500 3112 y FB(1)1623 3097 y FK(=)83 b FC(y)1830 3112 y FB(1)1897 3097 y FI(!)27 b FC(t)2059 3112 y FB(11)2134 3097 y FC(;)17 b FK(0)1430 3242 y FC(t)1465 3257 y FB(00)1623 3242 y FK(=)83 b FC(x)1837 3257 y FB(2)1904 3242 y FI(!)28 b FC(t)2067 3257 y FB(001)2177 3242 y FC(;)17 b(t)2256 3257 y FB(000)1430 3388 y FC(t)1465 3403 y FB(11)1623 3388 y FK(=)83 b FC(x)1837 3403 y FB(2)1904 3388 y FI(!)28 b FC(t)2067 3403 y FB(111)2177 3388 y FC(;)17 b(t)2256 3403 y FB(110)1395 3533 y FC(t)1430 3548 y FB(000)1623 3533 y FK(=)83 b FC(y)1830 3548 y FB(2)1897 3533 y FI(!)27 b FK(0)p FC(;)17 b FK(1)1395 3678 y FC(t)1430 3693 y FB(001)1623 3678 y FK(=)83 b FC(y)1830 3693 y FB(2)1897 3678 y FI(!)27 b FK(1)p FC(;)17 b FK(0)1395 3823 y FC(t)1430 3838 y FB(110)1623 3823 y FK(=)83 b FC(y)1830 3838 y FB(2)1897 3823 y FI(!)27 b FK(0)p FC(;)17 b FK(1)1395 3969 y FC(t)1430 3984 y FB(111)1623 3969 y FK(=)83 b FC(y)1830 3984 y FB(2)1897 3969 y FI(!)27 b FK(1)p FC(;)17 b FK(0)-9 4189 y(Figure)31 b(2)h(sho)m(ws)j(the)e(expression)g(as)g(a)f (tree.)45 b(Suc)m(h)33 b(a)g(tree)g(is)f(also)f(called)h(a)g FD(de)-5 b(cision)34 b(tr)-5 b(e)g(e.)43 b Fu(\003)-9 4417 y FK(A)31 b(lot)e(of)i(the)g(expressions)i(are)e(easily)g(seen)h (to)f(b)s(e)g(iden)m(tical,)f(so)h(it)f(is)g(tempting)g(to)h(iden)m (tify)f(them.)-9 4537 y(F)-8 b(or)40 b(example,)i(instead)f(of)g FC(t)1093 4552 y FB(110)1244 4537 y FK(w)m(e)h(can)g(use)g FC(t)1796 4552 y FB(000)1947 4537 y FK(and)f(instead)g(of)f FC(t)2644 4552 y FB(111)2796 4537 y FK(w)m(e)i(can)f(use)h FC(t)3347 4552 y FB(001)3457 4537 y FK(.)69 b(If)41 b(w)m(e)-9 4658 y(substitute)e FC(t)488 4673 y FB(000)637 4658 y FK(for)g FC(t)828 4673 y FB(110)977 4658 y FK(in)f(the)h(righ)m(t-hand) f(side)h(of)g FC(t)2112 4673 y FB(11)2226 4658 y FK(and)g(also)f FC(t)2659 4673 y FB(001)2808 4658 y FK(for)g FC(t)2998 4673 y FB(111)3108 4658 y FK(,)j(w)m(e)f(in)e(fact)h(see)-9 4778 y(that)32 b FC(t)237 4793 y FB(00)344 4778 y FK(and)h FC(t)569 4793 y FB(11)677 4778 y FK(are)f(iden)m(tical,)f(and)i(in)f FC(t)1598 4793 y FB(1)1670 4778 y FK(w)m(e)h(can)g(replace)g FC(t)2358 4793 y FB(11)2465 4778 y FK(with)f FC(t)2722 4793 y FB(00)2797 4778 y FK(.)137 4899 y(If)42 b(w)m(e)i(in)d(fact)i (iden)m(tify)e FD(al)5 b(l)53 b FK(equal)42 b(sub)s(expressions)j(w)m (e)e(end)g(up)g(with)f(what)h(is)f(kno)m(wn)i(as)e(a)-9 5019 y FD(binary)i(de)-5 b(cision)44 b(diagr)-5 b(am)49 b FK(\(a)43 b FD(BDD)p FK(\).)f(It)i(is)f(no)g(longer)g(a)g(tree)h(of)e (Bo)s(olean)h(expressions)i(but)e(a)-9 5139 y(directed)32 b(acyclic)h(graph)f(\(D)m(A)m(G\).)p eop %%Page: 10 11 10 10 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) 2054 b FK(10)637 1843 y @beginspecial 0 @llx 0 @lly 296 @urx 243 @ury 2960 @rwi @setspecial %%BeginDocument: inf-ex.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -80.0 271.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 416 m 0 0 l 561 0 l 561 416 l cp clip 0.72000 0.72000 sc 0.500 slw % Ellipse n 319 59 20 20 0 360 DrawEllipse gs col-1 s gr % Polyline n 134 374 m 134 354 l 114 354 l 114 374 l cp gs col-1 s gr % Polyline n 174 374 m 174 354 l 154 354 l 154 374 l cp gs col-1 s gr % Polyline n 154 319 m 164 354 l gs col-1 s gr % Polyline [4] 0 sd n 134 319 m 124 354 l gs col-1 s gr [] 0 sd % Polyline n 214 374 m 214 354 l 194 354 l 194 374 l cp gs col-1 s gr % Polyline n 254 374 m 254 354 l 234 354 l 234 374 l cp gs col-1 s gr % Polyline n 234 319 m 244 354 l gs col-1 s gr % Polyline [4] 0 sd n 214 319 m 204 354 l gs col-1 s gr [] 0 sd % Polyline n 299 374 m 299 354 l 279 354 l 279 374 l cp gs col-1 s gr % Ellipse n 144 299 20 20 0 360 DrawEllipse gs col-1 s gr % Ellipse n 184 219 20 20 0 360 DrawEllipse gs col-1 s gr % Ellipse n 264 139 20 20 0 360 DrawEllipse gs col-1 s gr % Ellipse n 224 299 20 20 0 360 DrawEllipse gs col-1 s gr % Polyline [4] 0 sd n 249 154 m 199 204 l gs col-1 s gr [] 0 sd % Polyline [4] 0 sd n 169 234 m 149 279 l gs col-1 s gr [] 0 sd % Polyline n 280 148 m 289 354 l gs col-1 s gr % Polyline n 199 234 m 224 279 l gs col-1 s gr % Polyline n 479 374 m 479 354 l 459 354 l 459 374 l cp gs col-1 s gr % Polyline n 519 374 m 519 354 l 499 354 l 499 374 l cp gs col-1 s gr % Polyline n 499 319 m 509 354 l gs col-1 s gr % Polyline [4] 0 sd n 479 319 m 469 354 l gs col-1 s gr [] 0 sd % Polyline n 399 374 m 399 354 l 379 354 l 379 374 l cp gs col-1 s gr % Polyline n 439 374 m 439 354 l 419 354 l 419 374 l cp gs col-1 s gr % Polyline n 419 319 m 429 354 l gs col-1 s gr % Polyline [4] 0 sd n 399 319 m 389 354 l gs col-1 s gr [] 0 sd % Polyline n 359 374 m 359 354 l 339 354 l 339 374 l cp gs col-1 s gr % Ellipse n 369 139 20 20 0 360 DrawEllipse gs col-1 s gr % Ellipse n 449 219 20 20 0 360 DrawEllipse gs col-1 s gr % Ellipse n 409 299 20 20 0 360 DrawEllipse gs col-1 s gr % Ellipse n 489 299 20 20 0 360 DrawEllipse gs col-1 s gr % Polyline n 384 149 m 434 204 l gs col-1 s gr % Polyline n 459 234 m 484 279 l gs col-1 s gr % Polyline [4] 0 sd n 435 234 m 415 279 l gs col-1 s gr [] 0 sd % Polyline [4] 0 sd n 354 154 m 349 354 l gs col-1 s gr [] 0 sd % Polyline n 334 69 m 369 119 l gs col-1 s gr % Polyline [4] 0 sd n 304 69 m 264 119 l gs col-1 s gr [] 0 sd $F2psEnd rs %%EndDocument @endspecial 1837 -29 a Ft(x)1884 -17 y Fs(1)688 1801 y Fr(1)198 b(0)g(0)g(1)228 b(0)1510 451 y Ft(y)1551 463 y Fs(1)1027 931 y Ft(x)1074 943 y Fs(2)790 1411 y Ft(y)831 1423 y Fs(2)1270 1411 y Ft(y)1311 1423 y Fs(2)2758 1801 y Fr(0)198 b(1)-762 b(1)198 b(0)-522 b(0)2140 451 y Ft(y)2181 463 y Fs(1)2617 931 y Ft(x)2664 943 y Fs(2)2380 1411 y Ft(y)2421 1423 y Fs(2)2860 1411 y Ft(y)2901 1423 y Fs(2)-9 2046 y FK(Figure)34 b(2:)50 b(A)36 b(decision)f(tree)i(for)e (\()p FC(x)1352 2061 y FB(1)1425 2046 y FI(,)e FC(y)1606 2061 y FB(1)1645 2046 y FK(\))24 b FI(^)h FK(\()p FC(x)1891 2061 y FB(2)1964 2046 y FI(,)33 b FC(y)2145 2061 y FB(2)2184 2046 y FK(\).)53 b(Dashed)36 b(lines)f(denote)i(lo)m(w-branc)m(hes,)-9 2166 y(solid)31 b(lines)g(high-branc)m(hes.)137 2535 y(Applying)h(this)g(idea)g(of)g(sharing,)g FC(t)h FK(can)f(no)m(w)i(b)s (e)e(written)h(as:)1505 2755 y FC(t)83 b FK(=)g FC(x)1837 2770 y FB(1)1904 2755 y FI(!)28 b FC(t)2067 2770 y FB(1)2106 2755 y FC(;)17 b(t)2185 2770 y FB(0)1465 2900 y FC(t)1500 2915 y FB(0)1623 2900 y FK(=)83 b FC(y)1830 2915 y FB(1)1897 2900 y FI(!)27 b FK(0)p FC(;)17 b(t)2152 2915 y FB(00)1465 3045 y FC(t)1500 3060 y FB(1)1623 3045 y FK(=)83 b FC(y)1830 3060 y FB(1)1897 3045 y FI(!)27 b FC(t)2059 3060 y FB(00)2134 3045 y FC(;)17 b FK(0)1430 3190 y FC(t)1465 3205 y FB(00)1623 3190 y FK(=)83 b FC(x)1837 3205 y FB(2)1904 3190 y FI(!)28 b FC(t)2067 3205 y FB(001)2177 3190 y FC(;)17 b(t)2256 3205 y FB(000)1395 3336 y FC(t)1430 3351 y FB(000)1623 3336 y FK(=)83 b FC(y)1830 3351 y FB(2)1897 3336 y FI(!)27 b FK(0)p FC(;)17 b FK(1)1395 3481 y FC(t)1430 3496 y FB(001)1623 3481 y FK(=)83 b FC(y)1830 3496 y FB(2)1897 3481 y FI(!)27 b FK(1)p FC(;)17 b FK(0)-9 3701 y(Eac)m(h)31 b(sub)s(expression)i(can)e(b)s(e)g(view)m(ed)h(as)e(the)i(no)s(de)e(of) h(a)f(graph.)43 b(Suc)m(h)32 b(a)e(no)s(de)h(is)f(either)h FD(terminal)-9 3821 y FK(in)26 b(the)h(case)h(of)f(the)h(constan)m(ts)g (0)f(and)g(1,)h(or)f FD(non-terminal)p FK(.)40 b(A)27 b(non-terminal)e(no)s(de)i(has)g(a)g(lo)m(w-edge)-9 3942 y(corresp)s(onding)i(to)g(the)g(else-part)g(and)h(a)f(high-edge)f (corresp)s(onding)h(to)g(the)h(then-part.)43 b(See)30 b(\014gure)-9 4062 y(3.)67 b(Notice,)42 b(that)f(the)g(n)m(um)m(b)s(er) g(of)f(no)s(des)h(has)g(decreased)h(from)e(9)g(in)g(the)h(decision)f (tree)h(to)f(6)h(in)-9 4182 y(the)i(BDD.)f(It)g(is)h(not)f(hard)h(to)g (imagine)d(that)i(if)g(eac)m(h)i(of)e(the)h(terminal)e(no)s(des)i(w)m (ere)h(other)f(big)-9 4303 y(decision)30 b(trees)j(the)e(sa)m(vings)h (w)m(ould)f(b)s(e)h(dramatic.)41 b(Since)32 b(w)m(e)g(ha)m(v)m(e)h(c)m (hosen)g(to)e(consisten)m(tly)h(select)-9 4423 y(v)-5 b(ariables)31 b(in)g(the)i(same)f(order)g(in)g(the)h(recursiv)m(e)g (calls)e(during)h(the)h(construction)f(of)g(the)h(INF)f(of)g FC(t)p FK(,)-9 4544 y(the)h(v)-5 b(ariables)33 b(o)s(ccur)g(in)g(the)h (same)f(orderings)g(on)g(all)f(paths)i(from)e(the)i(ro)s(ot)e(of)h(the) h(BDD.)f(In)g(this)-9 4664 y(situation)c(the)j(binary)f(decision)g (diagram)e(is)i(said)f(to)h(b)s(e)h FD(or)-5 b(der)g(e)g(d)30 b FK(\(an)h FD(OBDD)p FK(\).)f(Figure)g(3)h(sho)m(ws)i(a)-9 4784 y(BDD)e(that)i(is)f(also)f(an)i(OBDD.)137 4905 y(Figure)45 b(4)h(sho)m(ws)h(four)f(OBDDs.)83 b(Some)46 b(of)f(the)i(tests)g (\(e.g.,)i(on)d FC(x)2792 4920 y FB(2)2878 4905 y FK(in)f FC(b)p FK(\))i(are)f(redundan)m(t,)-9 5025 y(since)35 b(b)s(oth)g(the)h(lo)m(w-)e(and)h(high-branc)m(h)g(lead)g(to)g(the)g (same)g(no)s(de.)52 b(Suc)m(h)36 b(unnecessary)i(tests)f(can)-9 5146 y(b)s(e)k(remo)m(v)m(ed:)61 b(an)m(y)42 b(reference)h(to)e(the)g (redundan)m(t)i(no)s(de)e(is)g(simply)e(replaced)j(b)m(y)g(a)f (reference)h(to)p eop %%Page: 11 12 11 11 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) 2054 b FK(11)1377 1686 y @beginspecial 0 @llx 0 @lly 118 @urx 197 @ury 1180 @rwi @setspecial %%BeginDocument: bdd-ex.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -152.0 234.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 3742 m 0 0 l 4314 0 l 4314 3742 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 4005 1500 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3195 2940 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3915 2940 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3075 1500 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3555 780 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3540 2220 180 180 0 360 DrawEllipse gs col-1 s gr % Polyline n 3690 870 m 4005 1320 l gs col-1 s gr % Polyline [60] 0 sd n 3420 870 m 3075 1320 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3195 1650 m 3450 2040 l gs col-1 s gr [] 0 sd % Polyline n 3990 1680 m 3630 2055 l gs col-1 s gr % Polyline n 3690 2355 m 3915 2760 l gs col-1 s gr % Polyline [60] 0 sd n 3420 2355 m 3240 2760 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3285 3120 m 3555 3435 l gs col-1 s gr [] 0 sd % Polyline n 3825 3120 m 3555 3435 l gs col-1 s gr % Polyline n 2970 1650 m 2610 3435 l gs col-1 s gr % Polyline n 3090 3090 m 2610 3435 l gs col-1 s gr % Polyline [60] 0 sd n 3780 3075 m 2610 3420 l gs col-1 s gr [] 0 sd % Polyline n 2790 3690 m 2790 3435 l 2430 3435 l 2430 3690 l cp gs col-1 s gr % Polyline n 3735 3690 m 3735 3435 l 3375 3435 l 3375 3690 l cp gs col-1 s gr % Interp Spline gs [60] 0 sd n 3900 1635 m 3445.5 1885.9 3258.0 2013.4 3150 2145 curveto 2985.2 2345.9 2850.2 2664.7 2610 3420 curveto gs col-1 s gr gr [] 0 sd $F2psEnd rs %%EndDocument @endspecial 1733 1310 a Fq(y)1790 1328 y Fr(2)2111 1310 y Fq(y)2168 1328 y Fr(2)1670 554 y Fq(y)1727 572 y Fr(1)2159 554 y Fq(y)2216 572 y Fr(1)1910 932 y Fq(x)1977 950 y Fr(2)1918 176 y Fq(x)1985 194 y Fr(1)1453 1646 y FL(0)1945 1640 y(1)-9 1889 y FK(Figure)31 b(3:)44 b(A)33 b(BDD)f(for)g(\()p FC(x)1017 1904 y FB(1)1085 1889 y FI(,)27 b FC(y)1260 1904 y FB(1)1299 1889 y FK(\))22 b FI(^)h FK(\()p FC(x)1541 1904 y FB(2)1609 1889 y FI(,)28 b FC(y)1785 1904 y FB(2)1824 1889 y FK(\))k(with)h(ordering)f FC(x)2557 1904 y FB(1)2624 1889 y FC(<)c(y)2776 1904 y FB(1)2843 1889 y FC(<)g(x)3002 1904 y FB(2)3070 1889 y FC(<)g(y)3222 1904 y FB(2)3261 1889 y FK(.)44 b(Lo)m(w-edges)-9 2010 y(are)32 b(dra)m(wn)h(as)g (dotted)g(lines)f(and)h(high-edges)f(as)h(solid)e(lines.)440 4402 y @beginspecial 0 @llx 0 @lly 343 @urx 198 @ury 3430 @rwi @setspecial %%BeginDocument: three-obdds.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -147.0 263.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 4678 m 0 0 l 8672 0 l 8672 4678 l cp clip 0.05669 0.05669 sc % Polyline 7.500 slw n 4320 3915 m 4320 3540 l 3930 3540 l 3930 3915 l cp gs col-1 s gr % Polyline n 3015 2880 m 3015 2480 l 2615 2480 l 2615 2880 l cp gs col-1 s gr % Polyline n 7718 4320 m 7718 3960 l 7358 3960 l 7358 4320 l cp gs col-1 s gr % Polyline n 8325 4320 m 8325 3960 l 7965 3960 l 7965 4320 l cp gs col-1 s gr % Ellipse n 4620 1875 240 240 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4155 2820 240 240 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7845 2340 240 240 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7845 3300 240 240 0 360 DrawEllipse gs col-1 s gr % Ellipse n 8325 1395 240 240 0 360 DrawEllipse gs col-1 s gr % Ellipse n 6300 1875 240 240 0 360 DrawEllipse gs col-1 s gr % Polyline [60] 0 sd n 4440 2040 m 4215 2580 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 8190 1560 m 7950 2100 l gs col-1 s gr [] 0 sd % Polyline n 7965 3540 m 8085 3945 l gs col-1 s gr % Polyline [60] 0 sd n 7725 3540 m 7605 3945 l gs col-1 s gr [] 0 sd % Polyline n 5985 3915 m 5985 3540 l 5580 3540 l 5580 3915 l cp gs col-1 s gr % Interp Spline gs n 6420 2040 m 6484.4 2346.4 6499.3 2480.2 6480 2580 curveto 6427.6 2793.8 6278.3 3031.6 5880 3540 curveto gs col-1 s gr gr % Interp Spline gs [60] 0 sd n 6180 2100 m 5904.9 2457.4 5800.5 2620.9 5760 2760 curveto 5719.1 2899.3 5719.1 3092.5 5760 3540 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs n 4740 2040 m 4812.9 2346.4 4827.9 2480.2 4800 2580 curveto 4756.1 2793.8 4606.9 3031.6 4215 3540 curveto gs col-1 s gr gr % Interp Spline gs n 4215 3060 m 4252.4 3191.0 4267.4 3250.5 4260 3300 curveto 4267.4 3340.3 4252.4 3399.7 4215 3540 curveto gs col-1 s gr gr % Interp Spline gs [60] 0 sd n 4095 3060 m 4043.5 3191.0 4028.6 3250.5 4035 3300 curveto 4028.6 3340.3 4043.5 3399.7 4095 3540 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs n 7905 2580 m 7953.4 2715.4 7968.4 2774.8 7965 2820 curveto 7968.4 2864.6 7953.4 2924.1 7905 3060 curveto gs col-1 s gr gr % Interp Spline gs [60] 0 sd n 7785 2580 m 7744.5 2715.4 7729.6 2774.8 7725 2820 curveto 7729.6 2864.6 7744.5 2924.1 7785 3060 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs n 8445 1575 m 8555.6 2145.8 8585.4 2398.5 8565 2580 curveto 8536.7 2842.9 8417.3 3184.8 8085 3945 curveto gs col-1 s gr gr $F2psEnd rs %%EndDocument @endspecial 1136 4013 a FL(1)511 3524 y(1)2742 4209 y(0)228 b(1)1913 4013 y(1)2130 3125 y Fq(x)2197 3143 y Fr(1)3087 2898 y Fq(x)3154 2916 y Fr(1)2860 3345 y Fq(x)2927 3363 y Fr(2)2860 3798 y Fq(x)2927 3816 y Fr(3)1337 3125 y Fq(x)1404 3143 y Fr(1)1117 3571 y Fq(x)1184 3589 y Fr(2)2886 4386 y Fp(d)-1013 b(c)-841 b(b)-687 b(a)-9 4605 y FK(Figure)27 b(4:)41 b(F)-8 b(our)28 b(OBDDs:)41 b(a\))28 b(An)h(OBDD)e(for)h(1.)42 b(b\))28 b(Another)h(OBDD)f(for)f(1) i(with)f(t)m(w)m(o)h(redundan)m(t)-9 4726 y(tests.)56 b(c\))36 b(Same)g(as)h FC(b)g FK(with)f(one)g(of)g(the)h(redundan)m(t)h (tests)f(remo)m(v)m(ed.)56 b(d\))37 b(An)f(OBDD)g(for)f FC(x)3519 4741 y FB(1)3584 4726 y FI(_)25 b FC(x)3730 4741 y FB(3)-9 4846 y FK(with)32 b(one)h(redundan)m(t)g(test.)p eop %%Page: 12 13 12 12 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) 2054 b FK(12)584 234 y @beginspecial 0 @llx 0 @lly 109 @urx 62 @ury 1090 @rwi @setspecial %%BeginDocument: ordering.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -47.0 95.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 1533 m 0 0 l 2511 0 l 2511 1533 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 1350 675 135 135 0 360 DrawEllipse gs col0 s gr % Ellipse n 905 1345 135 135 0 360 DrawEllipse gs col0 s gr % Ellipse n 1800 1350 135 135 0 360 DrawEllipse gs col0 s gr % Polyline [60] 0 sd n 1305 810 m 945 1215 l gs col0 s gr [] 0 sd % Polyline n 1395 810 m 1800 1215 l gs col0 s gr $F2psEnd rs %%EndDocument @endspecial 870 -172 a gsave 0 0 0 setrgbcolor 870 -172 a Ft(x)917 -172 y grestore 917 -172 a 635 182 a gsave 0 0 0 setrgbcolor 635 182 a Ft(y)679 182 y grestore 679 182 a 1108 182 a gsave 0 0 0 setrgbcolor 1108 182 a Ft(z)1151 182 y grestore 1151 182 a 1248 -77 a gsave 0 0 0 setrgbcolor 1248 -77 a Ft(x)23 b(<)g(y)1450 -77 y grestore 1450 -77 a 1248 9 a gsave 0 0 0 setrgbcolor 1248 9 a Ft(x)g(<)g(z)1449 9 y grestore 1449 9 a 1898 234 a @beginspecial 0 @llx 0 @lly 81 @urx 51 @ury 810 @rwi @setspecial %%BeginDocument: isomorphic-node.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -76.0 78.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 1267 m 0 0 l 2527 0 l 2527 1267 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 1350 675 135 135 0 360 DrawEllipse gs col0 s gr % Ellipse n 2250 675 135 135 0 360 DrawEllipse gs col0 s gr % Polyline n 1395 810 m 2250 1215 l gs col0 s gr % Polyline n 2250 810 m 2250 1215 l gs col0 s gr % Polyline [60] 0 sd n 2160 765 m 1350 1215 l gs col0 s gr [] 0 sd % Polyline [60] 0 sd n 1350 810 m 1350 1215 l gs col0 s gr [] 0 sd % Polyline n 2025 450 m 2475 900 l gs col0 s gr % Polyline n 2025 900 m 2475 495 l gs col0 s gr $F2psEnd rs %%EndDocument @endspecial 1949 -32 a gsave 0 0 0 setrgbcolor 1949 -32 a Ft(x)1996 -32 y grestore 1996 -32 a 2422 -32 a gsave 0 0 0 setrgbcolor 2422 -32 a Ft(x)2469 -32 y grestore 2469 -32 a 2895 234 a @beginspecial 0 @llx 0 @lly 31 @urx 51 @ury 310 @rwi @setspecial %%BeginDocument: redundant-test.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -126.0 78.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 1263 m 0 0 l 2527 0 l 2527 1263 l cp clip 0.06299 0.06299 sc % Arc 7.500 slw gs n 2149.2 998.8 238.5 -52.3 65.0 arc gs col0 s gr gr % Arc gs [60] 0 sd n 2350.8 998.8 238.5 -127.7 115.0 arcn gs col0 s gr gr [] 0 sd % Ellipse n 2250 675 135 135 0 360 DrawEllipse gs col0 s gr % Polyline n 2025 450 m 2475 900 l gs col0 s gr % Polyline n 2025 900 m 2475 495 l gs col0 s gr $F2psEnd rs %%EndDocument @endspecial 2996 -30 a gsave 0 0 0 setrgbcolor 2996 -30 a Ft(x)3043 -30 y grestore 3043 -30 a -9 437 a FK(Figure)39 b(5:)58 b(The)42 b(ordering)d(and)i (reducedness)i(conditions)c(of)h(R)m(OBDDs.)66 b(Left:)59 b(V)-8 b(ariables)39 b(m)m(ust)-9 558 y(b)s(e)c FD(or)-5 b(der)g(e)g(d)p FK(.)51 b(Middle:)e(No)s(des)36 b(m)m(ust)f(b)s(e)h FD(unique)p FK(.)51 b(Righ)m(t:)d(Only)35 b FD(non-r)-5 b(e)g(dundant)37 b(tests)44 b FK(should)35 b(b)s(e)-9 678 y(presen)m(t.)-9 1071 y(its)e(subno)s(de.)50 b(If)34 b(all)e(iden)m(tical)g(no)s(des)j(are)f(shared)h(and)g(all)d(redundan)m (t)j(tests)g(are)g(eliminated,)d(the)-9 1191 y(OBDD)24 b(is)h(said)f(to)h(b)s(e)h FD(r)-5 b(e)g(duc)g(e)g(d)25 b FK(\(an)g FD(R)n(OBDD)p FK(\).)e(R)m(OBDDs)i(ha)m(v)m(e)i(some)e(v)m (ery)i(con)m(v)m(enien)m(t)g(prop)s(erties)-9 1312 y(cen)m(tered)e (around)e(the)g FD(c)-5 b(anonicity)26 b(lemma)j FK(b)s(elo)m(w.)40 b(\(Often)23 b(when)h(p)s(eople)f(sp)s(eak)h(ab)s(out)f(BDDs)f(they)-9 1432 y(really)31 b(mean)h FD(R)n(O)p FK(BDDs.\))42 b(T)-8 b(o)33 b(summarize:)p 215 1552 3397 4 v 215 3955 4 2404 v 276 1651 a(A)f FD(Binary)j(De)-5 b(cision)33 b(Diagr)-5 b(am)34 b(\(BDD\))g FK(is)e(a)h(ro)s(oted,)f(directed)h(acyclic)f (graph)g(with)421 1855 y FI(\017)48 b FK(one)33 b(or)f(t)m(w)m(o)i (terminal)c(no)s(des)j(of)f(out-degree)h(zero)g(lab)s(eled)e(0)i(or)f (1,)g(and)421 1975 y FI(\017)48 b FK(a)30 b(set)h(of)e(v)-5 b(ariable)29 b(no)s(des)h FC(u)g FK(of)f(out-degree)i(t)m(w)m(o.)43 b(The)31 b(t)m(w)m(o)g(outgoing)d(edges)519 2095 y(are)37 b(giv)m(en)g(b)m(y)g(t)m(w)m(o)h(functions)e FD(low)11 b FK(\()p FC(u)p FK(\))36 b(and)g FD(high)7 b FK(\()p FC(u)p FK(\).)55 b(\(In)37 b(pictures,)h(these)519 2216 y(are)29 b(sho)m(wn)h(as)f(dotted)g(and)g(solid)e(lines,)i(resp)s (ectiv)m(ely)-8 b(.\))43 b(A)29 b(v)-5 b(ariable)27 b FD(var)10 b FK(\()p FC(u)p FK(\))519 2336 y(is)33 b(asso)s(ciated)f (with)g(eac)m(h)i(v)-5 b(ariable)30 b(no)s(de.)276 2540 y(A)40 b(BDD)f(is)g FD(Or)-5 b(der)g(e)g(d)50 b FK(\(OBDD\))39 b(if)g(on)h(all)d(paths)k(through)f(the)h(graph)e(the)i(v)-5 b(ariables)276 2660 y(resp)s(ect)45 b(a)e(giv)m(en)i(linear)d(order)i FC(x)1583 2675 y FB(1)1670 2660 y FC(<)j(x)1848 2675 y FB(2)1935 2660 y FC(<)g FI(\001)17 b(\001)g(\001)45 b FC(<)i(x)2399 2675 y FA(n)2446 2660 y FK(.)78 b(An)44 b(\(O\)BDD)f(is)g FD(R)-5 b(e)g(duc)g(e)g(d)276 2780 y FK(\(R\(O\)BDD\))31 b(if)421 2984 y FI(\017)48 b FK(\()p FF(uniqueness)p FK(\))29 b(no)f(t)m(w)m(o)h(distinct)f(no)s(des)h FC(u)e FK(and)h FC(v)k FK(ha)m(v)m(e)e(the)e(same)g(v)-5 b(ariable)519 3104 y(name)33 b(and)f(lo)m(w-)g(and)h(high-successor,)g (i.e.,)533 3324 y FD(var)11 b FK(\()p FC(u)p FK(\))27 b(=)g FD(var)11 b FK(\()p FC(v)t FK(\))p FC(;)17 b FD(low)9 b FK(\()p FC(u)p FK(\))27 b(=)h FD(low)10 b FK(\()p FC(v)t FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)p FK(\))27 b(=)h FD(high)7 b FK(\()p FC(v)t FK(\))32 b(implies)e FC(u)d FK(=)h FC(v)t(;)519 3544 y FK(and)421 3665 y FI(\017)48 b FK(\()p FF(non-redundan)m(t)42 b(tests)p FK(\))34 b(no)g(v)-5 b(ariable)33 b(no)s(de)h FC(u)g FK(has)h(iden)m(tical)e(lo)m(w-)g(and) 519 3785 y(high-successor,)h(i.e.,)1569 3905 y FD(low)10 b FK(\()p FC(u)p FK(\))27 b FI(6)p FK(=)g FD(high)7 b FK(\()p FC(u)p FK(\))17 b FC(:)p 3608 3955 V 215 3958 3397 4 v -9 4119 a FK(The)33 b(ordering)f(and)h(reducedness)i (conditions)d(are)g(sho)m(wn)i(in)e(\014gure)h(5.)137 4239 y(R)m(OBDDs)g(ha)m(v)m(e)i(some)e(in)m(teresting)g(prop)s(erties.) 46 b(They)35 b(pro)m(vide)f(compact)f(represen)m(tations)h(of)-9 4360 y(Bo)s(olean)d(expressions,)j(and)f(there)h(are)e(e\016cien)m(t)i (algorithms)c(for)i(p)s(erforming)e(all)h(kinds)i(of)f(logical)-9 4480 y(op)s(erations)42 b(on)h(R)m(OBDDs.)75 b(They)45 b(are)e(all)e(based)k(on)e(the)h(crucial)e(fact)h(that)g(for)g(an)m(y)h (function)-9 4601 y FC(f)c FK(:)29 b Fz(B)202 4558 y FA(n)278 4601 y FI(!)h Fz(B)55 b FK(there)34 b(is)f FD(exactly)j(one)f (R)n(OBDD)f(r)-5 b(epr)g(esenting)35 b(it)p FK(.)47 b(This)34 b(means,)g(in)f(particular,)f(that)-9 4721 y(there)38 b(is)f FD(exactly)i(one)45 b FK(R)m(OBDD)36 b(for)h(the)h(constan)m(t)h (true)f(\(and)g(constan)m(t)g(false\))f(function)g(on)h Fz(B)3696 4679 y FA(n)3743 4721 y FK(:)-9 4841 y(the)32 b(terminal)e(no)s(de)i(1)f(\(and)h(0)g(in)f(case)i(of)f(false\).)43 b(Hence,)33 b(it)e(is)h(p)s(ossible)f(to)g FD(test)k(in)f(c)-5 b(onstant)34 b(time)-9 4962 y(whether)f(an)h(R)n(OBDD)f(is)h(c)-5 b(onstantly)34 b(true)h(or)g(false)p FK(.)42 b(\(Recall)30 b(that)i(for)g(Bo)s(olean)f(expressions)i(this)-9 5082 y(problem)e(is)h(NP-complete.\))p eop %%Page: 13 14 13 13 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) 2054 b FK(13)137 -171 y(T)-8 b(o)22 b(mak)m(e)g(this)g(claim)d(more)j (precise)h(w)m(e)g(m)m(ust)f(sa)m(y)h(what)f(w)m(e)h(mean)f(for)f(an)h (R)m(OBDD)f(to)h(represen)m(t)-9 -51 y(a)27 b(function.)41 b(First,)27 b(it)g(is)f(quite)i(easy)g(to)f(see)i(ho)m(w)e(the)h(no)s (des)g FC(u)f FK(of)g(an)g(R)m(OBDD)f(inductiv)m(ely)h(de\014nes)-9 70 y(Bo)s(olean)40 b(expressions)k FC(t)928 34 y FA(u)973 70 y FK(:)62 b(A)42 b(terminal)d(no)s(de)j(is)g(a)f(Bo)s(olean)g (constan)m(t.)72 b(A)42 b(non-terminal)d(no)s(de)-9 190 y(mark)m(ed)29 b(with)f FC(x)i FK(is)e(an)h(if-then-else)f(expression)i (where)g(the)f(condition)f(is)g FC(x)h FK(and)g(the)h(t)m(w)m(o)f (branc)m(hes)-9 310 y(are)j(the)h(Bo)s(olean)e(expressions)k(giv)m(en)d (b)m(y)i(the)f(lo)m(w-)f(or)g(high-son,)g(resp)s(ectiv)m(ely:)683 522 y FC(t)718 486 y FB(0)841 522 y FK(=)83 b(0)683 642 y FC(t)718 606 y FB(1)841 642 y FK(=)g(1)678 765 y FC(t)713 728 y FA(u)841 765 y FK(=)g FD(var)10 b FK(\()p FC(u)p FK(\))27 b FI(!)h FC(t)1468 728 y Fo(high)6 b FB(\()p FA(u)p FB(\))1701 765 y FC(;)17 b(t)1780 728 y Fo(low)8 b FB(\()p FA(u)p FB(\))1989 765 y FC(;)114 b FK(if)31 b FC(u)h FK(is)h(a)f(v)-5 b(ariable)31 b(no)s(de.)-9 978 y(Moreo)m(v)m(er,)43 b(if)c FC(x)607 993 y FB(1)687 978 y FC(<)i(x)859 993 y FB(2)939 978 y FC(<)f FI(\001)17 b(\001)g(\001)39 b FC(<)h(x)1383 993 y FA(n)1470 978 y FK(is)g(the)g(v)-5 b(ariable)39 b(ordering)g(of)h(the)g(R)m(OBDD,)f (w)m(e)i(asso)s(ciate)-9 1098 y(with)e(eac)m(h)i(no)s(de)g FC(u)e FK(the)i(function)f FC(f)1411 1062 y FA(u)1496 1098 y FK(that)g(maps)g(\()p FC(b)2057 1113 y FB(1)2096 1098 y FC(;)17 b(b)2181 1113 y FB(2)2221 1098 y FC(;)g(:)g(:)g(:)f(;)h (b)2481 1113 y FA(n)2528 1098 y FK(\))40 b FI(2)i Fz(B)2780 1056 y FA(n)2867 1098 y FK(to)e(the)h(truth)f(v)-5 b(alue)39 b(of)-9 1219 y FC(t)26 1182 y FA(u)71 1219 y FK([)p FC(b)139 1234 y FB(1)179 1219 y FC(=x)283 1234 y FB(1)322 1219 y FC(;)17 b(b)407 1234 y FB(2)447 1219 y FC(=x)551 1234 y FB(2)591 1219 y FC(;)g(:)g(:)g(:)f(;)h(b)851 1234 y FA(n)898 1219 y FC(=x)1002 1234 y FA(n)1049 1219 y FK(].)43 b(W)-8 b(e)33 b(can)g(no)m(w)g(state)g(the)g(k)m(ey)i(lemma:)-9 1422 y FF(Lemma)i(1)g(\(Canonicit)m(y)f(lemma\))-9 1542 y FD(F)-7 b(or)35 b(any)g(function)h FC(f)i FK(:)28 b Fz(B)954 1500 y FA(n)1028 1542 y FI(!)f Fz(B)58 b FD(ther)-5 b(e)36 b(is)f(exactly)h(one)g(R)n(OBDD)e FC(u)h FD(with)h(variable)f (or)-5 b(dering)35 b FC(x)3625 1557 y FB(1)3694 1542 y FC(<)-9 1663 y(x)46 1678 y FB(2)113 1663 y FC(<)28 b FI(\001)17 b(\001)g(\001)26 b FC(<)h(x)519 1678 y FA(n)601 1663 y FD(such)35 b(that)g FC(f)1081 1627 y FA(u)1154 1663 y FK(=)27 b FC(f)11 b FK(\()p FC(x)1409 1678 y FB(1)1449 1663 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1723 1678 y FA(n)1770 1663 y FK(\))p FD(.)-9 1866 y FF(Pro)s(of:)58 b FK(The)41 b(pro)s(of)f(is)f(b)m(y)j(induction)d(on)h(the)h(n)m(um)m(b)s(er)f(of)g (argumen)m(ts)g(of)g FC(f)11 b FK(.)66 b(F)-8 b(or)40 b FC(n)h FK(=)f(0)g(there)-9 1986 y(are)34 b(only)h(t)m(w)m(o)g(Bo)s (olean)f(functions,)i(the)f(constan)m(tly)g(false)g(and)g(constan)m (tly)g(true)g(functions.)51 b(An)m(y)-9 2107 y(R)m(OBDD)36 b(con)m(taining)g(at)i(least)f(one)h(non-terminal)d(no)s(de)j(is)f (non-constan)m(t.)59 b(\(Wh)m(y?\))h(Therefore)-9 2227 y(there)33 b(is)f(exactly)h(one)g(R)m(OBDD)e(for)h(eac)m(h)i(of)e (these:)45 b(the)33 b(terminals)d(0)j(and)f(1.)137 2348 y(Assume)42 b(no)m(w)f(that)g(w)m(e)h(ha)m(v)m(e)g(pro)m(v)m(en)h(the)e (lemma)e(for)h(all)f(functions)i(of)g FC(n)g FK(argumen)m(ts.)69 b(W)-8 b(e)-9 2468 y(pro)s(ceed)29 b(to)g(sho)m(w)h(it)e(for)h(all)e (functions)i(of)g FC(n)15 b FK(+)g(1)28 b(argumen)m(ts.)43 b(Let)29 b FC(f)39 b FK(:)27 b Fz(B)2730 2426 y FA(n)p FB(+1)2895 2468 y FI(!)g Fz(B)50 b FK(b)s(e)30 b(an)m(y)f(Bo)s(olean)-9 2588 y(function)h(of)g FC(n)18 b FK(+)f(1)31 b(argumen)m(ts.)43 b(De\014ne)31 b(the)g(t)m(w)m(o)g(functions)f FC(f)2355 2603 y FB(0)2425 2588 y FK(and)h FC(f)2661 2603 y FB(1)2731 2588 y FK(of)f FC(n)g FK(argumen)m(ts)h(b)m(y)g(\014xing)-9 2709 y(the)i(\014rst)g(argumen)m(t)f(of)g FC(f)43 b FK(to)32 b(0)h(resp)s(ectiv)m(ely)g(1:)901 2929 y FC(f)949 2944 y FA(b)983 2929 y FK(\()p FC(x)1076 2944 y FB(2)1116 2929 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1390 2944 y FA(n)p FB(+1)1527 2929 y FK(\))27 b(=)h FC(f)11 b FK(\()p FC(b;)17 b(x)1933 2944 y FB(2)1973 2929 y FC(;)g(:)g(:)g(:)f(;)h(x)2247 2944 y FA(n)p FB(+1)2384 2929 y FK(\))32 b(for)g FC(b)c FI(2)h Fz(B)21 b FK(.)-9 3149 y(\(Sometimes)31 b FC(f)565 3164 y FB(0)636 3149 y FK(and)i FC(f)874 3164 y FB(1)946 3149 y FK(are)f(called)f(the)i FD(ne)-5 b(gative)39 b FK(and)32 b FD(p)-5 b(ositive)34 b(c)-5 b(o-factors)40 b FK(of)32 b FC(f)43 b FK(with)32 b(resp)s(ect)h(to)-9 3269 y FC(x)46 3284 y FB(1)85 3269 y FK(.\))44 b(These)34 b(functions)f(satisfy)f(the)h(follo)m(wing)d(equation:)759 3489 y FC(f)11 b FK(\()p FC(x)911 3504 y FB(1)951 3489 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1225 3504 y FA(n)1272 3489 y FK(\))60 b(=)g FC(x)1561 3504 y FB(1)1628 3489 y FI(!)28 b FC(f)1804 3504 y FB(1)1843 3489 y FK(\()p FC(x)1936 3504 y FB(2)1976 3489 y FC(;)17 b(:)g(:)g(:)f(;)h(x)2250 3504 y FA(n)2297 3489 y FK(\))p FC(;)g(f)2427 3504 y FB(0)2466 3489 y FK(\()p FC(x)2559 3504 y FB(2)2599 3489 y FC(;)g(:)g(:)g(:)f(;)h(x)2873 3504 y FA(n)2920 3489 y FK(\))g FC(:)643 b FK(\(3\))-9 3709 y(Since)42 b FC(f)303 3724 y FB(0)385 3709 y FK(and)g FC(f)632 3724 y FB(1)714 3709 y FK(tak)m(e)h(only)f FC(n)h FK(argumen)m(ts)f(w)m(e)i(assume)e(b) m(y)i(induction)d(that)h(there)h(are)g(unique)-9 3830 y(R)m(OBDD)31 b(no)s(des)i FC(u)716 3845 y FB(0)788 3830 y FK(and)f FC(u)1033 3845 y FB(1)1105 3830 y FK(with)g FC(f)1386 3793 y FA(u)1427 3802 y Fx(0)1493 3830 y FK(=)c FC(f)1645 3845 y FB(0)1717 3830 y FK(and)k FC(f)1965 3793 y FA(u)2006 3802 y Fx(1)2072 3830 y FK(=)c FC(f)2224 3845 y FB(1)2263 3830 y FK(.)137 3950 y(There)j(are)f(t)m(w)m(o)g (cases)h(to)e(consider.)43 b(If)30 b FC(u)1683 3965 y FB(0)1749 3950 y FK(=)e FC(u)1909 3965 y FB(1)1978 3950 y FK(then)i FC(f)2256 3914 y FA(u)2297 3923 y Fx(0)2363 3950 y FK(=)d FC(f)2525 3914 y FA(u)2566 3923 y Fx(1)2634 3950 y FK(and)j FC(f)2869 3965 y FB(0)2936 3950 y FK(=)e FC(f)3099 3914 y FA(u)3140 3923 y Fx(0)3206 3950 y FK(=)f FC(f)3368 3914 y FA(u)3409 3923 y Fx(1)3475 3950 y FK(=)h FC(f)3627 3965 y FB(1)3694 3950 y FK(=)-9 4070 y FC(f)11 b FK(.)63 b(Hence)41 b FC(u)493 4085 y FB(0)571 4070 y FK(=)e FC(u)742 4085 y FB(1)820 4070 y FK(is)g(an)g(R)m(OBDD)g(for)g FC(f)11 b FK(.)63 b(It)39 b(is)g(also)g(the)h(only)e(R)m(OBDD)h(for)g FC(f)50 b FK(since)39 b(due)h(to)-9 4191 y(the)35 b(ordering,)g(if)e FC(x)722 4206 y FB(1)797 4191 y FK(is)i(at)f(all)f(presen)m(t)k(in)d (the)h(R)m(OBDD)f(ro)s(oted)h(at)f FC(u)p FK(,)h FC(x)2786 4206 y FB(1)2861 4191 y FK(w)m(ould)g(need)h(to)e(b)s(e)i(the)-9 4311 y(ro)s(ot)c(no)s(de.)47 b(Ho)m(w)m(ev)m(er,)37 b(if)32 b FC(f)40 b FK(=)30 b FC(f)1242 4275 y FA(u)1320 4311 y FK(then)35 b FC(f)1592 4326 y FB(0)1661 4311 y FK(=)29 b FC(f)1825 4275 y FA(u)1870 4311 y FK([0)p FC(=x)2050 4326 y FB(1)2089 4311 y FK(])h(=)f FC(f)2310 4275 y Fo(low)8 b FB(\()p FA(u)p FB(\))2553 4311 y FK(and)34 b FC(f)2792 4326 y FB(1)2861 4311 y FK(=)29 b FC(f)3025 4275 y FA(u)3070 4311 y FK([1)p FC(=x)3250 4326 y FB(1)3289 4311 y FK(])h(=)f FC(f)3510 4275 y Fo(high)6 b FB(\()p FA(u)p FB(\))3743 4311 y FK(.)-9 4431 y(Since)31 b FC(f)292 4446 y FB(0)360 4431 y FK(=)c FC(f)522 4395 y FA(u)563 4404 y Fx(0)629 4431 y FK(=)h FC(f)792 4395 y FA(u)833 4404 y Fx(1)899 4431 y FK(=)f FC(f)1050 4446 y FB(1)1121 4431 y FK(b)m(y)33 b(assumption,)e(the)h(lo)m(w-)f(and)h(high-son)e(of)i FC(u)f FK(w)m(ould)g(b)s(e)h(the)g(same,)-9 4552 y(making)f(the)i(R)m (OBDD)e(violate)g(the)i(reducedness)j(condition)31 b(of)h(non-redundan) m(t)i(tests.)137 4672 y(If)g FC(u)292 4687 y FB(0)362 4672 y FI(6)p FK(=)d FC(u)525 4687 y FB(1)599 4672 y FK(then)k FC(f)882 4636 y FA(u)923 4645 y Fx(0)993 4672 y FI(6)p FK(=)c FC(f)1159 4636 y FA(u)1200 4645 y Fx(1)1272 4672 y FK(b)m(y)36 b(the)f(induction)f(h)m(yp)s(othesis)h(\(using)f (the)h(names)g FC(x)3319 4687 y FB(2)3359 4672 y FC(;)17 b(:)g(:)g(:)f(;)h(x)3633 4687 y FA(n)p FB(+1)-9 4793 y FK(in)38 b(place)g(of)h FC(x)539 4808 y FB(1)579 4793 y FC(;)17 b(:)g(:)g(:)e(;)i(x)852 4808 y FA(n)900 4793 y FK(\).)62 b(W)-8 b(e)39 b(tak)m(e)h FC(u)e FK(to)h(b)s(e)g(the)g(no)s (de)g(with)g FD(var)10 b FK(\()p FC(u)p FK(\))38 b(=)h FC(x)2909 4808 y FB(1)2948 4793 y FK(,)i FD(low)10 b FK(\()p FC(u)p FK(\))38 b(=)g FC(u)3506 4808 y FB(0)3545 4793 y FK(,)j(and)-9 4913 y FD(high)6 b FK(\()p FC(u)p FK(\))52 b(=)h FC(u)541 4928 y FB(1)580 4913 y FK(,)e(i.e.,)g FC(f)920 4877 y FA(u)1017 4913 y FK(=)i FC(x)1201 4928 y FB(1)1293 4913 y FI(!)f FC(f)1504 4877 y FA(u)1545 4886 y Fx(1)1584 4913 y FC(;)17 b(f)1687 4877 y FA(u)1728 4886 y Fx(0)1813 4913 y FK(whic)m(h)48 b(is)e(reduced.)90 b(By)47 b(assumption)g FC(f)3422 4877 y FA(u)3463 4886 y Fx(1)3554 4913 y FK(=)53 b FC(f)3731 4928 y FB(1)-9 5033 y FK(and)42 b FC(f)249 4997 y FA(u)290 5006 y Fx(0)374 5033 y FK(=)i FC(f)542 5048 y FB(0)624 5033 y FK(therefore)g(using)e (\(3\))g(w)m(e)i(get)f FC(f)1862 4997 y FA(u)1951 5033 y FK(=)i FC(f)11 b FK(.)74 b(Supp)s(ose)43 b(that)g FC(v)j FK(is)c(some)h(other)g(no)s(de)-9 5154 y(with)d FC(f)280 5118 y FA(v)361 5154 y FK(=)h FC(f)11 b FK(.)67 b(Clearly)-8 b(,)41 b FC(f)1057 5118 y FA(v)1138 5154 y FK(m)m(ust)g(dep)s(end)h(on) e FC(x)1933 5169 y FB(1)1973 5154 y FK(,)i(i.e.,)g FC(f)2295 5118 y FA(v)2336 5154 y FK([0)p FC(=x)2516 5169 y FB(1)2555 5154 y FK(])g FI(6)p FK(=)e FC(f)2799 5118 y FA(v)2840 5154 y FK([1)p FC(=x)3020 5169 y FB(1)3060 5154 y FK(])g(\(otherwise)h (also)p eop %%Page: 14 15 14 14 bop -9 -460 a FG(3)97 b(BINAR)-8 b(Y)33 b(DECISION)g(DIA)m(GRAMS) 2054 b FK(14)-9 -171 y FC(f)39 -156 y FB(0)119 -171 y FK(=)40 b FC(f)294 -207 y FA(v)335 -171 y FK([0)p FC(=x)515 -156 y FB(1)554 -171 y FK(])h(=)g FC(f)798 -207 y FA(v)838 -171 y FK([1)p FC(=x)1018 -156 y FB(1)1058 -171 y FK(])g(=)f FC(f)1290 -156 y FB(1)1330 -171 y FK(,)i(a)e(con)m(tradiction\).)65 b(Due)40 b(to)g(the)h(ordering)e(this)h(means)g(that)-9 -51 y FD(var)10 b FK(\()p FC(v)t FK(\))41 b(=)h FC(x)478 -36 y FB(1)559 -51 y FK(=)f FD(var)11 b FK(\()p FC(u)p FK(\).)67 b(Moreo)m(v)m(er,)45 b(from)39 b FC(f)1812 -87 y FA(v)1894 -51 y FK(=)j FC(f)51 b FK(it)40 b(follo)m(ws)f(that)i FC(f)2824 -87 y Fo(low)8 b FB(\()p FA(v)r FB(\))3070 -51 y FK(=)41 b FC(f)3235 -36 y FB(0)3316 -51 y FK(=)h FC(f)3493 -87 y FA(u)3534 -78 y Fx(0)3613 -51 y FK(and)-9 70 y FC(f)50 34 y Fo(high)5 b FB(\()p FA(v)r FB(\))306 70 y FK(=)27 b FC(f)457 85 y FB(1)524 70 y FK(=)h FC(f)687 34 y FA(u)728 43 y Fx(1)766 70 y FK(,)k(whic)m(h)g(b)m(y)g(the)f (induction)f(h)m(yp)s(othesis)j(implies)28 b(that)j FD(low)10 b FK(\()p FC(v)t FK(\))28 b(=)f FC(u)3318 85 y FB(0)3385 70 y FK(=)g FD(low)11 b FK(\()p FC(u)p FK(\))-9 190 y(and)30 b FD(high)7 b FK(\()p FC(v)t FK(\))27 b(=)h FC(u)674 205 y FB(1)740 190 y FK(=)g FD(high)7 b FK(\()p FC(u)p FK(\).)42 b(F)-8 b(rom)29 b(the)i(reducedness)j(prop)s(ert)m(y)d(of)f (uniqueness)i(it)e(follo)m(ws)f(that)-9 310 y FC(u)e FK(=)g FC(v)t FK(.)43 b Fu(\003)-9 450 y FK(An)c(immediate)d (consequence)42 b(is)c(the)i(follo)m(wing.)59 b(Since)39 b(the)h(terminal)c(1)j(is)f(an)h(R)m(OBDD)f(for)g(all)-9 571 y(v)-5 b(ariable)38 b(orderings)j(it)f(is)g(the)h(only)f(R)m(OBDD)g (that)g(is)h(constan)m(tly)g(true.)68 b(So)41 b(in)f(order)g(to)h(c)m (hec)m(k)-9 691 y(whether)g(an)f(R)m(OBDD)f(is)g(constan)m(tly)i(true)f (it)f(su\016ces)j(to)d(c)m(hec)m(k)k(whether)e(it)e(is)g(the)i (terminal)c(1)-9 812 y(whic)m(h)42 b(is)g(de\014nitely)f(a)h(constan)m (t)h(time)e(op)s(eration.)70 b(Similarly)-8 b(,)40 b(R)m(OBDDs)i(that)g (are)g(constan)m(tly)-9 932 y(false)h(m)m(ust)g(b)s(e)h(iden)m(tical)e (to)h(the)h(terminal)d(0.)77 b(In)43 b(fact,)k(to)c(determine)g (whether)i(t)m(w)m(o)f(Bo)s(olean)-9 1052 y(functions)38 b(are)f(the)i(same,)g(it)e(su\016ces)j(to)e(construct)h(their)e(R)m (OBDDs)h(\(in)f(the)h(same)g(graph\))g(and)-9 1173 y(c)m(hec)m(k)c (whether)g(the)f(resulting)f(no)s(des)h(are)g(the)g(same!)137 1293 y(The)c(ordering)e(of)h(v)-5 b(ariables)27 b(c)m(hosen)j(when)f (constructing)g(an)f(R)m(OBDD)f(has)h(a)g(great)g(impact)f(on)-9 1413 y(the)37 b(size)f(of)g(the)h(R)m(OBDD.)f(If)g(w)m(e)i(consider)f (again)e(the)i(expression)h(\()p FC(x)2701 1428 y FB(1)2775 1413 y FI(,)c FC(y)2957 1428 y FB(1)2996 1413 y FK(\))25 b FI(^)g FK(\()p FC(x)3243 1428 y FB(2)3317 1413 y FI(,)34 b FC(y)3499 1428 y FB(2)3538 1413 y FK(\))j(and)-9 1534 y(construct)j(an)f(R)m(OBDD)f(using)h(the)g(ordering)g FC(x)1853 1549 y FB(1)1931 1534 y FC(<)g(x)2101 1549 y FB(2)2180 1534 y FC(<)f(y)2342 1549 y FB(1)2420 1534 y FC(<)h(y)2583 1549 y FB(2)2661 1534 y FK(the)h(R)m(OBDD)e(consists)i (of)e(9)-9 1654 y(no)s(des)33 b(\(\014gure)g(6\))f(and)h(not)f(6)g(no)s (des)i(as)e(for)g(the)h(ordering)f FC(x)2288 1669 y FB(1)2356 1654 y FC(<)27 b(y)2507 1669 y FB(1)2574 1654 y FC(<)g(x)2732 1669 y FB(2)2800 1654 y FC(<)h(y)2952 1669 y FB(2)3023 1654 y FK(\(\014gure)33 b(3\).)855 4139 y @beginspecial 0 @llx 0 @lly 243 @urx 273 @ury 2430 @rwi @setspecial %%BeginDocument: degen-robdd.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -90.0 299.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 6802 m 0 0 l 7586 0 l 7586 6802 l cp clip 0.04409 0.04409 sc % Polyline 7.500 slw n 5625 6750 m 5625 6300 l 5175 6300 l 5175 6750 l cp gs col-1 s gr % Ellipse n 6300 4500 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3300 4500 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 2400 3300 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3525 2100 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4200 3300 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 5400 3300 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7200 3300 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 6075 2100 300 300 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4800 900 300 300 0 360 DrawEllipse gs col-1 s gr % Polyline n 5025 1050 m 5925 1800 l gs col-1 s gr % Polyline [60] 0 sd n 4575 1050 m 3675 1800 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 5925 2400 m 4275 3000 l gs col-1 s gr [] 0 sd % Polyline n 6150 2400 m 7200 3000 l gs col-1 s gr % Polyline n 7050 3600 m 6450 4200 l gs col-1 s gr % Polyline n 4050 3600 m 3375 4200 l gs col-1 s gr % Polyline [60] 0 sd n 2550 3525 m 3225 4200 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 5550 3525 m 6225 4200 l gs col-1 s gr [] 0 sd % Polyline n 5325 3600 m 5325 6300 l gs col-1 s gr % Polyline n 3675 2400 m 5325 3000 l gs col-1 s gr % Polyline n 6225 4800 m 4275 6300 l gs col-1 s gr % Polyline [60] 0 sd n 6375 4800 m 5325 6225 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3300 2325 m 2550 3075 l gs col-1 s gr [] 0 sd % Polyline n 3375 4800 m 5325 6300 l gs col-1 s gr % Polyline [60] 0 sd n 3225 4800 m 4275 6300 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 4275 3600 m 5325 6225 l gs col-1 s gr [] 0 sd % Polyline n 4425 6750 m 4425 6300 l 3915 6300 l 3915 6750 l cp gs col-1 s gr % Interp Spline gs n 2325 3600 m 2397.1 4473.3 2490.8 4848.3 2700 5100 curveto 3090.5 5569.8 3746.8 5869.8 5325 6300 curveto gs col-1 s gr gr % Interp Spline gs [60] 0 sd n 7275 3600 m 7158.8 4474.3 7065.1 4849.3 6900 5100 curveto 6688.6 5421.0 6294.9 5721.0 5325 6300 curveto gs col-1 s gr gr [] 0 sd $F2psEnd rs %%EndDocument @endspecial 2060 4093 a(0)-506 b FL(1)1262 3335 y Fq(y)1319 3353 y Fr(2)2364 3335 y Fq(y)2421 3353 y Fr(2)931 2894 y Fq(y)988 2912 y Fr(1)1592 2894 y Fq(y)1649 2912 y Fr(1)2033 2894 y Fq(y)2090 2912 y Fr(1)2695 2894 y Fq(y)2752 2912 y Fr(1)2277 2453 y Fq(x)2344 2471 y Fr(2)1340 2453 y Fq(x)1407 2471 y Fr(2)1808 2012 y Fq(x)1875 2030 y Fr(1)-9 4342 y FK(Figure)22 b(6:)38 b(The)24 b(R)m(OBDD)e(for)h(\()p FC(x)1213 4357 y FB(1)1281 4342 y FI(,)k FC(y)1456 4357 y FB(1)1495 4342 y FK(\))s FI(^)s FK(\()p FC(x)1698 4357 y FB(2)1766 4342 y FI(,)g FC(y)1941 4357 y FB(2)1980 4342 y FK(\))c(with)g(v)-5 b(ariable)21 b(ordering)i FC(x)3041 4357 y FB(1)3108 4342 y FC(<)28 b(x)3267 4357 y FB(2)3334 4342 y FC(<)g(y)3486 4357 y FB(1)3552 4342 y FC(<)g(y)3704 4357 y FB(2)3743 4342 y FK(.)-9 4724 y FF(Exercise)36 b(3.1)49 b FK(Sho)m(w)37 b(ho)m(w)h(to)e(express)j (all)34 b(op)s(erators)j(from)e(the)i(if-then-else)f(op)s(erator)g(and) h(the)-9 4844 y(constan)m(ts)c(0)g(and)f(1.)-9 5042 y FF(Exercise)k(3.2)49 b FK(Dra)m(w)34 b(the)g(R)m(OBDDs)g(for)f(\()p FC(x)1737 5057 y FB(1)1807 5042 y FI(,)d FC(y)1985 5057 y FB(1)2024 5042 y FK(\))23 b FI(^)g FK(\()p FC(x)2267 5057 y FB(2)2337 5042 y FI(,)30 b FC(y)2515 5057 y FB(2)2554 5042 y FK(\))23 b FI(^)g FK(\()p FC(x)2797 5057 y FB(3)2867 5042 y FI(,)30 b FC(y)3045 5057 y FB(3)3084 5042 y FK(\))k(with)f (orderings)-9 5162 y FC(x)46 5177 y FB(1)113 5162 y FC(<)28 b(x)272 5177 y FB(2)339 5162 y FC(<)g(x)498 5177 y FB(3)565 5162 y FC(<)g(y)717 5177 y FB(1)783 5162 y FC(<)g(y)935 5177 y FB(2)1002 5162 y FC(<)f(y)1153 5177 y FB(3)1225 5162 y FK(and)32 b FC(x)1469 5177 y FB(1)1537 5162 y FC(<)c(y)1689 5177 y FB(1)1755 5162 y FC(<)g(x)1914 5177 y FB(2)1981 5162 y FC(<)g(y)2133 5177 y FB(2)2200 5162 y FC(<)f(x)2358 5177 y FB(3)2426 5162 y FC(<)g(y)2577 5177 y FB(3)2616 5162 y FK(.)p eop %%Page: 15 16 15 15 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(15)-9 -171 y FF(Exercise)36 b(3.3)49 b FK(Dra)m(w)37 b(the)g(R)m(OBDDs)g(for)g(\()p FC(x)1750 -156 y FB(1)1825 -171 y FI(,)e FC(y)2008 -156 y FB(1)2047 -171 y FK(\))25 b FI(_)h FK(\()p FC(x)2295 -156 y FB(2)2370 -171 y FI(,)35 b FC(y)2553 -156 y FB(2)2592 -171 y FK(\))i(with)g(orderings)g FC(x)3377 -156 y FB(1)3452 -171 y FC(<)f(x)3619 -156 y FB(2)3694 -171 y FC(<)-9 -51 y(y)39 -36 y FB(1)105 -51 y FC(<)28 b(y)257 -36 y FB(2)323 -51 y FK(and)g FC(x)563 -36 y FB(1)630 -51 y FC(<)g(y)782 -36 y FB(1)849 -51 y FC(<)f(x)1007 -36 y FB(2)1075 -51 y FC(<)g(y)1226 -36 y FB(2)1265 -51 y FK(.)42 b(Ho)m(w)28 b(do)s(es)g(it)f(compare)g(with)g(the)h(example)f(in)g (\014gures)h(3)g(and)f(6?)-9 70 y(Based)f(on)f(the)h(examples)f(y)m(ou) h(ha)m(v)m(e)h(seen)g(so)f(far,)g(what)g(v)-5 b(ariable)23 b(ordering)i(w)m(ould)g(y)m(ou)h(recommend)-9 190 y(for)i(constructing) i(a)f(small)e(R)m(OBDD)h(for)h(\()p FC(x)1653 205 y FB(1)1721 190 y FI(,)e FC(y)1896 205 y FB(1)1935 190 y FK(\))16 b FI(^)g FK(\()p FC(x)2164 205 y FB(2)2231 190 y FI(,)27 b FC(y)2406 205 y FB(2)2445 190 y FK(\))16 b FI(^)g FK(\()p FC(x)2674 205 y FB(3)2741 190 y FI(,)28 b FC(y)2917 205 y FB(3)2956 190 y FK(\))16 b FI(^)g(\001)h(\001)g(\001)c(^)j FK(\()p FC(x)3398 205 y FA(k)3469 190 y FI(,)27 b FC(y)3644 205 y FA(k)3686 190 y FK(\)?)-9 418 y FF(Exercise)36 b(3.4)49 b FK(Giv)m(e)30 b(an)h(example)f(of)g(a)g(sequence)k(of)c(R)m (OBDDs)g FC(u)2554 433 y FA(n)2600 418 y FC(;)17 b FK(0)28 b FI(\024)g FC(n)i FK(whic)m(h)i(induces)f(exp)s(o-)-9 539 y(nen)m(tially)e(bigger)g(decision)h(trees.)44 b(I.e.,)32 b(if)d FC(u)1652 554 y FA(n)1729 539 y FK(has)i(size)g(\002\()p FC(n)p FK(\))f(then)h(the)g(decision)f(tree)h(should)g(ha)m(v)m(e)-9 659 y(size)h(\002\(2)338 623 y FA(n)385 659 y FK(\).)-9 887 y FF(Exercise)k(3.5)49 b FK(Construct)34 b(an)e(R)m(OBDD)g(of)g (maxim)m(um)e(size)j(o)m(v)m(er)g(six)g(v)-5 b(ariables.)-9 1220 y FH(4)161 b(Constructing)51 b(and)j(Manipulating)h(R)l(OBDDs)-9 1439 y FK(In)40 b(the)h(previous)g(section)f(w)m(e)h(sa)m(w)g(ho)m(w)g (to)f(construct)i(an)e(OBDD)f(from)g(a)h(Bo)s(olean)f(expression)-9 1560 y(b)m(y)33 b(a)g(simple)e(recursiv)m(e)j(pro)s(cedure.)45 b(The)34 b(question)f(arises)g(no)m(w)g(ho)m(w)h(do)e(w)m(e)i (construct)g(a)e FD(r)-5 b(e)g(duc)g(e)g(d)-9 1680 y FK(OBDD?)37 b(One)h(w)m(a)m(y)i(is)d(to)h(\014rst)h(construct)g(an)f (OBDD)f(and)i(then)g(pro)s(ceed)g(b)m(y)g(reducing)f(it.)59 b(An-)-9 1800 y(other)44 b(more)f(app)s(ealing)f(approac)m(h,)47 b(whic)m(h)d(w)m(e)h(follo)m(w)d(here,)48 b(is)43 b(to)h(reduce)h(the)f (OBDD)f(during)-9 1921 y(construction.)137 2041 y(T)-8 b(o)23 b(describ)s(e)g(ho)m(w)h(this)f(is)f(done)i(w)m(e)g(will)c(need) k(an)f(explicit)f(represen)m(tation)h(of)g(R)m(OBDDs.)39 b(No)s(des)-9 2162 y(will)20 b(b)s(e)k(represen)m(ted)h(as)f(n)m(um)m (b)s(ers)g(0)p FC(;)17 b FK(1)p FC(;)g FK(2)p FC(;)g(:)g(:)g(:)k FK(with)i(0)f(and)i(1)f(reserv)m(ed)i(for)e(the)g(terminal)e(no)s(des.) 41 b(The)-9 2282 y(v)-5 b(ariables)34 b(in)h(the)g(ordering)g FC(x)1128 2297 y FB(1)1201 2282 y FC(<)d(x)1364 2297 y FB(2)1437 2282 y FC(<)g FI(\001)17 b(\001)g(\001)31 b FC(<)i(x)1858 2297 y FA(n)1941 2282 y FK(are)i(represen)m(ted)j(b)m (y)f(their)e(indices)g(1)p FC(;)17 b FK(2)p FC(;)g(:)g(:)g(:)e(;)i(n)p FK(.)-9 2402 y(The)45 b(R)m(OBDD)f(is)g(stored)h(in)f(a)g(table)g FC(T)62 b FK(:)48 b FC(u)f FI(7!)h FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))45 b(whic)m(h)g(maps)f(a)g(no)s(de)h FC(u)f FK(to)g(its)g(three) -9 2523 y(attributes)32 b FD(var)11 b FK(\()p FC(u)p FK(\))28 b(=)g FC(i)p FK(,)33 b FD(low)11 b FK(\()p FC(u)p FK(\))27 b(=)i FC(l)r FK(,)k(and)g FD(high)7 b FK(\()p FC(u)p FK(\))28 b(=)g FC(h)p FK(.)45 b(Figure)32 b(7)h(sho)m(ws)h(the)g (represen)m(tation)f(of)-9 2643 y(the)g(R)m(OBDD)e(from)g(\014gure)i(3) g(\(with)f(the)h(v)-5 b(ariable)31 b(names)h(c)m(hanged)i(to)e FC(x)2780 2658 y FB(1)2848 2643 y FC(<)27 b(x)3006 2658 y FB(2)3074 2643 y FC(<)g(x)3232 2658 y FB(3)3300 2643 y FC(<)g(x)3458 2658 y FB(4)3498 2643 y FK(\).)-9 2932 y Fn(4.1)135 b(Mk)-9 3117 y FK(In)32 b(order)h(to)f(ensure)j(that)d (the)h(OBDD)e(b)s(eing)h(constructed)j(is)d(reduced,)i(it)d(is)i (necessary)i(to)d(deter-)-9 3237 y(mine)e(from)g(a)h(triple)f(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))32 b(whether)h(there)f(exists)g(a)f(no)s (de)h FC(u)f FK(with)g FD(var)11 b FK(\()p FC(u)p FK(\))27 b(=)g FC(i;)17 b FD(low)10 b FK(\()p FC(u)p FK(\))27 b(=)h FC(l)r FK(,)k(and)-9 3357 y FD(high)6 b FK(\()p FC(u)p FK(\))27 b(=)h FC(h)p FK(.)42 b(F)-8 b(or)26 b(this)g(purp)s (ose)i(w)m(e)g(assume)f(the)g(presence)i(of)e(a)f(table)g FC(H)36 b FK(:)27 b(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))28 b FI(7!)f FC(u)g FK(mapping)-9 3478 y(triples)e(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))27 b(of)g(v)-5 b(ariable)25 b(indices)h FC(i)p FK(,)j(and)e(no)s(des)g FC(l)r(;)17 b(h)27 b FK(to)g(no)s(des)g FC(u)p FK(.)41 b(The)28 b(table)e FC(H)34 b FK(is)27 b(the)g(\\in)m(v)m(erse")-9 3598 y(of)h(the)i(table) e FC(T)14 b FK(,)30 b(i.e.,)f(for)g(v)-5 b(ariable)27 b(no)s(des)j FC(u)p FK(,)f FC(T)14 b FK(\()p FC(u)p FK(\))27 b(=)g(\()p FC(i;)17 b(l)r(;)g(h)p FK(\),)30 b(if)e(and)h(only)g(if,)g FC(H)8 b FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))27 b(=)g FC(u)p FK(.)42 b(The)-9 3719 y(op)s(erations)31 b(needed)j(on)f(the)g (t)m(w)m(o)g(tables)g(are:)307 3930 y FC(T)42 b FK(:)27 b FC(u)h FI(7!)f FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))488 4051 y FD(init)p FK(\()p FC(T)d FK(\))749 b(initialize)29 b FC(T)46 b FK(to)32 b(con)m(tain)g(only)g(0)g(and)h(1)488 4171 y FC(u)27 b FI( )g FD(add)p FK(\()p FC(T)8 b(;)17 b(i;)g(l)r(;)g(h)p FK(\))290 b(allo)s(cate)30 b(a)j(new)g(no)s(de)g FC(u)f FK(with)g(attributes)g(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))488 4291 y FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b FD(low)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b FD(high)5 b FK(\()p FC(u)p FK(\))83 b(lo)s(okup)32 b(the)h(attributes)f(of)g FC(u)g FK(in)g FC(T)307 4532 y(H)j FK(:)28 b(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))28 b FI(7!)f FC(u)488 4652 y FD(init)p FK(\()p FC(H)8 b FK(\))731 b(initialize)29 b FC(H)40 b FK(to)32 b(b)s(e)h(empt)m(y)488 4773 y FC(b)28 b FI( )f FD(memb)-5 b(er)o FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p FK(\))106 b(c)m(hec)m(k)35 b(if)c(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))33 b(is)f(in)g FC(H)488 4893 y(u)27 b FI( )g FD(lo)-5 b(okup)p FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p FK(\))155 b(\014nd)33 b FC(H)8 b FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))488 5014 y FD(insert)p FK(\()p FC(H)r(;)g(i;)g(l)r(;)g(h;)g(u)p FK(\))289 b(mak)m(e)33 b(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))32 b(map)g(to)g FC(u)g FK(in)g FC(H)p eop %%Page: 16 17 16 16 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(16)712 1831 y @beginspecial 0 @llx 0 @lly 112 @urx 198 @ury 1120 @rwi @setspecial %%BeginDocument: bdd-repr.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -145.0 223.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 3742 m 0 0 l 4314 0 l 4314 3742 l cp clip 0.06000 0.06000 sc 7.500 slw % Ellipse n 4005 1500 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3195 2940 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3915 2940 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3075 1500 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3555 780 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3540 2220 180 180 0 360 DrawEllipse gs col-1 s gr % Polyline n 3690 870 m 4005 1320 l gs col-1 s gr % Polyline [60] 0 sd n 3420 870 m 3075 1320 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3195 1650 m 3450 2040 l gs col-1 s gr [] 0 sd % Polyline n 3990 1680 m 3630 2055 l gs col-1 s gr % Polyline n 3690 2355 m 3915 2760 l gs col-1 s gr % Polyline [60] 0 sd n 3420 2355 m 3240 2760 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3285 3120 m 3555 3435 l gs col-1 s gr [] 0 sd % Polyline n 3825 3120 m 3555 3435 l gs col-1 s gr % Polyline n 2970 1650 m 2610 3435 l gs col-1 s gr % Polyline n 3090 3090 m 2610 3435 l gs col-1 s gr % Polyline [60] 0 sd n 3780 3075 m 2610 3420 l gs col-1 s gr [] 0 sd % Polyline n 2790 3690 m 2790 3435 l 2430 3435 l 2430 3690 l cp gs col-1 s gr % Polyline n 3735 3690 m 3735 3435 l 3375 3435 l 3375 3690 l cp gs col-1 s gr % Interp Spline gs [60] 0 sd n 3900 1635 m 3445.5 1885.9 3258.0 2013.4 3150 2145 curveto 2985.2 2345.9 2850.2 2664.7 2610 3420 curveto gs col-1 s gr gr [] 0 sd /Times-Roman ff 180.00 scf sf 3150 2700 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col-1 sh gr /Times-Roman ff 180.00 scf sf 4050 2700 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col-1 sh gr /Times-Roman ff 180.00 scf sf 3525 2025 m gs 1 -1 sc (4) dup sw pop 2 div neg 0 rm col-1 sh gr /Times-Roman ff 180.00 scf sf 3000 1275 m gs 1 -1 sc (5) dup sw pop 2 div neg 0 rm col-1 sh gr /Times-Roman ff 180.00 scf sf 4125 1275 m gs 1 -1 sc (6) dup sw pop 2 div neg 0 rm col-1 sh gr /Times-Roman ff 180.00 scf sf 3600 525 m gs 1 -1 sc (7) dup sw pop 2 div neg 0 rm col-1 sh gr $F2psEnd rs %%EndDocument @endspecial 1053 1473 a FC(x)1108 1488 y FB(4)1413 1473 y FC(x)1468 1488 y FB(4)993 753 y FC(x)1048 768 y FB(2)1226 1113 y FC(x)1281 1128 y FB(3)1233 393 y FC(x)1288 408 y FB(1)788 1793 y FK(0)1256 1788 y(1)1458 753 y FC(x)1513 768 y FB(2)2297 357 y FC(T)41 b FK(:)28 b FC(u)f FI(7!)h FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))p 2193 396 856 4 v 2191 516 4 121 v 2235 480 a FC(u)p 2330 516 V 82 w FD(var)p 2549 516 V 83 w(low)p 2782 516 V 93 w(high)p 3047 516 V 2193 520 856 4 v 2193 536 V 2191 657 4 121 v 2238 621 a FK(0)p 2330 657 V 130 w(5)p 2549 657 V 2782 657 V 3047 657 V 2191 777 V 2238 741 a(1)p 2330 777 V 130 w(5)p 2549 777 V 2782 777 V 3047 777 V 2193 780 856 4 v 2191 901 4 121 v 2238 865 a(2)p 2330 901 V 130 w(4)p 2549 901 V 177 w(1)p 2782 901 V 200 w(0)p 3047 901 V 2191 1021 V 2238 985 a(3)p 2330 1021 V 130 w(4)p 2549 1021 V 177 w(0)p 2782 1021 V 200 w(1)p 3047 1021 V 2191 1142 V 2238 1105 a(4)p 2330 1142 V 130 w(3)p 2549 1142 V 177 w(2)p 2782 1142 V 200 w(3)p 3047 1142 V 2191 1262 V 2238 1226 a(5)p 2330 1262 V 130 w(2)p 2549 1262 V 177 w(4)p 2782 1262 V 200 w(0)p 3047 1262 V 2191 1382 V 2238 1346 a(6)p 2330 1382 V 130 w(2)p 2549 1382 V 177 w(0)p 2782 1382 V 200 w(4)p 3047 1382 V 2191 1503 V 2238 1467 a(7)p 2330 1503 V 130 w(1)p 2549 1503 V 177 w(5)p 2782 1503 V 200 w(6)p 3047 1503 V 2193 1506 856 4 v -9 2034 a(Figure)41 b(7:)64 b(Represen)m(ting)43 b(an)g(R)m(OBDD)f(with)g (ordering)g FC(x)2276 2049 y FB(1)2361 2034 y FC(<)j(x)2537 2049 y FB(2)2621 2034 y FC(<)g(x)2797 2049 y FB(3)2882 2034 y FC(<)g(x)3058 2049 y FB(4)3098 2034 y FK(.)73 b(The)44 b(n)m(um)m(b)s(ers)-9 2155 y(inside)c(the)i(v)m(ertices)g(are) f(the)h(iden)m(tities)e(used)i(in)f(the)g(represen)m(tation.)70 b(The)42 b(n)m(um)m(b)s(ers)g(0)f(and)g(1)-9 2275 y(are)33 b(reserv)m(ed)i(for)e(the)h(terminal)c(no)s(des.)46 b(The)34 b(n)m(um)m(b)s(ers)h(to)d(the)i(righ)m(t)e(of)h(the)h(R)m(OBDD)e(sho)m (ws)j(the)-9 2396 y(index)g(of)f(the)h(v)-5 b(ariables)33 b(in)h(the)i(ordering.)49 b(The)36 b(constan)m(ts)g(are)e(assigned)h (an)g(index)g(whic)m(h)g(is)g(the)-9 2516 y(n)m(um)m(b)s(er)25 b(of)f(v)-5 b(ariables)24 b(in)g(the)h(ordering)g(plus)f(one)i(\(here)f (4)7 b(+)g(1)26 b(=)i(5\).)41 b(This)25 b(mak)m(es)g(some)g(subsequen)m (t)-9 2636 y(algorithms)k(easier)j(to)g(presen)m(t.)45 b(The)34 b(lo)m(w-)d(and)h(high-\014elds)g(are)g(un)m(used)i(for)e(the) g(terminal)e(no)s(des.)234 3761 y FE(Mk)p FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(i;)17 b(l)r(;)g(h)p FK(\))234 3881 y(1:)144 b FF(if)32 b FC(l)e FK(=)d FC(h)33 b FF(then)k(return)c FC(l)234 4002 y FK(2:)144 b FF(else)37 b(if)32 b FD(memb)-5 b(er)o FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p FK(\))32 b FF(then)234 4122 y FK(3:)363 b FF(return)33 b FD(lo)-5 b(okup)o FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h)p FK(\))234 4242 y(4:)144 b FF(else)41 b FC(u)27 b FI( )h FD(add)o FK(\()p FC(T)8 b(;)17 b(i;)g(l)r(;)g(h)p FK(\))234 4363 y(5:)363 b FD(insert)p FK(\()p FC(H)r(;)17 b(i;)g(l)r(;)g(h;)g(u)p FK(\))234 4483 y(6:)363 b FF(return)33 b FC(u)1025 4687 y FK(Figure)f(8:)43 b(The)34 b(function)e FE(mk)p FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(i;)17 b(l)r(;)g(h)p FK(\).)p eop %%Page: 17 18 17 17 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(17)234 -67 y FE(Build)p FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(t)p FK(\))234 53 y(1:)144 b FF(function)32 b FE(build)p FK('\()p FC(t;)17 b(i)p FK(\))33 b(=)234 173 y(2:)363 b FF(if)32 b FC(i)c(>)g(n)k FF(then)234 294 y FK(3:)583 b FF(if)31 b FC(t)i FK(is)f(false)g FF(then)h(return)f FK(0)h FF(else)f(return)g FK(1)234 414 y(4:)363 b FF(else)32 b FC(v)930 429 y FB(0)998 414 y FI( )27 b FE(build)p FK('\()p FC(t)p FK([0)p FC(=x)1667 429 y FA(i)1696 414 y FK(])p FC(;)17 b(i)22 b FK(+)g(1\))234 535 y(5:)583 b FC(v)940 550 y FB(1)1007 535 y FI( )27 b FE(build)p FK('\()p FC(t)p FK([1)p FC(=x)1676 550 y FA(i)1705 535 y FK(])p FC(;)17 b(i)22 b FK(+)g(1\))234 655 y(6:)583 b FF(return)32 b FE(mk)q FK(\()p FC(i;)17 b(v)1536 670 y FB(0)1575 655 y FC(;)g(v)1666 670 y FB(1)1705 655 y FK(\))234 775 y(7:)144 b FF(end)33 b FE(build)p FK(')234 896 y(8:)234 1016 y(9:)144 b FF(return)32 b FE(build)p FK('\()p FC(t;)17 b FK(1\))234 1220 y(Figure)44 b(9:)67 b(Algorithm)42 b(for)i(building)f(an)h(R)m(OBDD)g(from)f(a)i (Bo)s(olean)e(expression)j FC(t)234 1340 y FK(using)37 b(the)g(ordering)f FC(x)1110 1355 y FB(1)1185 1340 y FC(<)f(x)1351 1355 y FB(2)1425 1340 y FC(<)g FI(\001)17 b(\001)g(\001)33 b FC(<)i(x)1853 1355 y FA(n)1901 1340 y FK(.)56 b(In)37 b(a)f(call)f FE(build)p FK('\()p FC(t;)17 b(i)p FK(\),)39 b FC(i)e FK(is)f(the)i(lo)m(w)m(est)234 1460 y(index)f(that)g(an)m(y)g(v)-5 b(ariable)35 b(of)h FC(t)g FK(can)h(ha)m(v)m(e.)57 b(Th)m(us)38 b(when)g(the)f(test)g FC(i)e(>)f(n)j FK(succeeds,)j FC(t)234 1581 y FK(con)m(tains)33 b(no)g(v)-5 b(ariables)31 b(and)h(m)m(ust)h(b)s(e)g(either)f(constan)m (tly)h(false)f(or)h(true.)-9 1949 y(W)-8 b(e)22 b(shall)f(assume)i (that)f(all)f(these)i(op)s(erations)f(can)h(b)s(e)f(p)s(erformed)g(in)g FD(c)-5 b(onstant)25 b(time)p FK(,)f FC(O)s FK(\(1\).)39 b(Section)-9 2069 y(5)32 b(will)e(sho)m(w)k(ho)m(w)f(suc)m(h)h(a)e(lo)m (w)g(complexit)m(y)g(can)h(b)s(e)g(ac)m(hiev)m(ed.)137 2190 y(The)48 b(function)f FE(mk)q FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(i;)17 b(l)r(;)g(h)p FK(\))47 b(\(see)h(\014gure)g (8\))f(searc)m(hes)j(the)d(table)g FC(H)55 b FK(for)47 b(a)g(no)s(de)g(with)-9 2310 y(v)-5 b(ariable)36 b(index)i FC(i)g FK(and)f(lo)m(w-,)i(high-branc)m(hes)f FC(l)r(;)17 b(h)38 b FK(and)g(returns)g(a)g(matc)m(hing)f(no)s(de)g(if)g(one)h (exists.)-9 2430 y(Otherwise)e(it)f(creates)i(a)f(new)h(no)s(de)f FC(u)p FK(,)h(inserts)f(it)f(in)m(to)h FC(H)43 b FK(and)36 b(returns)h(the)g(iden)m(tit)m(y)f(of)f(it.)53 b(The)-9 2551 y(running)31 b(time)f(of)38 b FE(mk)32 b FK(is)f FC(O)s FK(\(1\))f(due)i(to)f(the)h(assumptions)f(on)h(the)g(basic)f(op) s(erations)f(on)i FC(T)45 b FK(and)31 b FC(H)8 b FK(.)-9 2671 y(The)32 b(OBDD)e(is)h(ensured)i(to)e(b)s(e)g(reduced)i(if)d(no)s (des)i(are)f(only)g(created)h(through)f(the)h(use)g(of)38 b FE(mk)p FK(.)44 b(In)-9 2791 y(describing)31 b FE(mk)g FK(and)f(subsequen)m(t)k(algorithms,)28 b(w)m(e)j(mak)m(e)g(use)g(of)f (the)h(notation)e([)p FC(T)8 b(;)17 b(H)8 b FK(])30 b(to)g(indicate)-9 2912 y(that)g FE(mk)g FK(dep)s(ends)i(on)e(the)h(global)d(data)i (structures)i FC(T)44 b FK(and)30 b FC(H)8 b FK(,)30 b(but)h(w)m(e)g(lea)m(v)m(e)g(out)f(the)h(argumen)m(ts)-9 3032 y(when)i(in)m(v)m(oking)f(it)g(as)h(part)f(of)g(other)h (algorithms.)-9 3321 y Fn(4.2)135 b(Build)-9 3506 y FK(The)42 b(construction)h(of)e(an)h(R)m(OBDD)f(from)f(a)i(giv)m(en)g(Bo)s(olean) f(expression)i FC(t)f FK(pro)s(ceeds)h(as)f(in)g(the)-9 3626 y(construction)23 b(of)h(an)f(if-then-else)g(normal)f(form)g (\(INF\))i(in)f(section)h(2.)40 b(An)24 b(ordering)f(of)g(the)h(v)-5 b(ariables)-9 3747 y FC(x)46 3762 y FB(1)113 3747 y FC(<)28 b FI(\001)17 b(\001)g(\001)26 b FC(<)h(x)519 3762 y FA(n)591 3747 y FK(is)d(\014xed.)42 b(Using)24 b(the)h(Shannon)g(expansion)g FC(t)j FK(=)g FC(x)2438 3762 y FB(1)2505 3747 y FI(!)f FC(t)p FK([1)p FC(=x)2847 3762 y FB(1)2887 3747 y FK(])p FC(;)17 b(t)p FK([0)p FC(=x)3173 3762 y FB(1)3213 3747 y FK(],)26 b(a)e(no)s(de)h(for)f FC(t)-9 3867 y FK(is)e(constructed)j (b)m(y)g(a)e(call)e(to)i FE(mk)p FK(,)j(after)d(the)h(no)s(des)g(for)f FC(t)p FK([0)p FC(=x)2264 3882 y FB(1)2304 3867 y FK(])g(and)g FC(t)p FK([1)p FC(=x)2749 3882 y FB(1)2789 3867 y FK(])h(ha)m(v)m(e)g (b)s(een)g(constructed)-9 3987 y(b)m(y)44 b(recursion.)77 b(The)44 b(algorithm)c(is)j(sho)m(wn)i(in)e(\014gure)h(9.)76 b(The)44 b(call)e FE(build)p FK('\()p FC(t;)17 b(i)p FK(\))44 b(constructs)h(an)-9 4108 y(R)m(OBDD)28 b(for)h(a)g(Bo)s (olean)f(expression)j FC(t)f FK(with)f(v)-5 b(ariables)28 b(in)h FI(f)p FC(x)2347 4123 y FA(i)2375 4108 y FC(;)17 b(x)2474 4123 y FA(i)p FB(+1)2593 4108 y FC(;)g(:)g(:)g(:)f(;)h(x)2867 4123 y FA(n)2914 4108 y FI(g)p FK(.)42 b(It)29 b(do)s(es)h(so)g(b)m(y)h (\014rst)-9 4228 y(recursiv)m(ely)37 b(constructing)f(R)m(OBDDs)g FC(v)1527 4243 y FB(0)1603 4228 y FK(and)g FC(v)1843 4243 y FB(1)1919 4228 y FK(for)f FC(t)p FK([0)p FC(=x)2286 4243 y FA(i)2315 4228 y FK(])h(and)g FC(t)p FK([1)p FC(=x)2786 4243 y FA(i)2815 4228 y FK(])g(in)f(lines)h(4)g(and)g(5,)h(and)-9 4348 y(then)28 b(pro)s(ceeding)g(to)g(\014nd)g(the)g(iden)m(tit)m(y)g (of)g(the)g(no)s(de)g(for)f FC(t)i FK(in)e(line)f(6.)42 b(Notice)28 b(that)f(if)g FC(v)3273 4363 y FB(0)3340 4348 y FK(and)i FC(v)3573 4363 y FB(1)3640 4348 y FK(are)-9 4469 y(iden)m(tical,)g(or)g(if)g(there)i(already)f(is)f(a)h(no)s(de)g (with)g(the)g(same)g FC(i)p FK(,)h FC(v)2373 4484 y FB(0)2443 4469 y FK(and)f FC(v)2677 4484 y FB(1)2717 4469 y FK(,)g(no)g(new)h(no) s(de)f(is)g(created.)137 4589 y(An)c(example)g(of)f(using)i FE(build)f FK(to)g(compute)g(an)g(R)m(OBDD)f(is)g(sho)m(wn)i(in)e (\014gure)i(10.)41 b(The)26 b(running)-9 4710 y(time)31 b(of)38 b FE(build)33 b FK(is)f(bad.)44 b(It)32 b(is)g(easy)i(to)e(see) h(that)f(for)g(a)g(v)-5 b(ariable)31 b(ordering)h(with)g FC(n)g FK(v)-5 b(ariables)31 b(there)-9 4830 y(will)f(alw)m(a)m(ys)j(b) s(e)g(generated)g(on)g(the)g(order)f(of)g(2)1782 4794 y FA(n)1862 4830 y FK(calls)f(.)p eop %%Page: 18 19 18 18 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(18)7 1588 y @beginspecial 0 @llx 0 @lly 451 @urx 169 @ury 4510 @rwi @setspecial %%BeginDocument: build-ex-calls.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -17.0 199.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 3199 m 0 0 l 7455 0 l 7455 3199 l cp clip 0.06299 0.06299 sc % Polyline 7.500 slw gs clippath 2384 1203 m 2243 1194 l 2368 1130 l 2197 1167 l 2213 1240 l cp clip n 3810 855 m 2220 1200 l gs col-1 s gr gr % arrowhead n 2384 1203 m 2243 1194 l 2368 1130 l col-1 s % Polyline gs clippath 5252 1130 m 5376 1194 l 5236 1203 l 5407 1240 l 5423 1167 l cp clip n 3810 855 m 5400 1200 l gs col-1 s gr gr % arrowhead n 5252 1130 m 5376 1194 l 5236 1203 l col-1 s % Polyline gs clippath 1497 1715 m 1357 1730 l 1468 1645 l 1307 1711 l 1335 1780 l cp clip n 2220 1380 m 1335 1740 l gs col-1 s gr gr % arrowhead n 1497 1715 m 1357 1730 l 1468 1645 l col-1 s % Polyline gs clippath 2957 1644 m 3067 1730 l 2928 1714 l 3090 1780 l 3118 1711 l cp clip n 2220 1380 m 3090 1740 l gs col-1 s gr gr % arrowhead n 2957 1644 m 3067 1730 l 2928 1714 l col-1 s % Polyline gs clippath 4854 1701 m 4716 1728 l 4820 1634 l 4665 1713 l 4699 1780 l cp clip n 5400 1380 m 4695 1740 l gs col-1 s gr gr % arrowhead n 4854 1701 m 4716 1728 l 4820 1634 l col-1 s % Polyline gs clippath 6311 1653 m 6427 1732 l 6287 1724 l 6452 1780 l 6476 1709 l cp clip n 5400 1380 m 6450 1740 l gs col-1 s gr gr % arrowhead n 6311 1653 m 6427 1732 l 6287 1724 l col-1 s % Polyline gs clippath 949 2211 m 815 2251 l 909 2148 l 762 2241 l 803 2305 l cp clip n 1335 1920 m 795 2265 l gs col-1 s gr gr % arrowhead n 949 2211 m 815 2251 l 909 2148 l col-1 s % Polyline gs clippath 1736 2400 m 1785 2530 l 1675 2444 l 1779 2584 l 1839 2540 l cp clip n 1335 1920 m 1800 2550 l gs col-1 s gr gr % arrowhead n 1736 2400 m 1785 2530 l 1675 2444 l col-1 s % Polyline gs clippath 3529 2403 m 3584 2531 l 3471 2450 l 3580 2585 l 3639 2538 l cp clip n 3090 1920 m 3600 2550 l gs col-1 s gr gr % arrowhead n 3529 2403 m 3584 2531 l 3471 2450 l col-1 s % Polyline gs clippath 2719 2209 m 2585 2251 l 2678 2146 l 2532 2242 l 2573 2305 l cp clip n 3090 1920 m 2565 2265 l gs col-1 s gr gr % arrowhead n 2719 2209 m 2585 2251 l 2678 2146 l col-1 s % Polyline gs clippath 4309 2211 m 4175 2251 l 4269 2148 l 4122 2241 l 4163 2305 l cp clip n 4695 1920 m 4155 2265 l gs col-1 s gr gr % arrowhead n 4309 2211 m 4175 2251 l 4269 2148 l col-1 s % Polyline gs clippath 5108 2401 m 5160 2530 l 5049 2446 l 5154 2585 l 5214 2539 l cp clip n 4695 1920 m 5175 2550 l gs col-1 s gr gr % arrowhead n 5108 2401 m 5160 2530 l 5049 2446 l col-1 s % Polyline gs clippath 6829 2328 m 6884 2456 l 6771 2375 l 6880 2510 l 6939 2463 l cp clip n 6450 1920 m 6900 2475 l gs col-1 s gr gr % arrowhead n 6829 2328 m 6884 2456 l 6771 2375 l col-1 s % Polyline gs clippath 6079 2209 m 5945 2251 l 6038 2146 l 5892 2242 l 5933 2305 l cp clip n 6450 1920 m 5925 2265 l gs col-1 s gr gr % arrowhead n 6079 2209 m 5945 2251 l 6038 2146 l col-1 s $F2psEnd rs %%EndDocument @endspecial 766 631 a Fs(\(\(0)19 b Fm(,)g Fl(x)993 639 y Fk(2)1025 631 y Fs(\))c Fm(_)g Fl(x)1164 639 y Fk(3)1196 631 y Fl(;)c Fs(2\))1495 355 y Fj(build)p Fi(')p Fs(\(\()p Fl(x)1760 363 y Fk(1)1810 355 y Fm(,)20 b Fl(x)1934 363 y Fk(2)1966 355 y Fs(\))15 b Fm(_)f Fl(x)2104 363 y Fk(3)2137 355 y Fl(;)d Fs(1\))2436 631 y(\(\(1)18 b Fm(,)i Fl(x)2663 639 y Fk(2)2695 631 y Fs(\))15 b Fm(_)f Fl(x)2833 639 y Fk(3)2866 631 y Fl(;)d Fs(2\))3005 914 y(\(\(1)19 b Fm(,)g Fs(1\))c Fm(_)g Fl(x)3366 922 y Fk(3)3398 914 y Fl(;)c Fs(3\))-1404 b(\(\(1)19 b Fm(,)g Fs(0\))c Fm(_)g Fl(x)2445 922 y Fk(3)2477 914 y Fl(;)c Fs(3\))1803 1190 y(\(\(1)19 b Fm(,)g Fs(0\))c Fm(_)g Fs(0)p Fl(;)c Fs(4\))499 b(\(\(1)19 b Fm(,)g Fs(1\))c Fm(_)g Fs(0)p Fl(;)c Fs(4\))2354 1347 y(\(\(1)19 b Fm(,)g Fs(0\))d Fm(_)e Fs(1)p Fl(;)e Fs(4\))459 b(\(\(1)19 b Fm(,)g Fs(1\))c Fm(_)g Fs(1)p Fl(;)c Fs(4\))1241 914 y(\(\(0)19 b Fm(,)g Fs(1\))c Fm(_)g Fl(x)1602 922 y Fk(3)1634 914 y Fl(;)c Fs(3\))984 1190 y(\(\(0)19 b Fm(,)g Fs(1\))c Fm(_)g Fs(0)p Fl(;)c Fs(4\))320 914 y(\(\(0)19 b Fm(,)g Fs(0\))c Fm(_)g Fl(x)681 922 y Fk(3)713 914 y Fl(;)c Fs(3\))583 1347 y(\(\(0)19 b Fm(,)g Fs(0\))c Fm(_)g Fs(1)p Fl(;)c Fs(4\))55 1190 y(\(\(0)19 b Fm(,)g Fs(0\))c Fm(_)g Fs(0)p Fl(;)c Fs(4\))1528 1347 y(\(\(0)18 b Fm(,)i Fs(1\))15 b Fm(_)g Fs(1)p Fl(;)c Fs(4\))458 828 y Fh(b)991 b(c)923 521 y(d)2229 828 y(e)2719 521 y(f)1836 261 y(g)3286 828 y(e)1836 1575 y(a)496 4030 y @beginspecial 0 @llx 0 @lly 330 @urx 271 @ury 3300 @rwi @setspecial %%BeginDocument: build-ex.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -29.0 314.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 5020 m 0 0 l 5739 0 l 5739 5020 l cp clip 0.06299 0.06299 sc % Polyline 7.500 slw n 2295 2430 m 2295 2130 l 1980 2130 l 1980 2430 l cp gs col-1 s gr % Polyline n 1395 2430 m 1395 2130 l 1080 2130 l 1080 2430 l cp gs col-1 s gr % Polyline n 4095 2430 m 4095 2130 l 3780 2130 l 3780 2430 l cp gs col-1 s gr % Polyline n 4770 2430 m 4770 2130 l 4455 2130 l 4455 2430 l cp gs col-1 s gr % Polyline n 1125 4725 m 1125 4425 l 810 4425 l 810 4725 l cp gs col-1 s gr % Polyline n 2835 4725 m 2835 4425 l 2520 4425 l 2520 4725 l cp gs col-1 s gr % Polyline n 4635 4725 m 4635 4425 l 4320 4425 l 4320 4725 l cp gs col-1 s gr % Polyline n 5400 4725 m 5400 4425 l 5085 4425 l 5085 4725 l cp gs col-1 s gr % Polyline n 3600 4725 m 3600 4425 l 3285 4425 l 3285 4725 l cp gs col-1 s gr % Polyline n 1845 4725 m 1845 4425 l 1530 4425 l 1530 4725 l cp gs col-1 s gr % Ellipse n 2490 1725 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 1320 4020 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3030 4020 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4860 4020 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4275 1725 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 735 3480 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 2460 3480 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4275 3480 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4860 2940 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3600 3480 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 5430 3480 135 135 0 360 DrawEllipse gs col-1 s gr % Ellipse n 3705 1185 135 135 0 360 DrawEllipse gs col-1 s gr % Polyline n 2490 1320 m 2490 1590 l gs col-1 s gr % Polyline [60] 0 sd n 2550 1830 m 2820 2130 l gs col-1 s gr [] 0 sd % Polyline n 2385 1830 m 2145 2130 l gs col-1 s gr % Polyline [60] 0 sd n 2145 1320 m 2145 2130 l gs col-1 s gr [] 0 sd % Polyline n 795 3615 m 1245 3885 l gs col-1 s gr % Polyline [60] 0 sd n 1380 4125 m 1650 4425 l gs col-1 s gr [] 0 sd % Polyline n 1200 4125 m 975 4425 l gs col-1 s gr % Polyline n 1920 3615 m 1650 4050 l 975 4425 l gs col-1 s gr % Polyline [60] 0 sd n 705 3615 m 975 4425 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 1200 3000 m 795 3345 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 1545 3615 m 1335 3885 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3540 3615 m 3060 3885 l gs col-1 s gr [] 0 sd % Polyline n 2520 3615 m 2955 3885 l gs col-1 s gr % Polyline [60] 0 sd n 3105 4125 m 3375 4425 l gs col-1 s gr [] 0 sd % Polyline n 2925 4125 m 2685 4425 l gs col-1 s gr % Polyline n 3645 3615 m 3525 3975 l 2700 4425 l gs col-1 s gr % Polyline [60] 0 sd n 2415 3615 m 2685 4425 l gs col-1 s gr [] 0 sd % Polyline n 3135 3000 m 3540 3345 l gs col-1 s gr % Polyline [60] 0 sd n 2925 3000 m 2520 3345 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 5355 3615 m 4875 3885 l gs col-1 s gr [] 0 sd % Polyline n 4350 3615 m 4785 3885 l gs col-1 s gr % Polyline [60] 0 sd n 4920 4125 m 5190 4425 l gs col-1 s gr [] 0 sd % Polyline n 4740 4125 m 4515 4425 l gs col-1 s gr % Polyline n 5460 3615 m 5325 3975 l 4500 4425 l gs col-1 s gr % Polyline [60] 0 sd n 4245 3615 m 4515 4425 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 4125 705 m 3735 1050 l gs col-1 s gr [] 0 sd % Polyline n 3780 1320 m 4215 1590 l gs col-1 s gr % Polyline [60] 0 sd n 4350 1830 m 4605 2130 l gs col-1 s gr [] 0 sd % Polyline n 4185 1830 m 3945 2130 l gs col-1 s gr % Polyline [60] 0 sd n 3675 1320 m 3945 2130 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 1260 1305 m 1260 2115 l gs col-1 s gr [] 0 sd % Polyline n 4950 3000 m 5355 3345 l gs col-1 s gr % Polyline [60] 0 sd n 4740 3000 m 4350 3345 l gs col-1 s gr [] 0 sd % Polyline n 2970 2430 m 2970 2130 l 2655 2130 l 2655 2430 l cp gs col-1 s gr $F2psEnd rs %%EndDocument @endspecial 1336 2656 a FL(1)-532 b(1)1359 b(1)295 b(0)721 3861 y(1)839 b(1)886 b(1)343 b(0)-1004 b(0)-981 b(0)873 2801 y Fh(b)589 b(c)868 b(d)1690 2656 y FL(0)889 4006 y Fh(e)883 b(f)891 b(g)1503 2345 y Fq(x)1570 2363 y Fr(3)2141 2053 y Fq(x)2208 2071 y Fr(2)2440 2345 y Fq(x)2507 2363 y Fr(3)582 3266 y Fq(x)649 3284 y Fr(2)889 3550 y Fq(x)956 3568 y Fr(3)1487 3266 y Fq(x)1554 3284 y Fr(2)1787 3550 y Fq(x)1854 3568 y Fr(3)2086 3266 y Fq(x)2153 3284 y Fr(2)2440 3266 y Fq(x)2507 3284 y Fr(2)2747 2983 y Fq(x)2814 3001 y Fr(1)3046 3266 y Fq(x)3113 3284 y Fr(2)2747 3550 y Fq(x)2814 3568 y Fr(3)-9 4233 y FK(Figure)30 b(10:)42 b(Using)31 b FE(build)g FK(on)g(the)h(expression)g(\()p FC(x)1892 4248 y FB(1)1959 4233 y FI(,)c FC(x)2142 4248 y FB(2)2182 4233 y FK(\))19 b FI(_)g FC(x)2379 4248 y FB(3)2419 4233 y FK(.)43 b(\(a\))31 b(The)h(tree)f(of)g(calls)f(to)h FE(build)p FK(.)-9 4354 y(\(b\))25 b(The)i(R)m(OBDD)d(after)h(the)h (call)e FE(build)p FK('\(\(0)k FI(,)f FK(0\))8 b FI(_)g FC(x)2077 4369 y FB(3)2117 4354 y FC(;)17 b FK(3\).)40 b(\(c\))26 b(After)f(the)h(call)e FE(build)p FK('\(\(0)k FI(,)f FK(1\))8 b FI(_)-9 4474 y FC(x)46 4489 y FB(3)85 4474 y FC(;)17 b FK(3\).)40 b(\(d\))22 b(After)h(the)f(call)f FE(build)p FK('\(\(0)28 b FI(,)f FC(x)1630 4489 y FB(2)1670 4474 y FK(\))q FI(_)q FC(x)1831 4489 y FB(3)1872 4474 y FC(;)17 b FK(2\).)39 b(\(e\))23 b(After)f(the)h(calls)e FE(build)p FK('\(\(1)28 b FI(,)f FK(0\))q FI(_)q FC(x)3599 4489 y FB(3)3640 4474 y FC(;)17 b FK(3\))-9 4594 y(and)38 b FE(build)p FK('\(\(1)g FI(,)f FK(1\))26 b FI(_)g FC(x)1035 4609 y FB(3)1075 4594 y FC(;)17 b FK(3\).)60 b(\(f)7 b(\))38 b(After)h(the)g(call)d FE(build)p FK('\(\(1)i FI(,)f FC(x)2707 4609 y FB(2)2747 4594 y FK(\))26 b FI(_)g FC(x)2958 4609 y FB(3)2998 4594 y FC(;)17 b FK(2\).)61 b(\(g\))37 b(The)j(\014nal)-9 4715 y(result.)p eop %%Page: 19 20 19 19 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(19)-9 -171 y Fn(4.3)135 b(Apply)234 213 y FE(Appl)-7 b(y)p FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(op;)17 b(u)1018 228 y FB(1)1056 213 y FC(;)g(u)1156 228 y FB(2)1195 213 y FK(\))234 333 y(1:)71 b FD(init)p FK(\()p FC(G)p FK(\))234 454 y(2:)234 574 y(3:)g FF(function)32 b FE(app)o FK(\()p FC(u)1081 589 y FB(1)1120 574 y FC(;)17 b(u)1220 589 y FB(2)1259 574 y FK(\))27 b(=)234 694 y(4:)144 b FF(if)42 b FC(G)p FK(\()p FC(u)733 709 y FB(1)772 694 y FC(;)17 b(u)872 709 y FB(2)910 694 y FK(\))28 b FI(6)p FK(=)g FD(empty)k FF(then)h(return)f FC(G)p FK(\()p FC(u)2132 709 y FB(1)2171 694 y FC(;)17 b(u)2271 709 y FB(2)2310 694 y FK(\))234 815 y(5:)144 b FF(else)32 b(if)42 b FC(u)828 830 y FB(1)895 815 y FI(2)28 b(f)p FK(0)p FC(;)17 b FK(1)p FI(g)31 b FF(and)j FC(u)1530 830 y FB(2)1596 815 y FI(2)28 b(f)p FK(0)p FC(;)17 b FK(1)p FI(g)32 b FF(then)h FD(u)28 b FI( )f FC(op)p FK(\()p FC(u)2613 830 y FB(1)2652 815 y FC(;)17 b(u)2752 830 y FB(2)2790 815 y FK(\))234 935 y(6:)144 b FF(else)32 b(if)42 b FD(var)p FK(\()p FC(u)1002 950 y FB(1)1041 935 y FK(\))27 b(=)h FD(var)p FK(\()p FC(u)1440 950 y FB(2)1478 935 y FK(\))33 b FF(then)234 1055 y FK(7:)363 b FD(u)28 b FI( )f FE(mk)q FK(\()p FD(var)p FK(\()p FC(u)1286 1070 y FB(1)1325 1055 y FK(\))p FC(;)17 b FE(app)o FK(\()p FD(low)10 b FK(\()p FC(u)1861 1070 y FB(1)1900 1055 y FK(\))p FC(;)17 b FD(low)9 b FK(\()p FC(u)2225 1070 y FB(2)2264 1055 y FK(\)\))p FC(;)17 b FE(app)o FK(\()p FD(high)7 b FK(\()p FC(u)2870 1070 y FB(1)2909 1055 y FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)3266 1070 y FB(2)3305 1055 y FK(\)\)\))234 1176 y(8)171 b FF(else)32 b(if)42 b FD(var)p FK(\()p FC(u)1002 1191 y FB(1)1041 1176 y FK(\))27 b FC(<)h FD(var)p FK(\()p FC(u)1440 1191 y FB(2)1478 1176 y FK(\))33 b FF(then)234 1296 y FK(9)390 b FD(u)28 b FI( )f FE(mk)q FK(\()p FD(var)p FK(\()p FC(u)1286 1311 y FB(1)1325 1296 y FK(\))p FC(;)17 b FE(app)o FK(\()p FD(low)10 b FK(\()p FC(u)1861 1311 y FB(1)1900 1296 y FK(\))p FC(;)17 b(u)2038 1311 y FB(2)2076 1296 y FK(\))p FC(;)g FE(app)o FK(\()p FD(high)7 b FK(\()p FC(u)2644 1311 y FB(1)2683 1296 y FK(\))p FC(;)17 b(u)2821 1311 y FB(2)2859 1296 y FK(\)\))234 1417 y(10:)95 b FF(else)32 b FK(\()p FI(\003)g FD(var)p FK(\()p FC(u)1014 1432 y FB(1)1053 1417 y FK(\))27 b FC(>)h FD(var)p FK(\()p FC(u)1452 1432 y FB(2)1491 1417 y FK(\))k FI(\003)p FK(\))234 1537 y(11:)314 b FD(u)28 b FI( )f FE(mk)q FK(\()p FD(var)p FK(\()p FC(u)1286 1552 y FB(2)1325 1537 y FK(\))p FC(;)17 b FE(app)o FK(\()p FC(u)1673 1552 y FB(1)1712 1537 y FC(;)g FD(low)9 b FK(\()p FC(u)1999 1552 y FB(2)2038 1537 y FK(\)\))p FC(;)17 b FE(app)o FK(\()p FC(u)2424 1552 y FB(1)2463 1537 y FC(;)g FD(high)7 b FK(\()p FC(u)2783 1552 y FB(2)2821 1537 y FK(\)\)\))234 1657 y(12:)95 b FC(G)p FK(\()p FC(u)625 1672 y FB(1)664 1657 y FC(;)17 b(u)764 1672 y FB(2)802 1657 y FK(\))28 b FI( )f FD(u)234 1778 y FK(13:)95 b FF(return)32 b FD(u)234 1898 y FK(14:)22 b FF(end)33 b FE(app)234 2019 y FK(15:)234 2139 y(16:)22 b FF(return)32 b FE(app)o FK(\()p FC(u)990 2154 y FB(1)1029 2139 y FC(;)17 b(u)1129 2154 y FB(2)1168 2139 y FK(\))817 2463 y(Figure)32 b(11:)43 b(The)33 b(algorithm)d FE(appl)-7 b(y)p FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(op;)17 b(u)2702 2478 y FB(1)2740 2463 y FC(;)g(u)2840 2478 y FB(2)2878 2463 y FK(\).)137 2761 y(All)33 b(the)j(binary)f(Bo)s(olean)f (op)s(erators)h(on)g(R)m(OBDDs)g(are)g(implemen)m(ted)f(b)m(y)i(the)g (same)f(general)-9 2881 y(algorithm)23 b FE(appl)-7 b(y)p FK(\()p FC(op;)17 b(u)941 2896 y FB(1)980 2881 y FC(;)g(u)1080 2896 y FB(2)1118 2881 y FK(\))27 b(that)g(for)g(t)m(w)m(o)h(R)m(OBDDs)e (computes)i(the)f(R)m(OBDD)f(for)h(the)g(Bo)s(olean)-9 3001 y(expression)33 b FC(t)495 2965 y FA(u)536 2974 y Fx(1)606 3001 y FC(op)f(t)769 2965 y FA(u)810 2974 y Fx(2)848 3001 y FK(.)44 b(The)32 b(construction)g(of)g FE(appl)-7 b(y)31 b FK(is)g(based)i(on)f(the)g(Shannon)g(expansion)g (\(2\):)1373 3180 y FC(t)61 b FK(=)f FC(x)28 b FI(!)f FC(t)p FK([1)p FC(=x)p FK(])q FC(;)17 b(t)p FK([0)p FC(=x)p FK(])f FC(:)-9 3360 y FK(Observ)m(e)34 b(that)e(for)g(all)f(Bo)s(olean) g(op)s(erators)i FD(op)f FK(the)h(follo)m(wing)d(holds:)777 3539 y(\()p FC(x)e FI(!)f FC(t)1060 3554 y FB(1)1100 3539 y FC(;)17 b(t)1179 3554 y FB(2)1218 3539 y FK(\))33 b FC(op)f FK(\()p FC(x)c FI(!)f FC(t)1700 3498 y Fy(0)1700 3563 y FB(1)1740 3539 y FC(;)17 b(t)1819 3498 y Fy(0)1819 3563 y FB(2)1858 3539 y FK(\))61 b(=)f FC(x)28 b FI(!)f FC(t)2338 3554 y FB(1)2410 3539 y FC(op)33 b(t)2574 3498 y Fy(0)2574 3563 y FB(1)2613 3539 y FC(;)h(t)2709 3554 y FB(2)2781 3539 y FC(op)e(t)2944 3498 y Fy(0)2944 3563 y FB(2)3645 3539 y FK(\(4\))-9 3718 y(If)23 b(w)m(e)h(start)f(from)f (the)i(ro)s(ot)e(of)h(the)h(t)m(w)m(o)g(R)m(OBDDs)e(w)m(e)j(can)e (construct)i(the)e(R)m(OBDD)f(of)h(the)h(result)f(b)m(y)-9 3838 y(recursiv)m(ely)30 b(constructing)g(the)g(lo)m(w-)f(and)h(the)g (high-branc)m(hes)g(and)g(then)g(form)f(the)h(new)g(ro)s(ot)f(from)-9 3959 y(these.)55 b(Again,)36 b(to)g(ensure)i(that)e(the)h(result)f(is)g (reduced,)i(w)m(e)g(create)f(the)f(no)s(de)h(through)f(a)g(call)e(to)-9 4079 y FE(mk)p FK(.)45 b(Moreo)m(v)m(er,)35 b(to)d(a)m(v)m(oid)h(an)g (exp)s(onen)m(tial)g(blo)m(w-up)f(of)h(recursiv)m(e)h(calls,)e FD(dynamic)j(pr)-5 b(o)g(gr)g(amming)-9 4199 y FK(is)32 b(used.)44 b(The)34 b(algorithm)29 b(is)j(sho)m(wn)i(in)e(\014gure)h (11.)137 4320 y(Dynamic)e(programming)f(is)i(implemen)m(ted)f(using)h (a)h(table)e(of)i(results)g FC(G)p FK(.)43 b(Eac)m(h)33 b(en)m(try)h(\()p FC(i;)17 b(j)6 b FK(\))33 b(is)-9 4440 y(either)j FD(empty)h FK(or)f(con)m(tains)h(the)g(earlier)e(computed)i (result)g(of)f FE(app)p FK(\()p FC(i;)17 b(j)6 b FK(\).)55 b(The)38 b(algorithm)c(distin-)-9 4560 y(guishes)k(b)s(et)m(w)m(een)i (four)d(di\013eren)m(t)h(cases,)j(the)d(\014rst)g(of)f(them)h(handles)g (the)g(situation)e(where)j(b)s(oth)-9 4681 y(argumen)m(ts)e(are)g (terminal)d(no)s(des,)39 b(the)e(remaining)e(three)j(handle)e(the)i (situations)e(where)i(at)e(least)-9 4801 y(one)c(argumen)m(t)h(is)f(a)g (v)-5 b(ariable)31 b(no)s(de.)137 4922 y(If)i(b)s(oth)g FC(u)522 4937 y FB(1)594 4922 y FK(and)h FC(u)841 4937 y FB(2)913 4922 y FK(are)f(terminal,)e(a)i(new)i FD(terminal)g(no)-5 b(de)40 b FK(is)32 b(computed)i(ha)m(ving)f(the)h(v)-5 b(alue)32 b(of)-9 5042 y FD(op)c FK(applied)f(to)h(the)h(t)m(w)m(o)g (truth)g(v)-5 b(alues.)42 b(\(Recall,)27 b(that)i(terminal)d(no)s(de)i (0)g(is)g(represen)m(ted)j(b)m(y)f(a)e(no)s(de)-9 5162 y(with)k(iden)m(tit)m(y)g(0)g(and)h(similarly)c(for)j(1.\))p eop %%Page: 20 21 20 20 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(20)137 -171 y(If)40 b(at)g(least)h(one) f(of)g FC(u)967 -156 y FB(1)1047 -171 y FK(and)g FC(u)1300 -156 y FB(2)1380 -171 y FK(are)g(non-terminal,)g(w)m(e)i(pro)s(ceed)f (according)f(to)g(the)h(v)-5 b(ariable)-9 -51 y(index.)91 b(If)48 b(the)h(no)s(des)g(ha)m(v)m(e)g(the)g(same)f(index,)53 b(the)c(t)m(w)m(o)g(lo)m(w-branc)m(hes)g(are)g(paired)e(and)i FE(app)-9 70 y FK(recursiv)m(ely)30 b(computed)f(on)g(them.)42 b(Similarly)25 b(for)k(the)g(high-branc)m(hes.)43 b(This)29 b(corresp)s(onds)i(exactly)-9 190 y(to)25 b(the)i(case)g(sho)m(wn)h(in) d(equation)h(\(4\).)41 b(If)26 b(they)h(ha)m(v)m(e)h(di\013eren)m(t)e (indices,)h(w)m(e)g(pro)s(ceed)g(b)m(y)g(pairing)e(the)-9 310 y(no)s(de)36 b(with)g(lo)m(w)m(est)i(index)e(with)g(the)h(lo)m(w-)f (and)h(high-branc)m(hes)g(of)f(the)h(other.)55 b(This)37 b(corresp)s(onds)-9 431 y(to)32 b(the)h(equation)980 551 y(\()p FC(x)1073 566 y FA(i)1130 551 y FI(!)27 b FC(t)1292 566 y FB(1)1331 551 y FC(;)17 b(t)1410 566 y FB(2)1450 551 y FK(\))32 b FD(op)g FC(t)93 b FK(=)g FC(x)2004 566 y FA(i)2060 551 y FI(!)28 b FC(t)2223 566 y FB(1)2295 551 y FD(op)k FC(t;)17 b(t)2541 566 y FB(2)2613 551 y FD(op)32 b FC(t)865 b FK(\(5\))-9 716 y(whic)m(h)41 b(holds)f(for)g(all)f FC(t)p FK(.)67 b(Since)41 b(w)m(e)h(ha)m(v)m(e)g (tak)m(en)f(the)g(index)g(of)f(the)i(terminals)c(to)i(b)s(e)h(one)g (larger)-9 836 y(than)30 b(the)h(index)g(of)g(the)g(non-terminals,)e (the)i(last)f(t)m(w)m(o)h(cases,)i FD(var)10 b FK(\()p FC(u)2605 851 y FB(1)2644 836 y FK(\))28 b FC(<)f FD(var)11 b FK(\()p FC(u)3054 851 y FB(2)3093 836 y FK(\))30 b(and)h FD(var)11 b FK(\()p FC(u)3590 851 y FB(1)3629 836 y FK(\))27 b FC(>)-9 956 y FD(var)10 b FK(\()p FC(u)231 971 y FB(2)270 956 y FK(\),)32 b(tak)m(e)i(accoun)m(t)f(of)f(the)h(situations)f(where) i(one)e(of)h(the)g(no)s(des)g(is)f(a)g(terminal.)137 1077 y(Figure)c(12)g(sho)m(ws)j(an)e(example)f(of)h(applying)e(the)j (algorithm)c(on)i(t)m(w)m(o)i(small)d(R)m(OBDDs.)41 b(Notice)-9 1197 y(ho)m(w)33 b(pairs)f(of)g(no)s(des)h(from)e(the)i(t)m(w)m(o)h(R)m (OBDDs)e(are)g(com)m(bined)h(and)f(computed.)137 1318 y(T)-8 b(o)35 b(analyze)g(the)h(complexit)m(y)e(of)41 b FE(appl)-7 b(y)37 b FK(w)m(e)f(let)f FI(j)p FC(u)p FI(j)f FK(denote)i(the)f(n)m(um)m(b)s(er)h(of)e(no)s(des)i(that)f(can) -9 1438 y(b)s(e)41 b(reac)m(hed)h(from)d FC(u)h FK(in)g(the)i(R)m (OBDD.)e(Assume)h(that)g FC(G)f FK(can)h(b)s(e)g(implemen)m(ted)f(with) g(constan)m(t)-9 1558 y(lo)s(okup)f(and)h(insertion)f(times.)64 b(\(See)41 b(section)f(5)f(for)h(details)f(on)g(ho)m(w)i(to)e(ac)m (hiev)m(e)i(this.\))65 b(Due)40 b(to)-9 1679 y(the)29 b(dynamic)f(programming)e(at)j(most)g FI(j)p FC(u)1578 1694 y FB(1)1616 1679 y FI(j)17 b(j)p FC(u)1745 1694 y FB(2)1783 1679 y FI(j)29 b FK(calls)f(to)g FE(Appl)-7 b(y)31 b FK(are)e(generated.)43 b(Eac)m(h)30 b(call)e(tak)m(es)-9 1799 y(constan)m(t)33 b(time.)42 b(The)34 b(total)d(running)h(time)f (is)h(therefore)h FC(O)s FK(\()p FI(j)p FC(u)2370 1814 y FB(1)2408 1799 y FI(j)17 b(j)p FC(u)2537 1814 y FB(2)2575 1799 y FI(j)p FK(\).)-9 2084 y Fn(4.4)135 b(Restrict)-9 2269 y FK(The)34 b(next)g(op)s(eration)f(w)m(e)h(consider)g(is)f(the)h FD(r)-5 b(estriction)41 b FK(of)33 b(a)g(R)m(OBDD)f FC(u)p FK(.)46 b(That)34 b(is,)f(giv)m(en)h(a)f(truth)-9 2390 y(assignmen)m(t,)d(for)g(example)g([0)p FC(=x)1225 2405 y FB(3)1264 2390 y FC(;)17 b FK(1)p FC(=x)1461 2405 y FB(5)1501 2390 y FC(;)g FK(1)p FC(=x)1698 2405 y FB(6)1737 2390 y FK(],)31 b(w)m(e)g(w)m(an)m(t)g(to)f(compute)h(the)g(R)m(OBDD)e (for)h FC(t)3451 2353 y FA(u)3526 2390 y FK(under)-9 2510 y(this)e(restriction,)g(i.e.,)i(\014nd)f(the)g(R)m(OBDD)e(for)h FC(t)1775 2474 y FA(u)1821 2510 y FK([0)p FC(=x)2001 2525 y FB(3)2040 2510 y FC(;)17 b FK(1)p FC(=x)2237 2525 y FB(5)2276 2510 y FC(;)g FK(1)p FC(=x)2473 2525 y FB(6)2512 2510 y FK(].)43 b(As)29 b(an)f(example)h(consider)g(the)-9 2630 y(R)m(OBDD)j(of)g(\014gure)i(10\(g\))e(\(rep)s(eated)i(b)s(elo)m (w)f(to)g(the)h(left\))e(represen)m(ting)i(the)g(Bo)s(olean)e (expression)-9 2751 y(\()p FC(x)84 2766 y FB(1)173 2751 y FI(,)49 b FC(x)377 2766 y FB(2)417 2751 y FK(\))31 b FI(_)g FC(x)638 2766 y FB(3)678 2751 y FK(.)82 b(Restricting)44 b(it)h(with)g(resp)s(ect)h(to)f(the)h(truth)g(assignmen)m(t)f([0)p FC(=x)3268 2766 y FB(2)3308 2751 y FK(])g(yields)g(an)-9 2871 y(R)m(OBDD)38 b(for)h(\()p FI(:)p FC(x)708 2886 y FB(1)776 2871 y FI(_)27 b FC(x)924 2886 y FB(3)964 2871 y FK(\).)65 b(It)39 b(is)h(constructed)h(b)m(y)g(replacing)d(eac)m (h)j(o)s(ccurrence)g(of)e(a)h(no)s(de)f(with)-9 2991 y(lab)s(el)30 b FC(x)281 3006 y FB(2)354 2991 y FK(b)m(y)j(its)f(left)g (branc)m(h)h(yielding)e(the)i(R)m(OBDD)f(at)g(the)h(righ)m(t:)1102 4136 y @beginspecial 36 @llx 36 @lly 181 @urx 289 @ury 725 @rwi @setspecial %%BeginDocument: restrict1.ps save /DotDict 200 dict def DotDict begin /coord-font-family /Times-Roman def /default-font-family /Times-Roman def /coordfont coord-font-family findfont 8 scalefont def /InvScaleFactor 1.0 def /set_scale { dup 1 exch div /InvScaleFactor exch def dup scale } bind def % styles /solid { } bind def /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def /bold { 2 setlinewidth } bind def /filled { } bind def /unfilled { } bind def /rounded { } bind def /diagonals { } bind def % hooks for setting color /nodecolor { sethsbcolor } bind def /edgecolor { sethsbcolor } bind def /graphcolor { sethsbcolor } bind def /nopcolor {pop pop pop} bind def /beginpage { % i j npages /npages exch def /j exch def /i exch def /str 10 string def npages 1 gt { gsave coordfont setfont 0 0 moveto (() show i str cvs show (,) show j str cvs show ()) show grestore } if } bind def /set_font { findfont exch scalefont setfont } def /arrowhead { /arrowwidth exch def /arrowlength exch def gsave 3 1 roll translate rotate newpath arrowlength arrowwidth 2 div moveto 0 0 lineto arrowlength arrowwidth -2 div lineto closepath fill stroke grestore } def % draw aligned label in bounding box aligned to current point % alignfactor tells what fraction to place on the left. % -.5 is centered. /alignedtext { % text labelwidth fontsz alignfactor /alignfactor exch def /fontsz exch def /width exch def /text exch def gsave % even if node or edge is dashed, don't paint text with dashes [] 0 setdash currentpoint newpath moveto text stringwidth pop alignfactor mul fontsz -.3 mul rmoveto text show grestore } def /boxprim { % xcorner ycorner xsize ysize 4 2 roll moveto 2 copy exch 0 rlineto 0 exch rlineto pop neg 0 rlineto closepath } bind def /ellipse_path { /ry exch def /rx exch def /y exch def /x exch def matrix currentmatrix newpath x y translate rx ry scale 0 0 1 0 360 arc setmatrix } bind def /endpage { showpage } bind def /layercolorseq [ % layer color sequence - darkest to lightest [0 0 0] [.2 .8 .8] [.4 .8 .8] [.6 .8 .8] [.8 .8 .8] ] def /setlayer {/maxlayer exch def /curlayer exch def layercolorseq curlayer get aload pop sethsbcolor /nodecolor {nopcolor} def /edgecolor {nopcolor} def /graphcolor {nopcolor} def } bind def /onlayer { curlayer ne {invis} if } def /onlayers { /myupper exch def /mylower exch def curlayer mylower lt curlayer myupper gt or {invis} if } def /curlayer 0 def 14 default-font-family set_font % /arrowlength 10 def % /arrowwidth 5 def gsave 35 35 146 254 boxprim clip newpath 36 36 translate 0 0 1 beginpage 0 0 translate 0 rotate 0.000 0.000 0.000 graphcolor 14.00 /Times-Roman set_font % 0 gsave 10 dict begin newpath 144 36 moveto 90 36 lineto 90 0 lineto 144 0 lineto closepath stroke gsave 10 dict begin 117 19 moveto (0) 7 14.00 -0.50 alignedtext end grestore end grestore % 1 gsave 10 dict begin newpath 72 36 moveto 18 36 lineto 18 0 lineto 72 0 lineto closepath stroke gsave 10 dict begin 45 19 moveto (1) 7 14.00 -0.50 alignedtext end grestore end grestore % 14 gsave 10 dict begin 32 234 27 18 ellipse_path stroke gsave 10 dict begin 32 235 moveto (x1) 14 14.00 -0.50 alignedtext end grestore end grestore % 12 gsave 10 dict begin 27 162 27 18 ellipse_path stroke gsave 10 dict begin 27 163 moveto (x2) 14 14.00 -0.50 alignedtext end grestore end grestore % 14 -> 12 gsave 10 dict begin dotted newpath 31 216 moveto 30 208 29 198 29 189 curveto stroke 28 180 83.66 10.00 5.00 arrowhead end grestore % 13 gsave 10 dict begin 99 162 27 18 ellipse_path stroke gsave 10 dict begin 99 163 moveto (x2) 14 14.00 -0.50 alignedtext end grestore end grestore % 14 -> 13 newpath 47 218 moveto 56 208 68 194 78 183 curveto stroke 84 177 135.00 10.00 5.00 arrowhead % 12 -> 1 gsave 10 dict begin dotted newpath 27 144 moveto 27 123 27 91 29 72 curveto 31 64 33 55 36 45 curveto stroke 39 36 108.43 10.00 5.00 arrowhead end grestore % 5 gsave 10 dict begin 68 90 27 18 ellipse_path stroke gsave 10 dict begin 68 91 moveto (x3) 14 14.00 -0.50 alignedtext end grestore end grestore % 12 -> 5 newpath 37 145 moveto 42 136 48 125 54 115 curveto stroke 58 107 116.57 10.00 5.00 arrowhead % 13 -> 1 newpath 105 144 moveto 111 123 118 88 107 72 curveto 100 61 87 50 75 40 curveto stroke 70 36 38.66 10.00 5.00 arrowhead % 13 -> 5 gsave 10 dict begin dotted newpath 91 145 moveto 87 136 83 125 78 115 curveto stroke 75 107 69.44 10.00 5.00 arrowhead end grestore % 5 -> 0 gsave 10 dict begin dotted newpath 79 73 moveto 85 64 93 53 100 43 curveto stroke 105 36 125.54 10.00 5.00 arrowhead end grestore % 5 -> 1 newpath 62 72 moveto 60 64 56 54 53 44 curveto stroke 51 36 75.96 10.00 5.00 arrowhead endpage grestore end restore %%EndDocument @endspecial 1027 w @beginspecial 36 @llx 36 @lly 163 @urx 217 @ury 635 @rwi @setspecial %%BeginDocument: restrict2.ps save /DotDict 200 dict def DotDict begin /coord-font-family /Times-Roman def /default-font-family /Times-Roman def /coordfont coord-font-family findfont 8 scalefont def /InvScaleFactor 1.0 def /set_scale { dup 1 exch div /InvScaleFactor exch def dup scale } bind def % styles /solid { } bind def /dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def /dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def /invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def /bold { 2 setlinewidth } bind def /filled { } bind def /unfilled { } bind def /rounded { } bind def /diagonals { } bind def % hooks for setting color /nodecolor { sethsbcolor } bind def /edgecolor { sethsbcolor } bind def /graphcolor { sethsbcolor } bind def /nopcolor {pop pop pop} bind def /beginpage { % i j npages /npages exch def /j exch def /i exch def /str 10 string def npages 1 gt { gsave coordfont setfont 0 0 moveto (() show i str cvs show (,) show j str cvs show ()) show grestore } if } bind def /set_font { findfont exch scalefont setfont } def /arrowhead { /arrowwidth exch def /arrowlength exch def gsave 3 1 roll translate rotate newpath arrowlength arrowwidth 2 div moveto 0 0 lineto arrowlength arrowwidth -2 div lineto closepath fill stroke grestore } def % draw aligned label in bounding box aligned to current point % alignfactor tells what fraction to place on the left. % -.5 is centered. /alignedtext { % text labelwidth fontsz alignfactor /alignfactor exch def /fontsz exch def /width exch def /text exch def gsave % even if node or edge is dashed, don't paint text with dashes [] 0 setdash currentpoint newpath moveto text stringwidth pop alignfactor mul fontsz -.3 mul rmoveto text show grestore } def /boxprim { % xcorner ycorner xsize ysize 4 2 roll moveto 2 copy exch 0 rlineto 0 exch rlineto pop neg 0 rlineto closepath } bind def /ellipse_path { /ry exch def /rx exch def /y exch def /x exch def matrix currentmatrix newpath x y translate rx ry scale 0 0 1 0 360 arc setmatrix } bind def /endpage { showpage } bind def /layercolorseq [ % layer color sequence - darkest to lightest [0 0 0] [.2 .8 .8] [.4 .8 .8] [.6 .8 .8] [.8 .8 .8] ] def /setlayer {/maxlayer exch def /curlayer exch def layercolorseq curlayer get aload pop sethsbcolor /nodecolor {nopcolor} def /edgecolor {nopcolor} def /graphcolor {nopcolor} def } bind def /onlayer { curlayer ne {invis} if } def /onlayers { /myupper exch def /mylower exch def curlayer mylower lt curlayer myupper gt or {invis} if } def /curlayer 0 def 14 default-font-family set_font % /arrowlength 10 def % /arrowwidth 5 def gsave 35 35 128 182 boxprim clip newpath 36 36 translate 0 0 1 beginpage 0 0 translate 0 rotate 0.000 0.000 0.000 graphcolor 14.00 /Times-Roman set_font % 0 gsave 10 dict begin newpath 126 36 moveto 72 36 lineto 72 0 lineto 126 0 lineto closepath stroke gsave 10 dict begin 99 19 moveto (0) 7 14.00 -0.50 alignedtext end grestore end grestore % 1 gsave 10 dict begin newpath 54 36 moveto 0 36 lineto 0 0 lineto 54 0 lineto closepath stroke gsave 10 dict begin 27 19 moveto (1) 7 14.00 -0.50 alignedtext end grestore end grestore % 18 gsave 10 dict begin 41 162 27 18 ellipse_path stroke gsave 10 dict begin 41 163 moveto (x1) 14 14.00 -0.50 alignedtext end grestore end grestore % 18 -> 1 gsave 10 dict begin dotted newpath 39 144 moveto 36 118 32 71 29 42 curveto stroke 29 36 90.00 10.00 5.00 arrowhead end grestore % 5 gsave 10 dict begin 82 90 27 18 ellipse_path stroke gsave 10 dict begin 82 91 moveto (x3) 14 14.00 -0.50 alignedtext end grestore end grestore % 18 -> 5 newpath 51 145 moveto 56 136 62 125 68 115 curveto stroke 72 107 116.57 10.00 5.00 arrowhead % 5 -> 0 gsave 10 dict begin dotted newpath 86 72 moveto 88 64 91 54 93 44 curveto stroke 95 36 104.04 10.00 5.00 arrowhead end grestore % 5 -> 1 newpath 70 74 moveto 63 64 54 53 46 43 curveto stroke 41 36 54.46 10.00 5.00 arrowhead endpage grestore end restore %%EndDocument @endspecial -9 4320 a(The)k(algorithm)c(again)i(uses)j FE(mk)f FK(to)f(ensure)i(that)f(the)g(resulting)e(OBDD)g(is)h(reduced.) 57 b(Figure)36 b(13)-9 4440 y(sho)m(ws)27 b(the)f(algorithm)c(in)j(the) i(case)f(where)h(only)e(singleton)g(truth)h(assignmen)m(ts)g(\([)p FC(b=x)3210 4455 y FA(j)3247 4440 y FK(],)h FC(b)h FI(2)g(f)p FK(0)p FC(;)17 b FK(1)p FI(g)p FK(\))-9 4560 y(are)47 b(allo)m(w)m(ed.)86 b(In)m(tuitiv)m(ely)-8 b(,)51 b(in)46 b(computing)g FE(restrict)o FK(\()p FC(u;)17 b(j;)g(b)p FK(\))47 b(w)m(e)h(searc)m(h)h(for)d(all)g(no)s(des)h(with)-9 4681 y FD(var)52 b FK(=)41 b FC(j)47 b FK(and)41 b(replace)f(them)h(b)m (y)h(their)e(lo)m(w-)g(or)g(high-son)g(dep)s(ending)h(on)g FC(b)p FK(.)68 b(Since)41 b(this)f(migh)m(t)-9 4801 y(force)33 b(no)s(des)g(ab)s(o)m(v)m(e)h(the)g(p)s(oin)m(t)e(of)g(replacemen)h(to) g(b)s(ecome)g(equal,)g(it)f(is)g(follo)m(w)m(ed)g(b)m(y)i(a)f (reduction)-9 4922 y(\(through)g(the)i(calls)d(to)i FE(mk)p FK(\).)48 b(Due)34 b(to)g(the)g(t)m(w)m(o)h(recursiv)m(e)g(calls)e(in)g (line)g(3,)h(the)g(algorithm)d(has)j(an)-9 5042 y(exp)s(onen)m(tial)d (running)g(time,)g(see)i(exercise)h(4.7)d(for)g(an)h(impro)m(v)m(emen)m (t)g(that)g(reduces)h(this)f(to)g(linear)-9 5162 y(time.)p eop %%Page: 21 22 21 21 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(21)-9 3460 y @beginspecial 0 @llx 0 @lly 471 @urx 342 @ury 4710 @rwi @setspecial %%BeginDocument: apply-ex.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -11.0 348.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 8527 m 0 0 l 11790 0 l 11790 8527 l cp clip 0.04094 0.04094 sc 7.500 slw % Ellipse n 5325 3630 180 180 0 360 DrawEllipse gs col-1 s gr % Polyline n 4564 4434 m 4564 4182 l 4275 4182 l 4275 4434 l cp gs col-1 s gr % Polyline n 1324 4479 m 1324 4227 l 1035 4227 l 1035 4479 l cp gs col-1 s gr % Polyline n 2089 4479 m 2089 4227 l 1800 4227 l 1800 4479 l cp gs col-1 s gr % Polyline n 5509 4434 m 5509 4182 l 5220 4182 l 5220 4434 l cp gs col-1 s gr % Polyline n 9874 4344 m 9874 4092 l 9585 4092 l 9585 4344 l cp gs col-1 s gr % Polyline n 10594 4344 m 10594 4092 l 10305 4092 l 10305 4344 l cp gs col-1 s gr % Ellipse n 900 7800 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 2400 7800 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 1650 7200 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 2850 6600 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4050 7200 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4800 7800 300 150 0 360 DrawEllipse gs col-1 s gr [60] 0 sd % Ellipse n 5400 7200 300 150 0 360 DrawEllipse gs col-1 s gr [] 0 sd % Ellipse n 5850 6600 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4350 6000 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 9525 6600 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 8475 6000 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7350 6600 300 150 0 360 DrawEllipse gs col-1 s gr [60] 0 sd % Ellipse n 7800 7200 300 150 0 360 DrawEllipse gs col-1 s gr [] 0 sd % Ellipse n 6525 5400 300 150 0 360 DrawEllipse gs col-1 s gr [60] 0 sd % Ellipse n 10650 7800 300 150 0 360 DrawEllipse gs col-1 s gr [] 0 sd % Ellipse n 10215 7200 300 150 0 360 DrawEllipse gs col-1 s gr % Ellipse n 8670 7200 300 150 0 360 DrawEllipse gs col-1 s gr [60] 0 sd % Ellipse n 8265 7800 300 150 0 360 DrawEllipse gs col-1 s gr [] 0 sd [60] 0 sd % Ellipse n 9795 7815 300 150 0 360 DrawEllipse gs col-1 s gr [] 0 sd % Ellipse n 1140 2940 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 2070 2940 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 1605 3660 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 1155 1500 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 2085 1500 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 1635 780 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 1605 2190 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4935 825 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 4455 2220 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 5385 2220 180 180 0 360 DrawEllipse gs col-1 s gr % Ellipse n 10110 765 165 165 0 360 DrawEllipse gs col-1 s gr % Ellipse n 9600 1440 165 165 0 360 DrawEllipse gs col-1 s gr % Ellipse n 10605 1440 165 165 0 360 DrawEllipse gs col-1 s gr % Ellipse n 9600 2100 165 165 0 360 DrawEllipse gs col-1 s gr % Ellipse n 10605 2100 165 165 0 360 DrawEllipse gs col-1 s gr % Ellipse n 9600 2760 165 165 0 360 DrawEllipse gs col-1 s gr % Ellipse n 10605 2760 165 165 0 360 DrawEllipse gs col-1 s gr % Ellipse n 10110 3435 165 165 0 360 DrawEllipse gs col-1 s gr % Polyline n 975 7950 m 1275 8250 l gs col-1 s gr % Polyline n 1725 7350 m 2400 7650 l gs col-1 s gr % Polyline n 2475 7950 m 2775 8250 l gs col-1 s gr % Polyline n 2925 6750 m 4050 7050 l gs col-1 s gr % Polyline n 4125 7350 m 4800 7650 l gs col-1 s gr % Polyline n 4875 7950 m 5175 8250 l gs col-1 s gr % Polyline n 4425 6150 m 5850 6450 l gs col-1 s gr % Polyline [60] 0 sd n 825 7950 m 525 8250 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 1575 7350 m 900 7650 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 2250 7950 m 2025 8250 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 2700 6750 m 1650 7050 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3900 7350 m 3525 7725 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 4725 7950 m 4425 8250 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 4275 6150 m 2850 6450 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 5775 6750 m 5400 7050 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 6375 5550 m 4350 5850 l gs col-1 s gr [] 0 sd % Polyline n 6600 5550 m 8475 5850 l gs col-1 s gr % Polyline [60] 0 sd n 6450 7125 m 6450 7350 l 6000 7350 l 6000 7125 l cp gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 5400 8250 m 5400 8475 l 4950 8475 l 4950 8250 l cp gs col-1 s gr [] 0 sd % Polyline n 4650 8250 m 4650 8475 l 4200 8475 l 4200 8250 l cp gs col-1 s gr % Polyline [60] 0 sd n 3750 7725 m 3750 7950 l 3300 7950 l 3300 7725 l cp gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 3000 8250 m 3000 8475 l 2550 8475 l 2550 8250 l cp gs col-1 s gr [] 0 sd % Polyline n 2250 8250 m 2250 8475 l 1800 8475 l 1800 8250 l cp gs col-1 s gr % Polyline n 1500 8250 m 1500 8475 l 1050 8475 l 1050 8250 l cp gs col-1 s gr % Polyline n 750 8250 m 750 8475 l 300 8475 l 300 8250 l cp gs col-1 s gr % Polyline n 5925 6750 m 6225 7125 l gs col-1 s gr % Polyline n 8550 6150 m 9525 6450 l gs col-1 s gr % Polyline [60] 0 sd n 8400 6150 m 7350 6450 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 7200 7125 m 7200 7350 l 6750 7350 l 6750 7125 l cp gs col-1 s gr [] 0 sd % Polyline n 7425 6750 m 7800 7050 l gs col-1 s gr % Polyline [60] 0 sd n 7275 6750 m 6975 7125 l gs col-1 s gr [] 0 sd % Polyline n 9600 6750 m 10200 7050 l gs col-1 s gr % Polyline n 10275 7350 m 10650 7650 l gs col-1 s gr % Polyline [60] 0 sd n 9450 6750 m 8700 7050 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 10125 7350 m 9780 7665 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 8625 7350 m 8250 7650 l gs col-1 s gr [] 0 sd % Polyline n 8775 7350 m 9105 7725 l gs col-1 s gr % Polyline [60] 0 sd n 9315 7725 m 9315 7950 l 8865 7950 l 8865 7725 l cp gs col-1 s gr [] 0 sd % Polyline n 1755 2310 m 2070 2760 l gs col-1 s gr % Polyline [60] 0 sd n 1485 2310 m 1140 2760 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 1260 3090 m 1515 3480 l gs col-1 s gr [] 0 sd % Polyline n 2055 3120 m 1695 3495 l gs col-1 s gr % Polyline n 1770 870 m 2085 1320 l gs col-1 s gr % Polyline [60] 0 sd n 1500 870 m 1155 1320 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 1275 1650 m 1530 2040 l gs col-1 s gr [] 0 sd % Polyline n 2070 1680 m 1710 2055 l gs col-1 s gr % Polyline [60] 0 sd n 1695 3810 m 1950 4200 l gs col-1 s gr [] 0 sd % Polyline n 1500 3825 m 1215 4185 l gs col-1 s gr % Polyline n 1140 3120 m 1215 4200 l gs col-1 s gr % Polyline n 4380 2400 m 4440 4170 l gs col-1 s gr % Polyline n 5220 3780 m 4440 4170 l gs col-1 s gr % Polyline [60] 0 sd n 5385 3810 m 5385 4170 l gs col-1 s gr [] 0 sd % Polyline n 5070 915 m 5385 2040 l gs col-1 s gr % Polyline [60] 0 sd n 4800 915 m 4455 2040 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 4530 2400 m 5310 3450 l gs col-1 s gr [] 0 sd % Polyline n 5400 2400 m 5310 3450 l gs col-1 s gr % Polyline [60] 0 sd n 5325 2400 m 4440 4170 l gs col-1 s gr [] 0 sd % Polyline n 10185 930 m 10605 1260 l gs col-1 s gr % Polyline n 10605 1605 m 10605 1935 l gs col-1 s gr % Polyline n 10605 2265 m 10605 2595 l gs col-1 s gr % Polyline n 10515 2940 m 10110 3270 l gs col-1 s gr % Polyline n 10185 3600 m 10440 4095 l gs col-1 s gr % Polyline [60] 0 sd n 10020 930 m 9600 1260 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 9600 1605 m 9600 1935 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 9600 2265 m 9600 2595 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 9690 2940 m 10020 3270 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 10020 3600 m 9765 4095 l gs col-1 s gr [] 0 sd % Interp Spline gs n 1050 1650 m 806.8 2403.2 731.8 2740.7 750 3000 curveto 766.9 3240.3 879.4 3540.3 1200 4200 curveto gs col-1 s gr gr % Interp Spline gs [60] 0 sd n 2160 1665 m 2196.2 1945.9 2200.0 2069.7 2175 2160 curveto 2068.4 2545.6 1454.0 3139.2 1320 3495 curveto 1275.7 3612.5 1249.5 3785.0 1215 4185 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs [60] 0 sd n 2145 3120 m 2110.3 3512.7 2069.1 3681.5 1980 3795 curveto 1871.6 3933.1 1684.1 4030.6 1230 4185 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs [60] 0 sd n 10770 1515 m 11081.9 1705.5 11206.4 1809.7 11265 1935 curveto 11421.6 2271.1 11401.1 2934.5 11265 3270 curveto 11173.2 3486.9 10965.8 3695.2 10440 4095 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs [60] 0 sd n 10770 2190 m 11032.0 2385.7 11135.7 2489.9 11175 2595 curveto 11241.0 2745.3 11231.8 3040.6 11175 3180 curveto 11103.9 3400.7 10917.2 3629.9 10440 4095 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs [60] 0 sd n 10770 2760 m 10990.1 2910.0 11073.0 2993.3 11100 3105 curveto 11116.8 3179.5 11044.3 3295.2 11010 3345 curveto 10936.3 3498.1 10791.1 3685.6 10440 4095 curveto gs col-1 s gr gr [] 0 sd % Interp Spline gs n 9435 1515 m 9120.8 1700.7 8996.3 1804.9 8940 1935 curveto 8779.9 2306.8 8795.8 2993.7 9030 3345 curveto 9217.1 3651.8 9569.7 3839.3 10440 4095 curveto gs col-1 s gr gr % Interp Spline gs n 9435 2190 m 9168.1 2377.2 9064.4 2481.4 9030 2595 curveto 8962.3 2780.3 9005.7 3107.5 9105 3270 curveto 9284.5 3546.1 9616.4 3754.4 10440 4095 curveto gs col-1 s gr gr % Interp Spline gs n 9435 2850 m 9306.5 3013.7 9265.1 3097.1 9270 3180 curveto 9284.4 3312.0 9451.8 3448.7 9525 3510 curveto 9649.8 3641.2 9857.2 3787.0 10350 4095 curveto gs col-1 s gr gr $F2psEnd rs %%EndDocument @endspecial 1007 871 a FA(x)1047 880 y Fx(1)1007 1102 y FA(x)1047 1111 y Fx(2)1007 1358 y FA(x)1047 1367 y Fx(3)1007 1613 y FA(x)1047 1622 y Fx(4)1007 1844 y FA(x)1047 1853 y Fx(5)1691 1839 y Fo(2)1386 2056 y(0)281 2071 y(0)225 b(1)1709 2056 y(1)3198 2025 y(1)210 b(0)3785 2432 y FA(x)3825 2441 y Fx(1)3785 2637 y FA(x)3825 2646 y Fx(2)3785 2842 y FA(x)3825 2851 y Fx(3)3785 3046 y FA(x)3825 3055 y Fx(4)3785 3251 y FA(x)3825 3260 y Fx(5)26 3430 y Fi(1,1)165 b(0,0)f(0,1)h(0,0)1049 3251 y(0,0)1356 3430 y(1,0)g(0,0)1970 3046 y(0,0)152 3251 y Fo(2,2)418 b(0,2)408 3046 y(3,2)817 2842 y(5,3)1227 3046 y(4,0)1482 3251 y(2,0)1329 2637 y(6,3)1841 2842 y(0,3)1687 3046 y(0,2)3094 2842 y(5,4)2736 2637 y(7,4)2352 2842 y(0,4)2506 3046 y(0,2)-374 b Fi(0,1)2071 2432 y Fo(8,5)3325 3046 y(4,2)3478 3251 y(2,2)2808 3046 y(3,0)2665 3251 y(2,0)194 b Fi(0,1)148 b Fo(0,2)422 1844 y(2)263 1598 y(3)585 1603 y(4)427 1342 y(5)268 1107 y(6)591 1102 y(7)432 861 y(8)1716 1347 y(4)1558 877 y(5)1394 1352 y(3)3322 1762 y Fg(2)3148 1537 y(3)304 b(4)3148 1312 y(5)g(6)3148 1081 y(7)g(8)3322 856 y(9)996 718 y Ff(^)1205 b Fe(=)-9 3784 y FK(Figure)34 b(12:)48 b(An)36 b(example)e(of)h(applying)f(the)i(algorithm)c FE(appl)-7 b(y)35 b FK(for)g(computing)f(the)h(conjunction)-9 3904 y(of)g(the)h(t)m(w)m(o)g(R)m(OBDDs)g(sho)m(wn)h(at)e(the)h(top)g(left.) 52 b(The)36 b(result)g(is)f(sho)m(wn)i(to)f(the)g(righ)m(t.)52 b(Belo)m(w)36 b(the)-9 4024 y(tree)e(of)g(argumen)m(ts)g(to)g(the)h (recursiv)m(e)g(calls)e(of)41 b FE(app)p FK(.)48 b(Dashed)34 b(no)s(des)h(indicate)e(that)h(the)h(v)-5 b(alue)33 b(of)-9 4145 y(the)c(no)s(de)h(has)g(previously)f(b)s(een)h(computed)g(and)f (is)g(not)g(recomputed)h(due)g(to)f(the)h(use)g(of)f(dynamic)-9 4265 y(programming.)39 b(The)31 b(solid)d(ellipses)h(sho)m(w)h(calls)f (that)g(\014nishes)i(b)m(y)f(a)g(call)e(to)h FE(mk)h FK(with)g(the)g(v)-5 b(ariable)-9 4385 y(index)32 b(indicated)g(b)m(y)i (the)f(v)-5 b(ariables)31 b(to)h(the)h(righ)m(t)f(of)g(the)h(tree.)p eop %%Page: 22 23 22 22 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(22)234 -67 y FE(Restrict)p FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(u;)17 b(j;)g(b)p FK(\))31 b(=)234 53 y(1:)71 b FF(function)32 b FD(r)-5 b(es)p FK(\()p FC(u)p FK(\))32 b(=)234 173 y(2:)217 b FF(if)42 b FD(var)11 b FK(\()p FC(u)p FK(\))27 b FC(>)g(j)39 b FF(then)32 b(return)h FC(u)234 294 y FK(3:)217 b FF(else)32 b(if)42 b FD(var)11 b FK(\()p FC(u)p FK(\))27 b FC(<)g(j)39 b FF(then)33 b(return)f FE(mk)q FK(\()p FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b FD(r)-5 b(es)o FK(\()p FD(low)10 b FK(\()p FC(u)p FK(\)\))p FC(;)17 b FD(r)-5 b(es)o FK(\()p FD(high)7 b FK(\()p FC(u)p FK(\)\)\))234 414 y(4:)217 b FF(else)32 b FK(\(*)g FD(var)11 b FK(\()p FC(u)p FK(\))27 b(=)g FC(j)39 b FK(*\))32 b FF(if)42 b FC(b)28 b FK(=)g(0)k FF(then)h(return)f FD(r)-5 b(es)p FK(\()p FD(low)10 b FK(\()p FC(u)p FK(\)\))234 535 y(5:)217 b FF(else)32 b FK(\(*)g FD(var)11 b FK(\()p FC(u)p FK(\))27 b(=)g FC(j;)17 b(b)29 b FK(=)e(1)33 b(*\))f FF(return)g FD(r)-5 b(es)p FK(\()p FD(high)7 b FK(\()p FC(u)p FK(\)\))234 655 y(6:)71 b FF(end)33 b FD(r)-5 b(es)234 775 y FK(7:)71 b FF(return)32 b FD(r)-5 b(es)p FK(\()p FC(u)p FK(\))234 979 y(Figure)25 b(13:)39 b(The)27 b(algorithm)22 b FE(restrict)o FK([)p FC(T)8 b(;)17 b(H)8 b FK(]\()p FC(u;)17 b(j;)g(b)p FK(\))25 b(whic)m(h)h(computes)g(an)f(R)m(OBDD)234 1099 y(for)32 b FC(t)418 1063 y FA(u)464 1099 y FK([)p FC(j)6 b(=b)p FK(].)-9 1473 y Fn(4.5)135 b(SatCoun)l(t,)46 b(An)l(ySat,)f (AllSat)-9 1658 y FK(In)33 b(this)h(section)f(w)m(e)i(consider)f(op)s (erations)f(to)g(examine)g(the)h(set)g(of)f(satisfying)g(truth)h (assignmen)m(ts)-9 1778 y(of)f(a)i(no)s(de)f FC(u)p FK(.)48 b(A)35 b(truth)f(assignmen)m(t)h FC(\032)f FK(satis\014es)h(a)f(no)s (de)h FC(u)f FK(if)f FC(t)2406 1742 y FA(u)2451 1778 y FK([)p FC(\032)p FK(])i(can)g(b)s(e)f(ev)-5 b(aluated)34 b(to)g(1)g(using)-9 1898 y(the)j(truth)f(tables)h(of)f(the)h(Bo)s (olean)e(op)s(erators.)56 b(F)-8 b(ormally)g(,)34 b(the)j(satisfying)f (truth)h(assignmen)m(ts)g(is)-9 2019 y(the)c(set)g FD(sat)p FK(\()p FC(u)p FK(\):)1039 2139 y FD(sat)p FK(\()p FC(u)p FK(\))27 b(=)g FI(f)p FC(\032)h FI(2)g Fz(B)1712 2097 y Fy(f)p FA(x)1787 2106 y Fx(1)1821 2097 y FA(;:::)o(;x)1960 2105 y Fw(n)2001 2097 y Fy(g)2068 2139 y FI(j)g FC(t)2159 2098 y FA(u)2204 2139 y FK([)p FC(\032)p FK(])33 b(is)f(true)h FI(g)p FC(;)-9 2313 y FK(where)39 b Fz(B)345 2271 y Fy(f)p FA(x)420 2280 y Fx(1)454 2271 y FA(;:::)o(;x)593 2279 y Fw(n)635 2271 y Fy(g)713 2313 y FK(denotes)h(the)f(set)g(of)f(all)f (truth)h(assignmen)m(ts)h(for)f(v)-5 b(ariables)38 b FI(f)p FC(x)3141 2328 y FB(1)3180 2313 y FC(;)17 b(:)g(:)g(:)f(;)h(x) 3454 2328 y FA(n)3501 2313 y FI(g)p FK(,)40 b(i.e.,)-9 2434 y(functions)h(from)g FI(f)p FC(x)765 2449 y FB(1)805 2434 y FC(;)17 b(:)g(:)g(:)e(;)i(x)1078 2449 y FA(n)1126 2434 y FI(g)41 b FK(to)h(the)g(truth)g(v)-5 b(alues)42 b Fz(B)65 b FK(=)43 b FI(f)p FK(0)p FC(;)17 b FK(1)p FI(g)p FK(.)70 b(The)43 b(\014rst)f(algorithm,)f FE(Sa)-7 b(t-)-9 2554 y(Count)p FK(,)44 b(computes)d(the)h(size)f(of)g FD(sat)p FK(\()p FC(u)p FK(\),)i(see)f(\014gure)g(14.)69 b(The)42 b(algorithm)c(exploits)j(the)g(follo)m(w-)-9 2675 y(ing)f(fact.)69 b(If)41 b FC(u)f FK(is)h(a)g(no)s(de)g(with)g(v) -5 b(ariable)39 b(index)i FD(var)11 b FK(\()p FC(u)p FK(\))40 b(then)i(t)m(w)m(o)g(sets)g(of)f(truth)g(assignmen)m(ts)-9 2795 y(can)50 b(mak)m(e)h FC(f)519 2759 y FA(u)614 2795 y FK(true.)97 b(The)52 b(\014rst)e(set)i(has)e FD(var)11 b FC(u)50 b FK(equal)g(to)g(0,)55 b(the)50 b(other)h(has)g FD(var)10 b FC(u)50 b FK(equal)g(to)-9 2915 y(1.)75 b(F)-8 b(or)42 b(the)i(\014rst)g(set,)j(the)c(n)m(um)m(b)s(er)h(is)f(found)g (b)m(y)h(\014nding)f(the)h(n)m(um)m(b)s(er)g(of)e(truth)i(assignmen)m (ts)-9 3036 y FD(c)-5 b(ount)p FK(\()p FD(low)10 b FK(\()p FC(u)p FK(\)\))48 b(making)g FD(low)10 b FK(\()p FC(u)p FK(\))49 b(true.)94 b(All)47 b(v)-5 b(ariables)48 b(b)s(et)m(w)m(een)j FD(var)11 b FK(\()p FC(u)p FK(\))48 b(and)i FD(var)10 b FK(\()p FD(low)g FK(\()p FC(u)p FK(\)\))49 b(in)-9 3156 y(the)e(ordering)f(can)h(b)s(e)f(c)m(hosen)j(arbitrarily)-8 b(,)47 b(therefore)h(in)d(the)j(case)f(of)f FD(var)11 b FC(u)46 b FK(b)s(eing)g(0,)k(a)d(total)-9 3276 y(of)33 b(2)152 3240 y Fo(var)8 b FB(\()p Fo(low)g FB(\()p FA(u)p FB(\)\))p Fy(\000)p Fo(var)h FB(\()p FA(u)p FB(\))p Fy(\000)p FB(1)893 3276 y FI(\003)23 b FD(c)-5 b(ount)p FK(\()p FD(low)11 b FK(\()p FC(u)p FK(\)\))33 b(satisfying)h(truth)g(assignmen) m(ts)h(exists.)49 b(T)-8 b(o)35 b(b)s(e)f(e\016cien)m(t,)-9 3397 y(dynamic)d(programming)f(should)i(b)s(e)h(applied)f(in)f FE(Sa)-7 b(tCount)34 b FK(\(see)g(exercise)g(4.10\).)137 3517 y(The)39 b(next)f(algorithm)d FE(AnySa)-7 b(t)38 b FK(in)f(\014gure)h(15)f(\014nds)i(a)e(satisfying)g(truth)h(assignmen) m(t.)58 b(Some)-9 3638 y(irrelev)-5 b(an)m(t)35 b(v)-5 b(ariables)35 b(presen)m(t)j(in)d(the)i(ordering)f(migh)m(t)e(not)j (app)s(ear)f(in)f(the)i(result)f(and)h(they)g(can)-9 3758 y(b)s(e)31 b(assigned)h(an)m(y)g(v)-5 b(alue)31 b(whatso)s(ev)m(er.)45 b FE(AnySa)-7 b(t)32 b FK(simply)e(\014nds)j(a)e (path)h(leading)e(to)h(1)g(b)m(y)h(a)g(depth-)-9 3878 y(\014rst)c(tra)m(v)m(ersal,)h(prefering)f(somewhat)g(arbitrarily)d(lo) m(w-edges)k(o)m(v)m(er)g(high-edges.)42 b(It)28 b(is)f(particularly)-9 3999 y(simple)h(due)i(to)g(the)g(observ)-5 b(ation)29 b(that)g FD(if)k(a)f(no)-5 b(de)31 b(is)h(not)g(the)h(terminal)e(0,)i (it)f(has)g(at)g(le)-5 b(ast)33 b(one)e(p)-5 b(ath)-9 4119 y(le)g(ading)33 b(to)i(1.)43 b FK(The)34 b(running)e(time)f(is)h (clearly)g(linear)f(in)h(the)h(result.)137 4239 y FE(AllSa)-7 b(t)33 b FK(in)f(\014gure)h(16)e(\014nds)j(all)c(satisfying)i (truth-assignmen)m(ts)g(lea)m(ving)g(out)g(irrelev)-5 b(an)m(t)32 b(v)-5 b(ari-)-9 4360 y(ables)29 b(from)f(the)j(ordering.) 41 b FE(AllSa)-7 b(t)p FK(\()p FC(u)p FK(\))30 b(\014nds)h(all)c(paths) j(from)f(a)g(no)s(de)h FC(u)f FK(to)g(the)i(terminal)c(1.)42 b(The)-9 4480 y(running)33 b(time)f(is)h(linear)f(in)h(the)g(size)h(of) f(the)h(result)g(m)m(ultiplied)c(with)j(the)h(time)e(to)h(add)h(the)g (single)-9 4601 y(assignmen)m(ts)29 b([)p FC(x)610 4616 y Fo(var)8 b FB(\()p FA(u)p FB(\))844 4601 y FI(7!)28 b FK(0])g(and)h([)p FC(x)1344 4616 y Fo(var)8 b FB(\()p FA(u)p FB(\))1579 4601 y FI(7!)27 b FK(1])i(in)f(fron)m(t)h(of)f(a)h (list)e(of)h(up)i(to)e FC(n)h FK(elemen)m(ts.)43 b(Ho)m(w)m(ev)m(er,)-9 4721 y(the)33 b(result)f(can)h(b)s(e)g(exp)s(onen)m(tially)e(large)h (in)g FI(j)p FC(u)p FI(j)p FK(,)f(so)i(the)g(running)f(time)f(is)h(the) h(p)s(o)s(or)f FC(O)s FK(\(2)3398 4685 y Fy(j)p FA(u)p Fy(j)3481 4721 y FC(n)p FK(\).)p eop %%Page: 23 24 23 23 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(23)234 -80 y FE(Sa)-7 b(tCount)p FK([)p FC(T)14 b FK(]\()p FC(u)p FK(\))234 41 y(1:)144 b FF(function)32 b FD(c)-5 b(ount)p FK(\()p FC(u)p FK(\))234 161 y(2:)363 b FF(if)32 b FC(u)27 b FK(=)h(0)k FF(then)h FD(r)-5 b(es)27 b FI( )h FK(0)234 282 y(3:)363 b FF(else)37 b(if)32 b FC(u)27 b FK(=)h(1)k FF(then)h FD(r)-5 b(es)27 b FI( )h FK(1)234 404 y(4:)363 b FF(else)32 b FD(r)-5 b(es)28 b FI( )69 b FK(2)1250 367 y Fo(var)7 b FB(\()p Fo(low)h FB(\()p FA(u)p FB(\)\))p Fy(\000)p Fo(var)h FB(\()p FA(u)p FB(\))p Fy(\000)p FB(1)1989 404 y FI(\003)22 b FD(c)-5 b(ount)p FK(\()p FD(low)10 b FK(\()p FC(u)p FK(\)\))1201 526 y(+)32 b(2)1358 490 y Fo(var)7 b FB(\()p Fo(high)g FB(\()p FA(u)p FB(\)\))p Fy(\000)p Fo(var)h FB(\()p FA(u)p FB(\))p Fy(\000)p FB(1)2121 526 y FI(\003)22 b FD(c)-5 b(ount)p FK(\()p FD(high)7 b FK(\()p FC(u)p FK(\)\))234 646 y(5:)363 b FF(return)33 b FD(r)-5 b(es)234 766 y FK(6:)144 b FF(end)33 b FD(c)-5 b(ount)234 887 y FK(7:)234 1009 y(8:)144 b FF(return)32 b FK(2)846 973 y Fo(var)7 b FB(\()p FA(u)p FB(\))p Fy(\000)p FB(1)1165 1009 y FI(\003)22 b FD(c)-5 b(ount)p FK(\()p FC(u)p FK(\))234 1212 y(Figure)41 b(14:)61 b(An)42 b(algorithm)c(for)j (determining)f(the)i(n)m(um)m(b)s(er)g(of)f(v)-5 b(alid)40 b(truth)i(assign-)234 1333 y(men)m(ts.)i(Recall,)29 b(that)i(the)f(\\v) -5 b(ariable)29 b(index")i FD(var)41 b FK(of)30 b(0)g(and)g(1)h(in)e (the)i(R)m(OBDD)f(repre-)234 1453 y(sen)m(tation)e(is)f FC(n)11 b FK(+)g(1)27 b(when)i(the)f(ordering)e(con)m(tains)h FC(n)h FK(v)-5 b(ariables)26 b(\(n)m(um)m(b)s(ered)i(1)f(through)234 1573 y FC(n)p FK(\).)44 b(This)33 b(means)f(that)h FD(var)11 b FK(\(0\))31 b(and)i FD(var)11 b FK(\(1\))32 b(alw)m(a)m(ys)h(giv)m (es)g FC(n)22 b FK(+)g(1.)234 2087 y FE(AnySa)-7 b(t)p FK(\()p FC(u)p FK(\))234 2208 y(1:)363 b FF(if)32 b FC(u)27 b FK(=)h(0)k FF(then)h FK(Error)234 2328 y(2:)363 b FF(else)37 b(if)32 b FC(u)27 b FK(=)h(1)k FF(then)h(return)f FK([])234 2448 y(3:)363 b FF(else)37 b(if)32 b FD(low)10 b FK(\()p FC(u)p FK(\))27 b(=)h(0)k FF(then)h(return)f FK([)p FC(x)2157 2464 y Fo(var)8 b FB(\()p FA(u)p FB(\))2392 2448 y FI(7!)27 b FK(1)p FC(;)17 b FE(AnySa)-7 b(t)p FK(\()p FD(high)7 b FK(\()p FC(u)p FK(\)\)])234 2569 y(4:)363 b FF(else)32 b(return)h FK([)p FC(x)1309 2584 y Fo(var)8 b FB(\()p FA(u)p FB(\))1543 2569 y FI(7!)28 b FK(0)p FC(;)17 b FE(AnySa)-7 b(t)p FK(\()p FD(low)10 b FK(\()p FC(u)p FK(\)\)])234 2772 y(Figure)45 b(15:)69 b(An)46 b(algorithm)c(for)j (returning)g(a)h(satisfying)e(truth-assignmen)m(t.)82 b(The)234 2893 y(v)-5 b(ariables)32 b(are)g(assumed)i(to)e(b)s(e)h FC(x)1500 2908 y FB(1)1539 2893 y FC(;)17 b(:)g(:)g(:)f(;)h(x)1813 2908 y FA(n)1893 2893 y FK(ordered)33 b(in)f(this)g(w)m(a)m(y)-8 b(.)234 3401 y FE(AllSa)h(t)p FK(\()p FC(u)p FK(\))234 3521 y(1:)363 b FF(if)32 b FC(u)27 b FK(=)h(0)k FF(then)h(return)f FI(h)g(i)234 3641 y FK(2:)363 b FF(else)37 b(if)32 b FC(u)27 b FK(=)h(1)k FF(then)h(return)f FI(h)g FK([)h(])g FI(i)234 3762 y FK(3:)363 b FF(else)32 b(return)234 3882 y FK(4:)573 b FI(h)p FK(add)33 b([)p FC(x)1194 3898 y Fo(var)8 b FB(\()p FA(u)p FB(\))1428 3882 y FI(7!)28 b FK(0])k(in)g(fron)m(t)g(of)g(all)234 4003 y(5:)638 b(truth-assignmen)m(ts)33 b(in)f FE(AllSa)-7 b(t)p FK(\()p FD(low)10 b FK(\()p FC(u)p FK(\)\))p FC(;)234 4123 y FK(6:)638 b(add)33 b([)p FC(x)1220 4138 y Fo(var)8 b FB(\()p FA(u)p FB(\))1455 4123 y FI(7!)27 b FK(1])32 b(in)g(fron)m(t)h(of)f(all)234 4243 y(7:)638 b(truth-assignmen)m(ts)33 b(in)f FE(AllSa)-7 b(t)p FK(\()p FD(high)7 b FK(\()p FC(u)p FK(\)\))p FI(i)234 4447 y FK(Figure)34 b(16:)47 b(An)35 b(algorithm)c(whic)m(h)36 b(returns)f(all)e(satisfying)h (truth-assignmen)m(ts.)49 b(The)234 4567 y(v)-5 b(ariables)41 b(are)h(assumed)h(to)f(b)s(e)g FC(x)1547 4582 y FB(1)1587 4567 y FC(;)17 b(:)g(:)g(:)f(x)1817 4582 y FA(n)1907 4567 y FK(ordered)42 b(in)g(this)g(w)m(a)m(y)-8 b(.)73 b(W)-8 b(e)43 b(use)g FI(h\001)17 b(\001)g(\001)n(i)41 b FK(to)234 4688 y(denote)26 b(sequences)i(of)c(truth)h(assignmen)m (ts.)41 b(In)25 b(particular,)g FI(h)f(i)h FK(is)f(the)h(empt)m(y)g (sequence)234 4808 y(of)30 b(truth)h(assignmen)m(ts,)g(and)g FI(h)f FK([)h(])f FI(i)g FK(is)g(the)h(sequence)i(consisting)d(of)g (the)h(single)f(empt)m(y)234 4928 y(truth)j(assignmen)m(t.)p eop %%Page: 24 25 24 24 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(24)234 1116 y FE(Simplify)p FK(\()p FC(d;)17 b(u)p FK(\))234 1236 y(1:)144 b FF(function)32 b FD(sim)o FK(\()p FC(d;)17 b(u)p FK(\))234 1357 y(2:)363 b FF(if)32 b FC(d)27 b FK(=)h(0)k FF(then)h(return)f FK(0)234 1477 y(3:)363 b FF(else)37 b(if)32 b FC(u)27 b FI(\024)h FK(1)33 b FF(then)f(return)h FC(u)234 1598 y FK(4:)363 b FF(else)37 b(if)32 b FC(d)27 b FK(=)h(1)k FF(then)234 1718 y FK(5:)583 b FF(return)32 b FE(mk)q FK(\()p FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b FD(sim)o FK(\()p FC(d;)g FD(low)9 b FK(\()p FC(u)p FK(\)\))p FC(;)17 b FD(sim)o FK(\()p FC(d;)g FD(high)6 b FK(\()p FC(u)p FK(\)\)\))234 1838 y(6:)363 b FF(else)37 b(if)32 b FD(var)11 b FK(\()p FC(d)p FK(\))27 b(=)g FD(var)11 b FK(\()p FC(u)p FK(\))32 b FF(then)234 1959 y FK(7:)583 b FF(if)31 b FD(low)11 b FK(\()p FC(d)p FK(\))27 b(=)g(0)33 b FF(then)g(return)f FD(sim)o FK(\()p FD(high)7 b FK(\()p FC(d)p FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)p FK(\)\))234 2079 y(8:)583 b FF(else)37 b(if)31 b FD(high)7 b FK(\()p FC(d)p FK(\))27 b(=)h(0)k FF(then)h(return)f FD(sim)p FK(\()p FD(low)10 b FK(\()p FC(d)p FK(\))p FC(;)17 b FD(low)9 b FK(\()p FC(u)p FK(\)\))234 2199 y(9:)583 b FF(else)32 b(return)g FE(mk)q FK(\()p FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)234 2320 y FK(10:)1263 b FD(sim)o FK(\()p FD(low)10 b FK(\()p FC(d)p FK(\))p FC(;)17 b FD(low)10 b FK(\()p FC(u)p FK(\)\))p FC(;)234 2440 y FK(11:)1263 b FD(sim)o FK(\()p FD(high)7 b FK(\()p FC(d)p FK(\))p FC(;)17 b FD(high)6 b FK(\()p FC(u)p FK(\)\)\))234 2561 y(12:)314 b FF(else)37 b(if)32 b FD(var)11 b FK(\()p FC(d)p FK(\))27 b FC(<)g FD(var)11 b FK(\()p FC(u)p FK(\))32 b FF(then)234 2681 y FK(13:)534 b FF(return)32 b FE(mk)q FK(\()p FD(var)10 b FK(\()p FC(d)p FK(\))p FC(;)17 b FD(sim)o FK(\()p FD(low)10 b FK(\()p FC(d)p FK(\))p FC(;)17 b(u)p FK(\))p FC(;)g FD(sim)n FK(\()p FD(high)6 b FK(\()p FC(d)p FK(\))p FC(;)17 b(u)p FK(\)\))234 2801 y(14:)314 b FF(else)234 2922 y FK(15:)534 b FF(return)32 b FE(mk)q FK(\()p FD(var)10 b FK(\()p FC(u)p FK(\))p FC(;)17 b FD(sim)o FK(\()p FC(d;)g FD(low)9 b FK(\()p FC(u)p FK(\)\))p FC(;)17 b FD(sim)o FK(\()p FC(d;)g FD(high)6 b FK(\()p FC(u)p FK(\)\)\))234 3042 y(16:)95 b FF(end)33 b FD(sim)234 3163 y FK(17:)234 3283 y(18:)95 b FF(return)32 b FD(sim)p FK(\()p FC(d;)17 b(u)p FK(\))234 3486 y(Figure)34 b(17:)48 b(An)36 b(algorithm)31 b(\(due)36 b(to)f(Coudert)h(et)f(al)f([CBM89])h (\))g(for)g(simplifying)c(an)234 3607 y(R)m(OBDD)i FC(b)h FK(that)f(w)m(e)i(only)e(care)h(ab)s(out)f(on)h(the)g(domain)e FC(d)p FK(.)46 b(Dynamic)32 b(programming)234 3727 y(should)h(b)s(e)g (applied)e(to)h(impro)m(v)m(e)h(e\016ciency)h(\(exercise)f(4.12\))p eop %%Page: 25 26 25 25 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(25)p 413 -267 2935 4 v 411 -147 4 121 v 463 -183 a FE(mk)p FK(\()p FC(i;)17 b(u)771 -168 y FB(0)811 -183 y FC(;)g(u)911 -168 y FB(1)949 -183 y FK(\))p 1260 -147 V 324 w FC(O)s FK(\(1\))p 1830 -147 V 3346 -147 V 411 -27 V 463 -63 a FE(Build)p FK(\()p FC(t)p FK(\))p 1260 -27 V 456 w FC(O)s FK(\(2)1476 -99 y FA(n)1522 -63 y FK(\))p 1830 -27 V 3346 -27 V 411 94 V 463 58 a FE(Appl)-7 b(y)p FK(\()p FC(op;)17 b(u)995 73 y FB(1)1033 58 y FC(;)g(u)1133 73 y FB(2)1172 58 y FK(\))p 1260 94 V 101 w FC(O)s FK(\()p FI(j)p FC(u)1511 73 y FB(1)1549 58 y FI(j)g(j)p FC(u)1678 73 y FB(2)1716 58 y FI(j)p FK(\))p 1830 94 V 3346 94 V 411 214 V 463 178 a FE(Restrict)p FK(\()p FC(u;)g(j;)g(b)p FK(\))p 1260 214 V 98 w FC(O)s FK(\()p FI(j)p FC(u)p FI(j)p FK(\))p 1830 214 V 304 w(See)33 b(note)p 3346 214 V 411 335 V 463 298 a FE(Sa)-7 b(tCount)p FK(\()p FC(u)p FK(\))p 1260 335 V 220 w FC(O)s FK(\()p FI(j)p FC(u)p FI(j)p FK(\))p 1830 335 V 304 w(See)33 b(note)p 3346 335 V 411 455 V 463 419 a FE(AnySa)-7 b(t)p FK(\()p FC(u)p FK(\))p 1260 455 V 339 w FC(O)s FK(\()p FI(j)p FC(p)p FI(j)p FK(\))p 1830 455 V 311 w FC(p)28 b FK(=)f FC(Any)t(S)6 b(at)p FK(\()p FC(u)p FK(\),)32 b FI(j)p FC(p)p FI(j)27 b FK(=)g FC(O)s FK(\()p FI(j)p FC(u)p FI(j)o FK(\))p 3346 455 V 411 577 4 123 v 463 541 a FE(AllSa)-7 b(t)p FK(\()p FC(u)p FK(\))p 1260 577 V 359 w FC(O)s FK(\()p FI(j)p FC(r)s FI(j)20 b(\003)i FC(n)p FK(\))p 1830 577 V 163 w FC(r)30 b FK(=)e FC(Al)r(l)r(S)6 b(at)p FK(\()p FC(u)p FK(\),)33 b FI(j)p FC(r)s FI(j)26 b FK(=)i FC(O)s FK(\(2)2936 505 y Fy(j)p FA(u)p Fy(j)3019 541 y FK(\))p 3346 577 V 411 697 4 121 v 463 661 a FE(Simplify)p FK(\()p FC(d;)17 b(u)p FK(\))p 1260 697 V 205 w FC(O)s FK(\()p FI(j)p FC(d)p FI(jj)p FC(u)p FI(j)p FK(\))p 1830 697 V 197 w(See)33 b(note)p 3346 697 V 413 701 2935 4 v 463 770 a(Note:)51 b(These)38 b(running)e(times)f(only)g(holds)h(if)f (dynamic)h(programming)d(is)463 890 y(used)h(\(exercises)g(4.7,)e (4.10,)g(and)h(4.12\).)-9 1184 y(T)-8 b(able)26 b(1:)40 b(W)-8 b(orst-case)27 b(running)f(times)f(for)h(the)h(R)m(OBDD)e(op)s (erations.)41 b(The)27 b(running)f(times)f(are)i(the)-9 1304 y(exp)s(ected)37 b(running)f(times)f(since)h(they)h(are)f(all)d (based)k(on)f(a)g(hash-table)f(with)g(exp)s(ected)j(constan)m(t)-9 1424 y(time)31 b(searc)m(h)j(and)e(insertion)g(op)s(erations.)-9 1697 y Fn(4.6)135 b(Simplify)-9 1882 y FK(The)45 b(\014nal)f(algorithm) d(called)j FE(Simplify)h FK(is)f(sho)m(wn)i(in)e(\014gure)h(17.)79 b(The)46 b(algorithm)41 b(is)k(used)g(to)-9 2002 y(simplify)29 b(an)i(R)m(OBDD)f(b)m(y)j(trying)e(to)g(remo)m(v)m(e)h(no)s(des.)44 b(The)33 b(simpli\014cation)28 b(is)j(based)h(on)g(a)f(domain)-9 2123 y FC(d)42 b FK(of)g(in)m(terest.)73 b(The)44 b(R)m(OBDD)d FC(u)h FK(is)g(supp)s(osed)i(to)e(b)s(e)h(of)f(in)m(terest)h(only)f(on) g(truth)h(assignmen)m(ts)-9 2243 y(that)d(also)g(satisfy)h FC(d)p FK(.)67 b(\(This)41 b(o)s(ccurs)h(when)g(using)e(R)m(OBDDs)g (for)h FD(formal)g(veri\014c)-5 b(ation)p FK(.)67 b(Section)-9 2364 y(7)36 b(sho)m(ws)i(ho)m(w)f(to)f(do)g(formal)e(v)m(eri\014cation) i(with)g(R)m(OBDDs,)g(but)h(con)m(tains)f(no)h(example)e(of)h(using)-9 2484 y FE(Simplify)p FK(.\))137 2604 y(T)-8 b(o)39 b(b)s(e)g(precise,)i (giv)m(en)f FC(d)e FK(and)h FC(u)p FK(,)h FE(Simplify)i FK(\014nds)e(another)f(R)m(OBDD)f FC(u)2971 2568 y Fy(0)2994 2604 y FK(,)i(t)m(ypically)e(smaller)-9 2725 y(than)h FC(u)p FK(,)i(suc)m(h)f(that)g FC(t)829 2689 y FA(d)896 2725 y FI(^)27 b FC(t)1024 2689 y FA(u)1109 2725 y FK(=)39 b FC(t)1259 2689 y FA(d)1326 2725 y FI(^)28 b FC(t)1455 2689 y FA(u)1496 2665 y Fd(0)1522 2725 y FK(.)64 b(It)40 b(do)s(es)f(so)h(b)m(y)g(trying)f(to)g(iden)m(tify)g(sons,)j(and)d (thereb)m(y)-9 2845 y(making)31 b(some)h(no)s(des)h(redundan)m(t.)45 b(A)33 b(more)f(detailed)f(analysis)h(is)g(left)g(to)g(the)h(reader.) 137 3053 y(The)f(running)f(time)e(of)i(the)h(algorithms)c(of)j(the)g (previous)h(sections)g(is)e(summarized)g(in)h(table)f(1.)-9 3459 y Fn(4.7)135 b(Existen)l(tial)47 b(Quan)l(ti\014cation)g(and)d (Substitution)-9 3644 y FK(When)d(applying)f(R)m(OBDDs)g(often)h FD(existential)h(quanti\014c)-5 b(ation)47 b FK(and)41 b FD(c)-5 b(omp)g(osition)47 b FK(is)40 b(used.)70 b(Ex-)-9 3764 y(isten)m(tial)46 b(quan)m(ti\014cation)h(is)g(the)h(Bo)s(olean)e (op)s(eration)h FI(9)p FC(x:t)p FK(.)90 b(The)49 b(meaning)d(of)h(an)h (existen)m(tial)-9 3885 y(quan)m(ti\014cation)31 b(of)h(a)h(Bo)s(olean) e(v)-5 b(ariable)31 b(is)h(giv)m(en)h(b)m(y)g(the)g(follo)m(wing)d (equation:)1376 4084 y FI(9)p FC(x:t)61 b FK(=)f FC(t)p FK([0)p FC(=x)p FK(])23 b FI(_)f FC(t)p FK([1)p FC(=x)p FK(])17 b FC(:)1261 b FK(\(6\))-9 4283 y(On)37 b(R)m(OBDDs)h(existen)m (tial)e(quan)m(ti\014cation)h(can)h(therefore)h(b)s(e)f(implemen)m(ted) e(using)h(t)m(w)m(o)i(calls)d(to)-9 4403 y FE(Restrict)31 b FK(and)h(a)h(single)e(call)g(to)h FE(Appl)-7 b(y)p FK(.)137 4523 y FD(Comp)i(osition)46 b FK(is)40 b(the)h(R)m(OBDD)e(op)s (eration)g(p)s(erforming)g(the)h(equiv)-5 b(alen)m(t)40 b(of)g(substitution)g(on)-9 4644 y(Bo)s(olean)23 b(expression.)42 b(Often)25 b(the)g(notation)e FC(t)p FK([)p FC(t)1768 4608 y Fy(0)1792 4644 y FC(=x)p FK(])i(is)f(used)h(to)g(describ)s(e)g (the)g(result)f(of)h(substituting)-9 4764 y(all)32 b(free)i(o)s (ccurrences)i(of)e FC(x)g FK(in)f FC(t)i FK(b)m(y)g FC(t)1400 4728 y Fy(0)1423 4764 y FK(.)48 b(\(An)34 b(o)s(ccurrence)i(of)d(a)h(v) -5 b(ariable)33 b(is)g(free)i(if)e(it)g(is)g(not)h(within)-9 4884 y(the)43 b(scop)s(e)h(of)f(a)g(quan)m(ti\014er.\))1128 4848 y FB(1)1243 4884 y FK(T)-8 b(o)44 b(p)s(erform)e(this)h (substitution)f(on)i(R)m(OBDDs)e(w)m(e)j(observ)m(e)g(the)p -9 4971 1512 4 v 103 5033 a Fs(1)140 5063 y Fr(Since)28 b(R)n(OBDDs)g(con)n(tain)f(no)h(quan)n(ti\014ers)f(w)n(e)h(shall)f(not) h(b)r(e)h(concerned)e(with)h(the)h(problems)e(of)h(free)f(v)-5 b(ariables)-9 5162 y(of)27 b Ft(t)115 5132 y Fm(0)166 5162 y Fr(b)r(eing)h(b)r(ound)g(b)n(y)f(quan)n(ti\014ers)g(of)g Ft(t)p Fr(.)p eop %%Page: 26 27 26 26 bop -9 -460 a FG(4)97 b(CONSTR)m(UCTING)34 b(AND)f(MANIPULA)-8 b(TING)34 b(R)m(OBDDS)1196 b FK(26)-9 -171 y(follo)m(wing)29 b(equation,)k(whic)m(h)g(holds)f(if)g FC(t)g FK(con)m(tains)h(no)f (quan)m(ti\014ers:)899 32 y FC(t)p FK([)p FC(t)996 -9 y Fy(0)1020 32 y FC(=x)p FK(])61 b(=)f FC(t)p FK([)p FC(t)1445 -9 y Fy(0)1496 32 y FI(!)27 b FK(1)p FC(;)17 b FK(0)p FC(=x)p FK(])60 b(=)g FC(t)2127 -9 y Fy(0)2178 32 y FI(!)28 b FC(t)p FK([1)p FC(=x)p FK(])p FC(;)17 b(t)p FK([0)p FC(=x)p FK(])p FC(:)784 b FK(\(7\))137 236 y(Since)31 b(\()p FC(t)463 199 y Fy(0)514 236 y FI(!)c FC(t)p FK([1)p FC(=x)p FK(])p FC(;)17 b(t)p FK([0)p FC(=x)p FK(]\))28 b(=)g(\()p FC(t)1412 199 y Fy(0)1453 236 y FI(^)19 b FC(t)p FK([1)p FC(=x)p FK(]\))f FI(_)h FK(\()p FI(:)p FC(t)2060 199 y Fy(0)2102 236 y FI(^)g FC(t)p FK([0)p FC(=x)p FK(]\))31 b(w)m(e)g(can)g(compute)g(this)f(with)g(t)m (w)m(o)-9 356 y(applications)c(of)i FE(restrict)f FK(and)h(three)h (applications)d(of)i FE(appl)-7 b(y)28 b FK(\(with)g(the)h(op)s (erators)f FI(^)p FK(,)h(\()p FI(:)p 3546 372 33 4 v 33 w FK(\))13 b FI(^)p 3709 372 V 47 w FK(,)-9 476 y FI(_)p FK(\).)43 b(Ho)m(w)m(ev)m(er,)35 b(b)m(y)e(essen)m(tially)f (generalizing)e FE(appl)-7 b(y)32 b FK(to)f(op)s(erators)h FD(op)g FK(with)g(three)h(argumen)m(ts)f(w)m(e)-9 597 y(can)g(do)h(b)s(etter)g(\(see)g(exercise)h(4.13\).)-9 883 y Fn(Exercises)-9 1068 y FF(Exercise)i(4.1)49 b FK(Construct)35 b(the)g(R)m(OBDD)e(for)h FI(:)p FC(x)1922 1083 y FB(1)1985 1068 y FI(^)24 b FK(\()p FC(x)2168 1083 y FB(2)2238 1068 y FI(,)30 b(:)p FC(x)2489 1083 y FB(3)2530 1068 y FK(\))k(with)f (ordering)h FC(x)3267 1083 y FB(1)3337 1068 y FC(<)d(x)3499 1083 y FB(2)3569 1068 y FC(<)f(x)3730 1083 y FB(3)-9 1188 y FK(using)i(the)h(algorithm)c FE(Build)k FK(in)f(\014gure)h(9.)-9 1397 y FF(Exercise)j(4.2)49 b FK(Sho)m(w)32 b(the)f(represen)m(tation)g (of)g(the)g(R)m(OBDD)f(of)g(\014gure)h(6)g(in)f(the)h(st)m(yle)h(of)e (\014gure)h(7.)-9 1607 y FF(Exercise)36 b(4.3)49 b FK(Suggest)32 b(an)g(impro)m(v)m(emen)m(t)f FE(BuildConj)p FK(\()p FC(t)p FK(\))j(of)k FE(Build)32 b FK(whic)m(h)g(generates)h(only)e(a)-9 1727 y(linear)39 b(n)m(um)m(b)s(er)j(of)e(calls)g(for)h(Bo)s(olean)f (expressions)j FC(t)e FK(that)g(are)g(conjunctions)g(of)g(v)-5 b(ariables)40 b(and)-9 1847 y(negations)32 b(of)g(v)-5 b(ariables.)-9 2056 y FF(Exercise)36 b(4.4)49 b FK(Construct)c(the)g(R) m(OBDDs)f(for)f FC(x)i FK(and)f FC(x)k FI(\))g FC(y)f FK(using)d(whatev)m(er)i(ordering)d(y)m(ou)-9 2177 y(w)m(an)m(t.)h (Compute)33 b(the)g(disjunction)f(of)g(the)h(t)m(w)m(o)g(R)m(OBDDs)f (using)g FE(appl)-7 b(y)p FK(.)-9 2386 y FF(Exercise)36 b(4.5)49 b FK(Construct)36 b(the)g(R)m(OBDDs)e(for)h FI(:)p FK(\()p FC(x)2002 2401 y FB(1)2066 2386 y FI(^)24 b FC(x)2211 2401 y FB(3)2251 2386 y FK(\))35 b(and)g FC(x)2571 2401 y FB(2)2635 2386 y FI(^)24 b FC(x)2780 2401 y FB(3)2855 2386 y FK(using)35 b FE(build)g FK(with)g(the)-9 2506 y(ordering)c FC(x)430 2521 y FB(1)498 2506 y FC(<)c(x)656 2521 y FB(2)724 2506 y FC(<)h(x)883 2521 y FB(3)922 2506 y FK(.)44 b(Use)33 b FE(appl)-7 b(y)33 b FK(to)f(\014nd)h(the)g(R)m (OBDD)f(for)g FI(:)p FK(\()p FC(x)2677 2521 y FB(1)2739 2506 y FI(^)23 b FC(x)2883 2521 y FB(3)2922 2506 y FK(\))f FI(_)h FK(\()p FC(x)3164 2521 y FB(2)3226 2506 y FI(^)g FC(x)3370 2521 y FB(3)3409 2506 y FK(\).)-9 2716 y FF(Exercise)36 b(4.6)49 b FK(Is)22 b(there)h(an)m(y)f(essen)m(tial)g(di\013erence)g (in)f(running)g(time)g(b)s(et)m(w)m(een)j(\014nding)d FE(restrict)o FK(\()p FC(b;)c FK(1)p FC(;)g FK(0\))-9 2836 y(and)32 b FE(restrict)o FK(\()p FC(b;)17 b(n;)g FK(0\))32 b(when)i(the)f(v)-5 b(ariable)31 b(ordering)h(is)g FC(x)2279 2851 y FB(1)2346 2836 y FC(<)c(x)2505 2851 y FB(2)2572 2836 y FC(<)g FI(\001)17 b(\001)g(\001)26 b FC(<)h(x)2978 2851 y FA(n)3026 2836 y FK(?)-9 3045 y FF(Exercise)36 b(4.7)49 b FK(Use)33 b(dynamic)f(programming)e(to)i (impro)m(v)m(e)g(the)h(running)f(time)g(of)g FE(Restrict)p FK(.)-9 3254 y FF(Exercise)k(4.8)49 b FK(Generalise)21 b FE(restrict)f FK(to)i(arbitrary)e(truth)i(assignmen)m(ts)g([)p FC(x)2905 3269 y FA(i)2929 3278 y Fx(1)2996 3254 y FK(=)28 b FC(b)3141 3269 y FA(i)3165 3278 y Fx(1)3204 3254 y FK(,)p FC(x)3286 3269 y FA(i)3310 3278 y Fx(2)3377 3254 y FK(=)g FC(b)3522 3269 y FA(i)3546 3278 y Fx(2)3585 3254 y FK(,)p FC(:)17 b(:)g(:)o FK(,)p FC(x)3808 3269 y FA(i)3832 3277 y Fw(n)3907 3254 y FK(=)-9 3375 y FC(b)32 3390 y FA(i)56 3398 y Fw(n)103 3375 y FK(].)43 b(It)33 b(migh)m(t)e(b)s(e)i(con)m(v)m(enien)m(t)h(to)e(assume)h(that)g FC(x)1923 3390 y FA(i)1947 3399 y Fx(1)2014 3375 y FC(<)27 b(x)2172 3390 y FA(i)2196 3399 y Fx(2)2263 3375 y FC(<)h FI(\001)17 b(\001)g(\001)26 b FC(<)h(x)2669 3390 y FA(i)2693 3398 y Fw(n)2740 3375 y FK(.)-9 3584 y FF(Exercise)36 b(4.9)49 b FK(Suggest)24 b(a)g(substan)m(tially)e(b)s(etter)i(w)m(a)m (y)h(of)e(building)f(R)m(OBDDs)h(for)g(\(large\))f(Bo)s(olean)-9 3704 y(expressions)34 b(than)f FE(build)p FK(.)-9 3914 y FF(Exercise)j(4.10)49 b FK(Change)34 b FE(Sa)-7 b(tCount)35 b FK(suc)m(h)g(that)e(dynamic)g(programming)e(is)i(used.)48 b(Ho)m(w)35 b(do)s(es)-9 4034 y(this)d(c)m(hange)h(the)g(running)f (time?)-9 4243 y FF(Exercise)k(4.11)49 b FK(Explain)32 b(wh)m(y)i(dynamic)d(programming)f(do)s(es)j(not)f(help)h(in)f(impro)m (ving)e(the)j(run-)-9 4363 y(ning)e(time)h(of)39 b FE(AllSa)-7 b(t)p FK(.)-9 4573 y FF(Exercise)36 b(4.12)49 b FK(Impro)m(v)m(e)33 b(the)g(e\016ciency)h(of)e FE(Simplify)h FK(with)g(dynamic)f (programming.)-9 4782 y FF(Exercise)k(4.13)49 b FK(W)-8 b(rite)39 b(the)g(algorithm)e FE(Compose)p FK(\()p FC(u)2116 4797 y FB(1)2154 4782 y FC(;)17 b(x;)g(u)2353 4797 y FB(2)2392 4782 y FK(\))40 b(for)e(computing)g(the)i(R)m(OBDD)e(of)-9 4902 y FC(u)47 4917 y FB(1)86 4902 y FK([)p FC(u)169 4917 y FB(2)208 4902 y FC(=x)p FK(])47 b(e\016cien)m(tly)g(along)f(the) h(lines)f(of)h FE(appl)-7 b(y)o FK(.)87 b(First)46 b(generalize)g FE(appl)-7 b(y)47 b FK(to)g(op)s(erators)f FD(op)-9 5023 y FK(with)34 b(three)h(argumen)m(ts)g(\(as)g(for)f(example)g(the)h (if-then-else)e(op)s(erator\),)i(utilizing)c(once)k(again)f(the)-9 5143 y(Shannon)f(expansion.)44 b(Then)33 b(use)h(equation)e(7)g(to)h (write)f(the)h(algorithm.)p eop %%Page: 27 28 27 27 bop -9 -460 a FG(5)97 b(IMPLEMENTING)35 b(THE)e(R)m(OBDD)f(OPERA) -8 b(TIONS)1410 b FK(27)-9 -171 y FH(5)161 b(Implemen)l(ting)51 b(the)i(R)l(OBDD)g(op)t(erations)-9 48 y FK(There)36 b(are)f(man)m(y)g(c)m(hoices)g(that)g(ha)m(v)m(e)h(to)f(b)s(e)g(tak)m (en)h(in)e(implemen)m(ting)e(the)k(R)m(OBDD)e(op)s(erations.)-9 168 y(There)41 b(is)e(no)h(ob)m(vious)g(b)s(est)h(w)m(a)m(y)g(of)e (doing)g(it.)65 b(This)40 b(section)g(giv)m(es)g(hin)m(ts)g(for)f(some) h(reasonable)-9 289 y(solutions.)137 409 y(First,)30 b(the)i(no)s(de)f(table)f FC(T)44 b FK(is)31 b(an)f(arra)m(y)h(as)h (sho)m(wn)g(in)e(\014gure)h(7.)43 b(The)32 b(only)e(problem)g(is)g (that)h(the)-9 530 y(size)38 b(of)h(the)g(arra)m(y)f(is)g(not)h(kno)m (wn)h(un)m(til)d(the)i(full)e(BDD)h(has)h(b)s(een)g(constructed.)63 b(Either)39 b(a)f(\014xed)-9 650 y(upp)s(er)j(b)s(ound)g(could)f(b)s(e) h(assumed,)i(or)e(other)f(tric)m(ks)i(m)m(ust)e(b)s(e)h(applied)f (\(for)g(example)g FD(dynamic)-9 770 y(arr)-5 b(ays)33 b FK([CLR90,)i(sec.)g(18.4]\).)46 b(The)35 b(table)f FC(H)41 b FK(could)33 b(b)s(e)h(implemen)m(ted)f(as)h(a)g(hash-table)f (using)h(for)-9 891 y(instance)e(the)h(hash)h(function)1019 1099 y FC(h)p FK(\()p FC(i;)17 b(v)t FK(0)p FC(;)g(v)t FK(1\))26 b(=)i FD(p)-5 b(air)o FK(\()p FC(i;)17 b FD(p)-5 b(air)p FK(\()p FC(v)t FK(0)p FC(;)17 b(v)t FK(1\)\))31 b(mo)s(d)g FC(m)-9 1307 y FK(where)36 b FD(p)-5 b(air)34 b FK(is)h(a)g(pairing)e(function)h(that)h(maps)g(pairs)f(of)h(natural)f (n)m(um)m(b)s(ers)i(to)e(natural)g(n)m(um)m(b)s(ers)-9 1427 y(and)e FC(m)h FK(is)f(a)g(prime.)43 b(One)33 b(c)m(hoice)g(for)f (the)h(pairing)d(function)i(is)1186 1685 y FD(p)-5 b(air)p FK(\()p FC(i;)17 b(j)6 b FK(\))27 b(=)1692 1618 y(\()p FC(i)22 b FK(+)g FC(j)6 b FK(\)\()p FC(i)22 b FK(+)g FC(j)28 b FK(+)22 b(1\))p 1692 1662 720 4 v 2027 1753 a(2)2443 1685 y(+)g FC(i)-9 1918 y FK(whic)m(h)42 b(is)g(a)f (bijection,)j(and)e(therefore)g(\\p)s(erfect":)63 b(it)41 b(pro)s(duces)i(no)f(collisions.)69 b(As)43 b(usual)e(with)-9 2039 y(hash-tables)f(w)m(e)h(ha)m(v)m(e)h(to)e(decide)h(on)f(the)h (size)g(as)f(a)g(prime)f FC(m)p FK(.)68 b(Ho)m(w)m(ev)m(er,)44 b(since)d(the)g(size)g(of)f FC(H)-9 2159 y FK(gro)m(ws)33 b(dynamically)f(it)g(can)h(b)s(e)h(hard)f(to)g(\014nd)h(a)f(go)s(o)s(d) f(c)m(hoice)i(for)e FC(m)p FK(.)46 b(One)34 b(solution)e(w)m(ould)h(b)s (e)g(to)-9 2280 y(tak)m(e)k FC(m)f FK(v)m(ery)i(large,)f(for)f(example) f FC(m)g FK(=)f(15485863)h(\(whic)m(h)i(is)e(the)i(1000000'th)e(prime)h (n)m(um)m(b)s(er\),)-9 2400 y(and)c(then)h(tak)m(e)h(as)f(the)g (hashing)f(function)1180 2608 y FC(h)1236 2567 y Fy(0)1259 2608 y FK(\()p FC(i;)17 b(v)t FK(0)p FC(;)g(v)t FK(1\))26 b(=)i FC(h)p FK(\()p FC(i;)17 b(v)t FK(0)p FC(;)g(v)t FK(1\))31 b(mo)s(d)h(2)2539 2567 y FA(k)-9 2816 y FK(using)d(a)h(table) g(of)g(size)g(2)904 2780 y FA(k)947 2816 y FK(.)42 b(Starting)29 b(from)g(some)i(reasonable)f(small)e(v)-5 b(alue)29 b(of)h FC(k)j FK(w)m(e)f(could)e(increase)-9 2937 y(the)41 b(table)f(when)h (it)f(con)m(tains)h(2)1227 2901 y FA(k)1310 2937 y FK(elemen)m(ts)g(b)m (y)g(adding)f(one)h(to)f FC(k)s FK(,)j(construct)f(a)e(new)i(table)e (and)-9 3057 y(rehash)f(all)e(elemen)m(ts)i(in)m(to)g(this)f(new)i (table.)62 b(\(Again,)40 b(see)g(for)e(example)h([CLR90)o(,)i(sec.)f (18.4])f(for)-9 3177 y(details.\))i(F)-8 b(or)29 b(suc)m(h)i(a)e (dynamic)g(hash-table)g(the)h(amortized,)e(exp)s(ected)k(cost)e(of)f (eac)m(h)h(op)s(eration)f(is)-9 3298 y(still)h FC(O)s FK(\(1\).)137 3418 y(The)k(table)f FC(G)g FK(used)i(in)e FE(Appl)-7 b(y)33 b FK(could)g(b)s(e)h(implemen)m(ted)e(as)h(a)h(t)m(w) m(o-dimensional)d(arra)m(y)-8 b(.)46 b(Ho)m(w-)-9 3539 y(ev)m(er,)i(it)43 b(turns)h(out)g(to)g(b)s(e)g(v)m(ery)i(sparsely)e (used)h({)f(esp)s(ecially)f(if)g(w)m(e)i(succeed)h(in)d(getting)g (small)-9 3659 y(R)m(OBDDs)36 b({)g(and)h(it)e(is)h(b)s(etter)h(to)f (use)i(a)e(hash-table)g(for)g(it.)55 b(The)37 b(hashing)g(function)f (used)h(could)-9 3779 y(b)s(e)32 b FC(g)t FK(\()p FC(v)t FK(0)p FC(;)17 b(v)t FK(1\))26 b(=)h FC(pair)s FK(\()p FC(v)t FK(0)p FC(;)17 b(v)t FK(1\))32 b(mo)s(d)f FC(m)i FK(and)g(as)f(for)g FC(H)41 b FK(a)32 b(dynamic)g(hash-table)g(could)g (b)s(e)h(used.)-9 4110 y FH(6)161 b(Examples)53 b(of)h(problem)f (solving)h(with)g(R)l(OBDDs)-9 4329 y FK(This)d(section)h(will)d (describ)s(e)j(v)-5 b(arious)51 b(examples)g(of)g(problems)g(that)g (can)g(b)s(e)h(solv)m(ed)g(with)f(an)-9 4450 y(R)m(OBDD-pac)m(k)-5 b(age.)86 b(The)48 b(examples)f(are)g FD(not)57 b FK(c)m(hosen)49 b(to)d(illustrate)f(when)k(R)m(OBDDs)d(are)i(the)-9 4570 y(b)s(est)33 b(c)m(hoice,)g(but)g(simply)e(c)m(hosen)j(to)e(illustrate) f(the)i(scop)s(e)g(of)f(p)s(oten)m(tial)f(applications.)-9 4857 y Fn(6.1)135 b(The)44 b(8)h(Queens)h(problem)-9 5042 y FK(A)34 b(classical)e(c)m(hess-b)s(oard)k(problem)d(is)g(the)i FD(8)h(que)-5 b(ens)36 b(pr)-5 b(oblem)p FK(:)45 b(Is)35 b(it)e(p)s(ossible)h(to)f(place)h(8)g(queens)-9 5162 y(on)f(a)h(c)m(hess)h(b)s(oard)f(so)f(that)h(no)f(queen)j(can)e(b)s(e)g (captured)g(b)m(y)h(another)f(queen?)48 b(T)-8 b(o)34 b(b)s(e)f(a)h(bit)f(more)p eop %%Page: 28 29 28 28 bop -9 -460 a FG(6)97 b(EXAMPLES)34 b(OF)e(PR)m(OBLEM)i(SOL)-11 b(VING)33 b(WITH)g(R)m(OBDDS)1052 b FK(28)-9 -171 y(general)30 b(w)m(e)i(could)e(ask)i(the)f(question)g(for)f(arbitrary)g FC(N)10 b FK(:)43 b(Is)32 b(it)e(p)s(ossible)g(to)g(place)h FC(N)41 b FK(queens)33 b(safely)-9 -51 y(on)f(a)g FC(N)h FI(\002)23 b FC(N)43 b FK(c)m(hess)34 b(b)s(oard?)137 70 y(T)-8 b(o)33 b(solv)m(e)g(the)g(problem)e(using)h(R)m(OBDDs)g(w)m (e)i(m)m(ust)f(enco)s(de)g(it)f(using)g(Bo)s(olean)f(v)-5 b(ariables.)43 b(W)-8 b(e)-9 190 y(do)33 b(this)h(b)m(y)h(in)m(tro)s (ducing)d(a)i(v)-5 b(ariable)32 b(for)h(eac)m(h)i(p)s(osition)d(on)i (the)g(b)s(oard.)47 b(W)-8 b(e)35 b(name)e(the)h(v)-5 b(ariables)-9 310 y(as)29 b FC(x)162 325 y FA(ij)223 310 y FC(;)17 b FK(1)27 b FI(\024)h FC(i;)17 b(j)34 b FI(\024)28 b FC(N)40 b FK(where)30 b FC(i)g FK(is)f(the)h(ro)m(w)f(and) h FC(j)35 b FK(is)29 b(the)h(column.)41 b(A)29 b(v)-5 b(ariable)28 b(will)f(b)s(e)i(1)g(if)f(a)h(queen)-9 431 y(is)j(placed)g(on)h(the)g(corresp)s(onding)f(p)s(osition.)1075 2231 y @beginspecial 0 @llx 0 @lly 194 @urx 200 @ury 1940 @rwi @setspecial %%BeginDocument: chess.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -39.0 221.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 5884 m 0 0 l 6202 0 l 6202 5884 l cp clip 0.03780 0.03780 sc /Times-Roman ff 270.00 scf sf 1635 5805 m gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 2235 5805 m gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 2835 5805 m gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 3435 5805 m gs 1 -1 sc (4) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 4035 5805 m gs 1 -1 sc (5) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 4635 5805 m gs 1 -1 sc (6) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 5235 5805 m gs 1 -1 sc (7) dup sw pop 2 div neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 5835 5805 m gs 1 -1 sc (8) dup sw pop 2 div neg 0 rm col0 sh gr % Polyline 7.500 slw n 4350 1170 m 4950 1170 l 4950 570 l 4350 570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3750 1770 m 4350 1770 l 4350 1170 l 3750 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4350 2370 m 4950 2370 l 4950 1770 l 4350 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3750 2970 m 4350 2970 l 4350 2370 l 3750 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4350 3570 m 4950 3570 l 4950 2970 l 4350 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3750 4170 m 4350 4170 l 4350 3570 l 3750 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4350 4770 m 4950 4770 l 4950 4170 l 4350 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3750 5370 m 4350 5370 l 4350 4770 l 3750 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3750 570 m 4950 570 l 4950 5370 l 3750 5370 l 3750 5370 l gs col0 s gr % Polyline n 4350 570 m 4350 5370 l gs col0 s gr % Polyline n 4950 1170 m 3750 1170 l gs col0 s gr % Polyline n 4950 1770 m 3750 1770 l gs col0 s gr % Polyline n 4950 2370 m 3750 2370 l gs col0 s gr % Polyline n 4950 2970 m 3750 2970 l gs col0 s gr % Polyline n 4950 3570 m 3750 3570 l gs col0 s gr % Polyline n 4950 4170 m 3750 4170 l gs col0 s gr % Polyline n 4950 4770 m 3750 4770 l gs col0 s gr % Polyline n 3150 1170 m 3750 1170 l 3750 570 l 3150 570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 2550 1770 m 3150 1770 l 3150 1170 l 2550 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3150 2370 m 3750 2370 l 3750 1770 l 3150 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 2550 2970 m 3150 2970 l 3150 2370 l 2550 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3150 3570 m 3750 3570 l 3750 2970 l 3150 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 2550 4170 m 3150 4170 l 3150 3570 l 2550 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 3150 4770 m 3750 4770 l 3750 4170 l 3150 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 2550 5370 m 3150 5370 l 3150 4770 l 2550 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 2550 570 m 3750 570 l 3750 5370 l 2550 5370 l 2550 5370 l gs col0 s gr % Polyline n 3150 570 m 3150 5370 l gs col0 s gr % Polyline n 3750 1170 m 2550 1170 l gs col0 s gr % Polyline n 3750 1770 m 2550 1770 l gs col0 s gr % Polyline n 3750 2370 m 2550 2370 l gs col0 s gr % Polyline n 3750 2970 m 2550 2970 l gs col0 s gr % Polyline n 3750 3570 m 2550 3570 l gs col0 s gr % Polyline n 3750 4170 m 2550 4170 l gs col0 s gr % Polyline n 3750 4770 m 2550 4770 l gs col0 s gr % Polyline n 1950 1170 m 2550 1170 l 2550 570 l 1950 570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1350 1770 m 1950 1770 l 1950 1170 l 1350 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1950 2370 m 2550 2370 l 2550 1770 l 1950 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1350 2970 m 1950 2970 l 1950 2370 l 1350 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1950 3570 m 2550 3570 l 2550 2970 l 1950 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1350 4170 m 1950 4170 l 1950 3570 l 1350 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1950 4770 m 2550 4770 l 2550 4170 l 1950 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1350 5370 m 1950 5370 l 1950 4770 l 1350 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 1350 570 m 2550 570 l 2550 5370 l 1350 5370 l 1350 5370 l gs col0 s gr % Polyline n 1950 570 m 1950 5370 l gs col0 s gr % Polyline n 2550 1170 m 1350 1170 l gs col0 s gr % Polyline n 2550 1770 m 1350 1770 l gs col0 s gr % Polyline n 2550 2370 m 1350 2370 l gs col0 s gr % Polyline n 2550 2970 m 1350 2970 l gs col0 s gr % Polyline n 2550 3570 m 1350 3570 l gs col0 s gr % Polyline n 2550 4170 m 1350 4170 l gs col0 s gr % Polyline n 2550 4770 m 1350 4770 l gs col0 s gr % Polyline n 5550 1170 m 6150 1170 l 6150 570 l 5550 570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4950 1770 m 5550 1770 l 5550 1170 l 4950 1170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 5550 2370 m 6150 2370 l 6150 1770 l 5550 1770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4950 2970 m 5550 2970 l 5550 2370 l 4950 2370 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 5550 3570 m 6150 3570 l 6150 2970 l 5550 2970 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4950 4170 m 5550 4170 l 5550 3570 l 4950 3570 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 5550 4770 m 6150 4770 l 6150 4170 l 5550 4170 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4950 5370 m 5550 5370 l 5550 4770 l 4950 4770 l cp gs col7 0.50 shd ef gr gs col7 s gr % Polyline n 4950 570 m 6150 570 l 6150 5370 l 4950 5370 l 4950 5370 l gs col0 s gr % Polyline n 5550 570 m 5550 5370 l gs col0 s gr % Polyline n 6150 1170 m 4950 1170 l gs col0 s gr % Polyline n 6150 1770 m 4950 1770 l gs col0 s gr % Polyline n 6150 2370 m 4950 2370 l gs col0 s gr % Polyline n 6150 2970 m 4950 2970 l gs col0 s gr % Polyline n 6150 3570 m 4950 3570 l gs col0 s gr % Polyline n 6150 4170 m 4950 4170 l gs col0 s gr % Polyline n 6150 4770 m 4950 4770 l gs col0 s gr % Polyline n 1350 570 m 1350 5370 l gs col0 s gr /Times-Roman ff 270.00 scf sf 1185 5145 m gs 1 -1 sc (1) dup sw pop neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 1185 4605 m gs 1 -1 sc (2) dup sw pop neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 1185 4020 m gs 1 -1 sc (3) dup sw pop neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 1185 3390 m gs 1 -1 sc (4) dup sw pop neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 1185 2805 m gs 1 -1 sc (5) dup sw pop neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 1185 2175 m gs 1 -1 sc (6) dup sw pop neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 1185 1545 m gs 1 -1 sc (7) dup sw pop neg 0 rm col0 sh gr /Times-Roman ff 270.00 scf sf 1185 960 m gs 1 -1 sc (8) dup sw pop neg 0 rm col0 sh gr $F2psEnd rs %%EndDocument @endspecial 137 2556 a(The)k(capturing)e(rules)h(for)f(queens)j (require)f(that)e(no)h(other)g(queen)i(can)e(b)s(e)g(p)s(ositioned)f (on)h(the)-9 2677 y(same)e(ro)m(w,)i(column,)e(or)g(an)m(y)i(of)e(the)h (diagonals.)46 b(This)34 b(w)m(e)h(can)f(express)i(as)e(Bo)s(olean)e (expressions:)-9 2797 y(F)-8 b(or)31 b(all)g FC(i;)17 b(j)6 b FK(,)1138 2929 y FC(x)1193 2944 y FA(ij)1282 2929 y FI(\))1531 2835 y Fv(^)1409 3047 y FB(1)p Fy(\024)p FA(l)q Fy(\024)p FA(N)s(;l)q Fy(6)p FB(=)p FA(j)1780 2929 y FI(:)p FC(x)1901 2944 y FA(il)1138 3174 y FC(x)1193 3189 y FA(ij)1282 3174 y FI(\))1543 3080 y Fv(^)1409 3292 y FB(1)p Fy(\024)p FA(k)r Fy(\024)p FA(N)s(;k)r Fy(6)p FB(=)p FA(i)1805 3174 y FI(:)p FC(x)1926 3189 y FA(k)r(j)1138 3419 y FC(x)1193 3434 y FA(ij)1282 3419 y FI(\))1758 3325 y Fv(^)1409 3537 y FB(1)p Fy(\024)p FA(k)r Fy(\024)p FA(N)s(;)p FB(1)p Fy(\024)p FA(j)t FB(+)p FA(k)r Fy(\000)p FA(i)p Fy(\024)p FA(N)s(;k)r Fy(6)p FB(=)p FA(i)2234 3419 y FI(:)p FC(x)2355 3434 y FA(k)r(;j)t FB(+)p FA(k)r Fy(\000)p FA(i)1138 3664 y FC(x)1193 3679 y FA(ij)1282 3664 y FI(\))1758 3570 y Fv(^)1409 3782 y FB(1)p Fy(\024)p FA(k)r Fy(\024)p FA(N)s(;)p FB(1)p Fy(\024)p FA(j)t FB(+)p FA(i)p Fy(\000)p FA(k)r Fy(\024)p FA(N)s(;k)r Fy(6)p FB(=)p FA(i)2234 3664 y FI(:)p FC(x)2355 3679 y FA(k)r(;j)t FB(+)p FA(i)p Fy(\000)p FA(k)-9 3936 y FK(Moreo)m(v)m(er,)34 b(there)f(m)m(ust)g(b)s(e)g(a)f(queen)i(in)e (eac)m(h)h(ro)m(w:)44 b(F)-8 b(or)32 b(all)e FC(i)p FK(,)1464 4156 y FC(x)1519 4171 y FA(i)p FB(1)1605 4156 y FI(_)23 b FC(x)1749 4171 y FA(i)p FB(2)1835 4156 y FI(_)f(\001)17 b(\001)g(\001)j(_)j FC(x)2205 4171 y FA(iN)-9 4376 y FK(T)-8 b(aking)31 b(the)i(conjunction)f(of)g(all)e(the)j(ab)s(o)m(v)m (e)g(requiremen)m(ts,)g(w)m(e)h(get)e(a)g(predicate)g FD(Sol)3247 4391 y FA(N)3314 4376 y FK(\()n FC(~)-47 b(x)q FK(\))32 b(true)g(at)-9 4497 y(exactly)h(the)g(con\014gurations)f (that)g(are)h(solutions)e(to)h(the)h FC(N)44 b FK(queens)34 b(problem.)-9 4725 y FF(Exercise)i(6.1)h(\(8)g(Queens)i(Problem\))47 b FK(W)-8 b(rite)49 b(a)h(program)f(that)i(can)f(\014nd)h(an)f(R)m (OBDD)g(for)-9 4845 y FD(Sol)120 4860 y FA(N)187 4845 y FK(\()n FC(~)-47 b(x)q FK(\))46 b(when)i(giv)m(en)f FC(N)57 b FK(as)47 b(input.)85 b(Mak)m(e)48 b(a)f(table)f(of)g(the)h(n) m(um)m(b)s(er)g(of)f(solutions)g(to)g(the)i FC(N)-9 4966 y FK(queens)34 b(problem)d(for)i FC(N)38 b FK(=)27 b(1)p FC(;)17 b FK(2)p FC(;)g FK(3)p FC(;)g FK(4)p FC(;)g FK(5)p FC(;)g FK(6)p FC(;)g FK(7)p FC(;)g FK(8)p FC(;)g(:)g(:)g(:)28 b FK(When)34 b(there)f(is)f(a)g(solution,)f(giv)m(e)i(one.)p eop %%Page: 29 30 29 29 bop -9 -460 a FG(6)97 b(EXAMPLES)34 b(OF)e(PR)m(OBLEM)i(SOL)-11 b(VING)33 b(WITH)g(R)m(OBDDS)1052 b FK(29)657 1816 y @beginspecial 0 @llx 0 @lly 322 @urx 251 @ury 3220 @rwi @setspecial %%BeginDocument: adder.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save 8.0 259.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 423 m 0 0 l 505 0 l 505 423 l cp clip 0.67500 0.67500 sc % Polyline 0.500 slw n 259 119 m 259 79 l 219 79 l 219 119 l cp gs col0 s gr % Polyline n 359 199 m 359 159 l 319 159 l 319 199 l cp gs col0 s gr % Polyline n 259 259 m 259 219 l 219 219 l 219 259 l cp gs col0 s gr % Polyline n 369 319 m 369 279 l 329 279 l 329 319 l cp gs col0 s gr % Polyline gs clippath 331 149 m 329 157 l 327 149 l 327 160 l 331 160 l cp clip n 329 39 m 329 159 l gs col0 s gr gr % arrowhead n 331 149 m 329 157 l 327 149 l col0 s % Polyline gs clippath 351 149 m 349 157 l 347 149 l 347 160 l 351 160 l cp clip n 349 39 m 349 159 l gs col0 s gr gr % arrowhead n 351 149 m 349 157 l 347 149 l col0 s % Polyline gs clippath 269 91 m 260 89 l 269 87 l 258 87 l 258 91 l cp clip n 329 89 m 259 89 l gs col0 s gr gr % arrowhead n 269 91 m 260 89 l 269 87 l col0 s % Polyline gs clippath 269 111 m 260 109 l 269 107 l 258 107 l 258 111 l cp clip n 349 109 m 259 109 l gs col0 s gr gr % arrowhead n 269 111 m 260 109 l 269 107 l col0 s % Polyline gs clippath 341 269 m 339 277 l 337 269 l 337 280 l 341 280 l cp clip n 339 199 m 339 279 l gs col0 s gr gr % arrowhead n 341 269 m 339 277 l 337 269 l col0 s % Polyline gs clippath 269 231 m 260 229 l 269 227 l 258 227 l 258 231 l cp clip n 339 229 m 259 229 l gs col0 s gr gr % arrowhead n 269 231 m 260 229 l 269 227 l col0 s % Polyline gs clippath 269 251 m 260 249 l 269 247 l 258 247 l 258 251 l cp clip n 419 249 m 259 249 l gs col0 s gr gr % arrowhead n 269 251 m 260 249 l 269 247 l col0 s % Polyline gs clippath 149 241 m 140 239 l 149 237 l 138 237 l 138 241 l cp clip n 219 239 m 139 239 l gs col0 s gr gr % arrowhead n 149 241 m 140 239 l 149 237 l col0 s % Polyline n 139 249 m 139 209 l 99 209 l 99 249 l cp gs col0 s gr % Polyline gs clippath 149 221 m 140 219 l 149 217 l 138 217 l 138 221 l cp clip n 219 99 m 179 99 l 179 219 l 139 219 l gs col0 s gr gr % arrowhead n 149 221 m 140 219 l 149 217 l col0 s % Polyline gs clippath 49 231 m 40 229 l 49 227 l 38 227 l 38 231 l cp clip n 99 229 m 39 229 l gs col0 s gr gr % arrowhead n 49 231 m 40 229 l 49 227 l col0 s % Polyline gs clippath 361 269 m 359 277 l 357 269 l 357 280 l 361 280 l cp clip n 359 249 m 359 279 l gs col0 s gr gr % arrowhead n 361 269 m 359 277 l 357 269 l col0 s % Polyline gs clippath 351 349 m 349 357 l 347 349 l 347 360 l 351 360 l cp clip n 349 319 m 349 359 l gs col0 s gr gr % arrowhead n 351 349 m 349 357 l 347 349 l col0 s $F2psEnd rs %%EndDocument @endspecial 1348 1006 a gsave 0 0 0 setrgbcolor 1348 1006 a Fc(_)1428 1006 y grestore 1428 1006 a 2023 275 a gsave 0 0 0 setrgbcolor 2023 275 a Fc(^)2103 275 y grestore 2103 275 a 2023 1062 a gsave 0 0 0 setrgbcolor 2023 1062 a Fc(^)2103 1062 y grestore 2103 1062 a 2543 725 a gsave 0 0 0 setrgbcolor 2543 725 a FL(xor)2710 725 y grestore 2710 725 a 2599 1400 a gsave 0 0 0 setrgbcolor 2599 1400 a FL(xor)2766 1400 y grestore 2766 1400 a 2536 -175 a gsave 0 0 0 setrgbcolor 2536 -175 a Fq(x)2603 -175 y grestore 2603 -175 a 2651 -175 a gsave 0 0 0 setrgbcolor 2651 -175 a Fq(y)2712 -175 y grestore 2712 -175 a 815 1006 a gsave 0 0 0 setrgbcolor 815 1006 a Fq(c)865 1024 y Ft(o)910 1006 y grestore 910 1006 a 3104 1091 a gsave 0 0 0 setrgbcolor 3104 1091 a Fq(c)3154 1109 y Ft(i)3187 1091 y grestore 3187 1091 a 2654 1794 a gsave 0 0 0 setrgbcolor 2654 1794 a Fq(s)2709 1794 y grestore 2709 1794 a 1385 2128 a FK(Figure)32 b(18:)43 b(A)32 b(full-adder)-9 2413 y Fn(6.2)135 b(Correctness)46 b(of)f(Com)l(binational)i(Circuits)-9 2597 y FK(A)h FD(ful)5 b(l-adder)58 b FK(tak)m(es)50 b(as)e(argumen)m(ts)h(t)m(w)m(o)g(bits)f FC(x)g FK(and)h FC(y)i FK(and)e(an)f(incoming)e(carry)j(bit)e FC(c)3551 2612 y FA(i)3579 2597 y FK(.)91 b(It)-9 2718 y(pro)s(duces)39 b(as)h(output)e(a)h(sum)g(bit)f FC(s)g FK(and)h(an)g(outgoing)e(carry)j(bit)e FC(c)2605 2733 y FA(o)2643 2718 y FK(.)62 b(The)40 b(requiremen)m(t)f(is)f(that)-9 2838 y(2)17 b FI(\003)h FC(c)167 2853 y FA(o)223 2838 y FK(+)g FC(s)28 b FK(=)f FC(x)19 b FK(+)f FC(y)j FK(+)d FC(c)867 2853 y FA(i)895 2838 y FK(,)31 b(in)f(other)g(w)m(ords)i FC(c)1637 2853 y FA(o)1706 2838 y FK(is)e(the)h(most)f(signi\014can)m (t)f(bit)h(of)g(the)h(sum)g(of)f FC(x;)17 b(y)t FK(,)30 b(and)-9 2958 y FC(c)33 2973 y FA(i)61 2958 y FK(,)j(and)g FC(s)f FK(the)i(least)e(signi\014can)m(t)g(bit.)43 b(The)34 b(requiremen)m(t)f(can)h(b)s(e)f(written)f(do)m(wn)i(as)f(a)f(table)h (for)f FC(c)3732 2973 y FA(o)-9 3079 y FK(and)i(a)h(table)f(for)g FC(s)h FK(in)f(terms)h(of)f(v)-5 b(alues)35 b(of)f FC(x;)17 b(y)t FK(,)35 b(and)g FC(c)2100 3094 y FA(i)2128 3079 y FK(.)50 b(F)-8 b(rom)33 b(suc)m(h)j(a)f(table)f(it)g(is)g(easy)i(to)e (write)-9 3199 y(do)m(wn)f(a)f(DNF)g(for)g FC(c)764 3214 y FA(o)835 3199 y FK(and)h FC(s)p FK(.)137 3320 y(A)m(t)49 b(the)h(normal)d(lev)m(el)i(of)g(abstraction)g(a)g(com)m(binational)d (circuit)i(is)h(nothing)f(else)i(than)f(a)-9 3440 y(Bo)s(olean)c (expression.)87 b(It)47 b(can)g(b)s(e)g(represen)m(ted)j(as)c(an)h(R)m (OBDD,)f(using)g FE(Build)i FK(to)e(construct)-9 3560 y(the)33 b(trivial)c(R)m(OBDDs)k(for)f(the)h(inputs)f(and)h(using)f(a)g (call)f(to)h FE(Appl)-7 b(y)33 b FK(for)f(eac)m(h)h(gate.)-9 3789 y FF(Exercise)j(6.2)49 b FK(Find)32 b(DNFs)h(for)g FC(c)1333 3804 y FA(o)1404 3789 y FK(and)h FC(s)p FK(.)45 b(V)-8 b(erify)33 b(that)g(the)h(circuit)e(in)g(\014gure)i(18)f (implemen)m(ts)e(a)-9 3909 y(one)h(bit)g(full-adder)f(using)h(the)h(R)m (OBDD-pac)m(k)-5 b(age)32 b(and)g(the)h(DNFs.)-9 4198 y Fn(6.3)135 b(Equiv)-7 b(alence)46 b(of)f(Com)l(binational)i(Circuits) -9 4383 y FK(As)26 b(ab)s(o)m(v)m(e)g(w)m(e)h(can)f(construct)g(an)g(R) m(OBDD)f(from)f(a)h(com)m(binational)e(circuit)h(and)i(use)h(the)f(R)m (OBDDs)-9 4503 y(to)32 b(sho)m(w)h(prop)s(erties.)44 b(F)-8 b(or)32 b(instance,)h(the)g(equiv)-5 b(alence)33 b(with)f(other)g(circuits.)-9 4731 y FF(Exercise)k(6.3)49 b FK(V)-8 b(erify)28 b(that)g(the)g(t)m(w)m(o)h(circuits)f(in)f (\014gure)i(19)f(are)g FD(not)38 b FK(equiv)-5 b(alen)m(t)28 b(using)f(R)m(OBDDs.)-9 4852 y(Find)k(an)i(input)f(that)g(returns)i (di\013eren)m(t)f(outputs)g(in)f(the)h(t)m(w)m(o)g(circuits.)p eop %%Page: 30 31 30 30 bop -9 -460 a FG(6)97 b(EXAMPLES)34 b(OF)e(PR)m(OBLEM)i(SOL)-11 b(VING)33 b(WITH)g(R)m(OBDDS)1052 b FK(30)572 4024 y @beginspecial 0 @llx 0 @lly 334 @urx 419 @ury 3340 @rwi @setspecial %%BeginDocument: two-circuits.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save 9.0 445.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 658 m 0 0 l 491 0 l 491 658 l cp clip 0.72000 0.72000 sc 0.500 slw % Ellipse n 59 364 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 69 394 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 59 454 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 129 454 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 139 524 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 169 604 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 199 604 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 149 464 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 169 444 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 159 394 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 79 524 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 114 434 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline n 99 464 m 99 444 l 79 444 l 79 464 l cp gs col0 s gr % Polyline gs clippath 209 362 m 217 364 l 209 366 l 220 366 l 220 362 l cp clip n 39 364 m 219 364 l gs col0 s gr gr % arrowhead n 209 362 m 217 364 l 209 366 l col0 s % Polyline gs clippath 209 502 m 217 504 l 209 506 l 220 506 l 220 502 l cp clip n 59 364 m 59 504 l 219 504 l gs col0 s gr gr % arrowhead n 209 502 m 217 504 l 209 506 l col0 s % Polyline n 119 534 m 119 514 l 99 514 l 99 534 l cp gs col0 s gr % Polyline gs clippath 209 392 m 217 394 l 209 396 l 220 396 l 220 392 l cp clip n 39 394 m 219 394 l gs col0 s gr gr % arrowhead n 209 392 m 217 394 l 209 396 l col0 s % Polyline gs clippath 209 512 m 217 514 l 209 516 l 220 516 l 220 512 l cp clip n 159 394 m 159 514 l 219 514 l gs col0 s gr gr % arrowhead n 209 512 m 217 514 l 209 516 l col0 s % Polyline gs clippath 209 522 m 217 524 l 209 526 l 220 526 l 220 522 l cp clip n 119 524 m 219 524 l gs col0 s gr gr % arrowhead n 209 522 m 217 524 l 209 526 l col0 s % Polyline gs clippath 89 522 m 97 524 l 89 526 l 100 526 l 100 522 l cp clip n 39 524 m 99 524 l gs col0 s gr gr % arrowhead n 89 522 m 97 524 l 89 526 l col0 s % Polyline gs clippath 209 602 m 217 604 l 209 606 l 220 606 l 220 602 l cp clip n 39 604 m 219 604 l gs col0 s gr gr % arrowhead n 209 602 m 217 604 l 209 606 l col0 s % Polyline gs clippath 69 452 m 77 454 l 69 456 l 80 456 l 80 452 l cp clip n 59 454 m 79 454 l gs col0 s gr gr % arrowhead n 69 452 m 77 454 l 69 456 l col0 s % Polyline gs clippath 209 452 m 217 454 l 209 456 l 220 456 l 220 452 l cp clip n 99 454 m 219 454 l gs col0 s gr gr % arrowhead n 209 452 m 217 454 l 209 456 l col0 s % Polyline gs clippath 209 582 m 217 584 l 209 586 l 220 586 l 220 582 l cp clip n 129 454 m 129 584 l 219 584 l gs col0 s gr gr % arrowhead n 209 582 m 217 584 l 209 586 l col0 s % Polyline gs clippath 209 572 m 217 574 l 209 576 l 220 576 l 220 572 l cp clip n 139 524 m 139 574 l 219 574 l gs col0 s gr gr % arrowhead n 209 572 m 217 574 l 209 576 l col0 s % Polyline n 99 434 m 99 414 l 79 414 l 79 434 l cp gs col0 s gr % Polyline gs clippath 69 422 m 77 424 l 69 426 l 80 426 l 80 422 l cp clip n 69 394 m 69 424 l 79 424 l gs col0 s gr gr % arrowhead n 69 422 m 77 424 l 69 426 l col0 s % Polyline gs clippath 209 592 m 217 594 l 209 596 l 220 596 l 220 592 l cp clip n 99 424 m 149 424 l 149 594 l 219 594 l gs col0 s gr gr % arrowhead n 209 592 m 217 594 l 209 596 l col0 s % Polyline gs clippath 309 452 m 317 454 l 309 456 l 320 456 l 320 452 l cp clip n 259 379 m 279 379 l 279 454 l 319 454 l gs col0 s gr gr % arrowhead n 309 452 m 317 454 l 309 456 l col0 s % Polyline gs clippath 309 462 m 317 464 l 309 466 l 320 466 l 320 462 l cp clip n 259 464 m 319 464 l gs col0 s gr gr % arrowhead n 309 462 m 317 464 l 309 466 l col0 s % Polyline gs clippath 309 502 m 317 504 l 309 506 l 320 506 l 320 502 l cp clip n 259 504 m 319 504 l gs col0 s gr gr % arrowhead n 309 502 m 317 504 l 309 506 l col0 s % Polyline gs clippath 309 512 m 317 514 l 309 516 l 320 516 l 320 512 l cp clip n 259 589 m 279 589 l 279 514 l 319 514 l gs col0 s gr gr % arrowhead n 309 512 m 317 514 l 309 516 l col0 s % Polyline gs clippath 409 482 m 417 484 l 409 486 l 420 486 l 420 482 l cp clip n 359 484 m 419 484 l gs col0 s gr gr % arrowhead n 409 482 m 417 484 l 409 486 l col0 s % Polyline n 259 404 m 259 354 l 219 354 l 219 404 l cp gs col0 s gr % Polyline n 259 544 m 259 494 l 219 494 l 219 544 l cp gs col0 s gr % Polyline n 259 474 m 259 424 l 219 424 l 219 474 l cp gs col0 s gr % Polyline n 259 614 m 259 564 l 219 564 l 219 614 l cp gs col0 s gr % Polyline n 359 524 m 359 444 l 319 444 l 319 524 l cp gs col0 s gr % Polyline gs clippath 209 532 m 217 534 l 209 536 l 220 536 l 220 532 l cp clip n 199 604 m 199 534 l 219 534 l gs col0 s gr gr % arrowhead n 209 532 m 217 534 l 209 536 l col0 s % Polyline gs clippath 209 442 m 217 444 l 209 446 l 220 446 l 220 442 l cp clip n 169 604 m 169 464 l 169 444 l 219 444 l gs col0 s gr gr % arrowhead n 209 442 m 217 444 l 209 446 l col0 s % Polyline gs clippath 209 372 m 217 374 l 209 376 l 220 376 l 220 372 l cp clip n 169 444 m 169 384 l 169 374 l 219 374 l gs col0 s gr gr % arrowhead n 209 372 m 217 374 l 209 376 l col0 s % Polyline gs clippath 209 462 m 217 464 l 209 466 l 220 466 l 220 462 l cp clip n 149 464 m 219 464 l gs col0 s gr gr % arrowhead n 209 462 m 217 464 l 209 466 l col0 s % Polyline gs clippath 209 382 m 217 384 l 209 386 l 220 386 l 220 382 l cp clip n 79 524 m 79 479 l 114 479 l 114 384 l 219 384 l gs col0 s gr gr % arrowhead n 209 382 m 217 384 l 209 386 l col0 s % Polyline gs clippath 209 432 m 217 434 l 209 436 l 220 436 l 220 432 l cp clip n 114 434 m 219 434 l gs col0 s gr gr % arrowhead n 209 432 m 217 434 l 209 436 l col0 s % Ellipse n 74 49 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 74 209 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 54 309 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 55 149 2 2 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline n 139 79 m 139 39 l 99 39 l 99 79 l cp gs col0 s gr % Polyline n 139 159 m 139 119 l 99 119 l 99 159 l cp gs col0 s gr % Polyline n 259 119 m 259 79 l 219 79 l 219 119 l cp gs col0 s gr % Polyline n 139 239 m 139 199 l 99 199 l 99 239 l cp gs col0 s gr % Polyline n 139 319 m 139 279 l 99 279 l 99 319 l cp gs col0 s gr % Polyline n 259 279 m 259 239 l 219 239 l 219 279 l cp gs col0 s gr % Polyline n 359 199 m 359 159 l 319 159 l 319 199 l cp gs col0 s gr % Polyline gs clippath 89 47 m 97 49 l 89 51 l 100 51 l 100 47 l cp clip n 39 49 m 99 49 l gs col0 s gr gr % arrowhead n 89 47 m 97 49 l 89 51 l col0 s % Polyline gs clippath 89 147 m 97 149 l 89 151 l 100 151 l 100 147 l cp clip n 39 149 m 99 149 l gs col0 s gr gr % arrowhead n 89 147 m 97 149 l 89 151 l col0 s % Polyline gs clippath 89 207 m 97 209 l 89 211 l 100 211 l 100 207 l cp clip n 39 209 m 99 209 l gs col0 s gr gr % arrowhead n 89 207 m 97 209 l 89 211 l col0 s % Polyline gs clippath 89 307 m 97 309 l 89 311 l 100 311 l 100 307 l cp clip n 39 309 m 99 309 l gs col0 s gr gr % arrowhead n 89 307 m 97 309 l 89 311 l col0 s % Polyline gs clippath 209 87 m 217 89 l 209 91 l 220 91 l 220 87 l cp clip n 139 59 m 179 59 l 179 89 l 219 89 l gs col0 s gr gr % arrowhead n 209 87 m 217 89 l 209 91 l col0 s % Polyline gs clippath 209 107 m 217 109 l 209 111 l 220 111 l 220 107 l cp clip n 139 139 m 179 139 l 179 109 l 219 109 l gs col0 s gr gr % arrowhead n 209 107 m 217 109 l 209 111 l col0 s % Polyline gs clippath 209 247 m 217 249 l 209 251 l 220 251 l 220 247 l cp clip n 139 219 m 179 219 l 179 249 l 219 249 l gs col0 s gr gr % arrowhead n 209 247 m 217 249 l 209 251 l col0 s % Polyline gs clippath 209 267 m 217 269 l 209 271 l 220 271 l 220 267 l cp clip n 139 299 m 179 299 l 179 269 l 219 269 l gs col0 s gr gr % arrowhead n 209 267 m 217 269 l 209 271 l col0 s % Polyline gs clippath 309 167 m 317 169 l 309 171 l 320 171 l 320 167 l cp clip n 259 99 m 289 99 l 289 169 l 319 169 l gs col0 s gr gr % arrowhead n 309 167 m 317 169 l 309 171 l col0 s % Polyline gs clippath 309 187 m 317 189 l 309 191 l 320 191 l 320 187 l cp clip n 259 259 m 289 259 l 289 189 l 319 189 l gs col0 s gr gr % arrowhead n 309 187 m 317 189 l 309 191 l col0 s % Polyline gs clippath 389 177 m 397 179 l 389 181 l 400 181 l 400 177 l cp clip n 359 179 m 399 179 l gs col0 s gr gr % arrowhead n 389 177 m 397 179 l 389 181 l col0 s % Polyline gs clippath 89 127 m 97 129 l 89 131 l 100 131 l 100 127 l cp clip n 74 49 m 74 129 l 99 129 l gs col0 s gr gr % arrowhead n 89 127 m 97 129 l 89 131 l col0 s % Polyline gs clippath 89 67 m 97 69 l 89 71 l 100 71 l 100 67 l cp clip n 54 149 m 54 69 l 99 69 l gs col0 s gr gr % arrowhead n 89 67 m 97 69 l 89 71 l col0 s % Polyline gs clippath 89 287 m 97 289 l 89 291 l 100 291 l 100 287 l cp clip n 74 209 m 74 289 l 99 289 l gs col0 s gr gr % arrowhead n 89 287 m 97 289 l 89 291 l col0 s % Polyline gs clippath 89 227 m 97 229 l 89 231 l 100 231 l 100 227 l cp clip n 54 309 m 54 229 l 99 229 l gs col0 s gr gr % arrowhead n 89 227 m 97 229 l 89 231 l col0 s $F2psEnd rs %%EndDocument @endspecial 1138 2890 a gsave 0 0 0 setrgbcolor 1138 2890 a Fc(:)1218 2890 y grestore 1218 2890 a 1138 3070 a gsave 0 0 0 setrgbcolor 1138 3070 a Fc(:)1218 3070 y grestore 1218 3070 a 1258 3490 a gsave 0 0 0 setrgbcolor 1258 3490 a Fc(:)1338 3490 y grestore 1338 3490 a 2038 3490 a gsave 0 0 0 setrgbcolor 2038 3490 a Fc(^)2118 3490 y grestore 2118 3490 a 2038 3910 a gsave 0 0 0 setrgbcolor 2038 3910 a Fc(^)2118 3910 y grestore 2118 3910 a 2038 3070 a gsave 0 0 0 setrgbcolor 2038 3070 a Fc(^)2118 3070 y grestore 2118 3070 a 2038 2620 a gsave 0 0 0 setrgbcolor 2038 2620 a Fc(^)2118 2620 y grestore 2118 2620 a 2638 3280 a gsave 0 0 0 setrgbcolor 2638 3280 a Fc(_)2718 3280 y grestore 2718 3280 a 736 2560 a gsave 0 0 0 setrgbcolor 736 2560 a Fq(x)803 2577 y Fr(1)848 2560 y grestore 848 2560 a 736 3520 a gsave 0 0 0 setrgbcolor 736 3520 a Fq(x)803 3537 y Fr(2)848 3520 y grestore 848 3520 a 746 4000 a gsave 0 0 0 setrgbcolor 746 4000 a Fq(y)803 4017 y Fr(2)848 4000 y grestore 848 4000 a 746 2710 a gsave 0 0 0 setrgbcolor 746 2710 a Fq(y)803 2727 y Fr(1)848 2710 y grestore 848 2710 a 3188 3280 a gsave 0 0 0 setrgbcolor 3188 3280 a Fq(b)3238 3280 y grestore 3238 3280 a 736 670 a gsave 0 0 0 setrgbcolor 736 670 a Fq(x)803 687 y Fr(1)848 670 y grestore 848 670 a 746 1270 a gsave 0 0 0 setrgbcolor 746 1270 a Fq(y)803 1287 y Fr(1)848 1270 y grestore 848 1270 a 736 1630 a gsave 0 0 0 setrgbcolor 736 1630 a Fq(x)803 1647 y Fr(2)848 1630 y grestore 848 1630 a 746 2230 a gsave 0 0 0 setrgbcolor 746 2230 a Fq(y)803 2247 y Fr(2)848 2230 y grestore 848 2230 a 3068 1420 a gsave 0 0 0 setrgbcolor 3068 1420 a Fq(a)3129 1420 y grestore 3129 1420 a 1318 730 a gsave 0 0 0 setrgbcolor 1318 730 a Fc(^)1398 730 y grestore 1398 730 a 1274 1210 a gsave 0 0 0 setrgbcolor 1274 1210 a FL(nor)1444 1210 y grestore 1444 1210 a 1318 1690 a gsave 0 0 0 setrgbcolor 1318 1690 a Fc(^)1398 1690 y grestore 1398 1690 a 1274 2170 a gsave 0 0 0 setrgbcolor 1274 2170 a FL(nor)1444 2170 y grestore 1444 2170 a 2038 970 a gsave 0 0 0 setrgbcolor 2038 970 a Fc(_)2118 970 y grestore 2118 970 a 2038 1930 a gsave 0 0 0 setrgbcolor 2038 1930 a Fc(_)2118 1930 y grestore 2118 1930 a 2638 1450 a gsave 0 0 0 setrgbcolor 2638 1450 a Fc(^)2718 1450 y grestore 2718 1450 a 951 4335 a FK(Figure)31 b(19:)43 b(Tw)m(o)34 b(circuits)e(used)h(in)f(exercise)i(6.3)p eop %%Page: 31 32 31 31 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) 2039 b FK(31)1059 1102 y @beginspecial 0 @llx 0 @lly 198 @urx 166 @ury 1980 @rwi @setspecial %%BeginDocument: ring.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -48.0 180.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 438 m 0 0 l 585 0 l 585 438 l cp clip 0.45000 0.45000 sc 1.000 slw % Rotated Ellipse gs 434 214 tr -269.978 rot n 0 0 40 40 0 360 DrawEllipse gs col-1 s gr gr % Polyline n 474 214 m 494 214 l gs col-1 s gr % Polyline n 434 134 m 434 174 l gs col-1 s gr % Polyline n 434 254 m 434 294 l gs col-1 s gr % Ellipse n 324 119 40 40 0 360 DrawEllipse gs col-1 s gr % Rotated Ellipse gs 324 309 tr -180.023 rot n 0 0 40 40 0 360 DrawEllipse gs col-1 s gr gr % Rotated Ellipse gs 214 214 tr -90.012 rot n 0 0 40 40 0 360 DrawEllipse gs col-1 s gr gr % Polyline n 324 79 m 324 59 l gs col-1 s gr % Polyline n 244 119 m 284 119 l gs col-1 s gr % Polyline n 364 119 m 404 119 l gs col-1 s gr % Polyline n 324 349 m 324 369 l gs col-1 s gr % Polyline n 404 309 m 364 309 l gs col-1 s gr % Polyline n 284 309 m 244 309 l gs col-1 s gr % Polyline n 174 214 m 154 214 l gs col-1 s gr % Polyline n 214 294 m 214 254 l gs col-1 s gr % Polyline n 214 174 m 214 134 l gs col-1 s gr $F2psEnd rs %%EndDocument @endspecial 2592 449 a Fb(t)2620 457 y Fx(2)2246 431 y Fb(h)2290 439 y Fx(2)1842 -207 y Fb(t)1870 -199 y Fx(1)1426 74 y Fb(c)1459 82 y Fx(1)2251 787 y Fb(c)2284 795 y Fx(3)1842 1087 y Fb(t)1870 1095 y Fx(3)1110 431 y Fb(t)1138 439 y Fx(4)1833 93 y Fb(h)1877 101 y Fx(1)1833 806 y Fb(h)1877 814 y Fx(3)1421 449 y Fb(h)1465 457 y Fx(4)2251 74 y Fb(c)2284 82 y Fx(2)1426 787 y Fb(c)1459 795 y Fx(4)-9 1413 y FK(Figure)30 b(20:)42 b(Milner's)31 b(Sc)m(heduler)h(with)f(4)g (cyclers.)44 b(The)32 b(tok)m(en)g(is)f(passed)i(clo)s(c)m(kwise)e (from)f FC(c)3500 1428 y FB(1)3571 1413 y FK(to)h FC(c)3731 1428 y FB(2)-9 1534 y FK(to)h FC(c)152 1549 y FB(3)224 1534 y FK(to)g FC(c)385 1549 y FB(4)457 1534 y FK(and)h(bac)m(k)g(to)f FC(c)1035 1549 y FB(1)-9 1814 y FH(7)161 b(V)-13 b(eri\014cation)53 b(with)h(R)l(OBDDs)-9 2033 y FK(One)27 b(of)g(the)g(ma)5 b(jor)26 b(uses)j(of)e(R)m(OBDDs)f(is)h(in)f FD(formal)j(veri\014c)-5 b(ation)p FK(.)41 b(In)27 b(formal)e(v)m(eri\014cation)i(a)g(mo)s(del) -9 2154 y(of)i(a)h(system)h FC(M)41 b FK(is)30 b(giv)m(en)g(together)h (with)f(some)g(prop)s(erties)g FC(P)44 b FK(supp)s(osed)31 b(to)f(hold)g(for)f(the)i(system.)-9 2274 y(The)d(task)g(is)e(to)h (determine)g(whether)i(indeed)e FC(M)38 b FK(satisfy)27 b FC(P)14 b FK(.)41 b(The)29 b(approac)m(h)e(w)m(e)i(tak)m(e,)g(in)d (whic)m(h)i(w)m(e)-9 2394 y(shall)i(use)j(an)f(algorithm)d(to)i(answ)m (er)j(the)e(satisfaction)f(problem,)g(is)g(often)h(called)f FD(mo)-5 b(del)33 b(che)-5 b(cking)p FK(.)137 2515 y(W)d(e)39 b(shall)e(lo)s(ok)g(at)h(a)g(concrete)i(example)e(called)f FD(Milner's)j(Sche)-5 b(duler)49 b FK(\(tak)m(en)39 b(from)e(Milner's) -9 2635 y(b)s(o)s(ok)j([Mil89)o(]\).)70 b(The)42 b(mo)s(del)e(consists) i(of)e FC(N)52 b FD(cyclers)p FK(,)44 b(connected)f(in)d(a)h(ring,)i (that)e(co-op)s(erates)-9 2755 y(on)h(starting)f(and)h(detecting)h (termination)c(of)j FC(N)53 b FK(tasks)43 b(that)f(are)g(not)g(further) h(describ)s(ed.)73 b(The)-9 2876 y(sc)m(heduler)47 b(m)m(ust)f(mak)m(e) g(sure)h(that)e(the)i FC(N)56 b FK(tasks)47 b(are)f(alw)m(a)m(ys)g (started)h(in)e(order)h(but)g(they)h(are)-9 2996 y(allo)m(w)m(ed)33 b(to)g(terminate)f(in)h(an)m(y)i(order.)47 b(This)33 b(is)h(one)g(of)f(the)h(prop)s(erties)g(that)f(has)h(to)f(b)s(e)h(sho)m (wn)h(to)-9 3117 y(hold)h(for)i(the)g(mo)s(del.)57 b(The)39 b(cyclers)g(try)f(to)f(ful\014ll)e(this)i(b)m(y)i(passing)f(a)f(tok)m (en:)55 b(the)38 b(holder)f(of)h(the)-9 3237 y(tok)m(en)33 b(is)f(the)h(only)f(pro)s(cess)i(allo)m(w)m(ed)e(to)g(start)h(its)f (task.)137 3357 y(All)f(cyclers)i(are)g(similar)c(except)34 b(that)f(one)g(of)f(them)g(has)h(the)g(tok)m(en)h(in)d(the)i(initial)c (state.)44 b(The)-9 3478 y(cyclers)32 b FD(cyc)444 3493 y FA(i)472 3478 y FK(,)g(1)27 b FI(\024)h FC(i)g FI(\024)g FC(N)42 b FK(are)32 b(describ)s(ed)g(in)e(a)h(state-based)i(fashion)d (as)i(small)d(transition)h(systems)-9 3598 y(o)m(v)m(er)i(the)f(Bo)s (olean)e(v)-5 b(ariables)30 b FC(t)1175 3613 y FA(i)1203 3598 y FC(;)17 b(h)1303 3613 y FA(i)1331 3598 y FK(,)32 b(and)f FC(c)1620 3613 y FA(i)1648 3598 y FK(.)43 b(The)32 b(v)-5 b(ariable)29 b FC(t)2316 3613 y FA(i)2375 3598 y FK(is)h(1)h(when)h(task)f FC(i)h FK(is)e(running)g(and)h(0)-9 3719 y(when)k(it)e(is)h(terminated;)g FC(h)1030 3734 y FA(i)1093 3719 y FK(is)f(1)h(when)i(cycler)f FC(i)f FK(has)h(a)f(tok)m(en,)h(0)f(otherwise;)i FC(c)3022 3734 y FA(i)3084 3719 y FK(is)e(1)g(when)h(cycler)-9 3839 y FC(i)25 b FI(\000)g FK(1)36 b(has)h(put)f(do)m(wn)h(the)g(tok)m(en)g (and)g(cycler)g FC(i)f FK(not)g(y)m(et)i(pic)m(k)m(ed)f(it)f(up.)55 b(Hence)38 b(a)e(cycler)g(starts)h(a)-9 3959 y(task)28 b(b)m(y)h(c)m(hanging)e FC(t)765 3974 y FA(i)822 3959 y FK(from)f(0)i(to)g(1,)g(and)g(detects)i(its)d(termination)f(when)j FC(t)2798 3974 y FA(i)2854 3959 y FK(is)e(again)g(c)m(hanged)i(bac)m(k) -9 4080 y(to)j(0;)i(and)f(it)f(pic)m(ks)i(up)g(the)f(tok)m(en)h(b)m(y)g (c)m(hanging)f FC(c)1917 4095 y FA(i)1978 4080 y FK(from)f(1)h(to)g(0)g (and)g(puts)h(it)e(do)m(wn)i(b)m(y)g(c)m(hanging)-9 4200 y FC(c)33 4215 y FA(i)p FB(+1)183 4200 y FK(from)e(0)g(to)g(1.)43 b(The)34 b(b)s(eha)m(viour)f(of)f(cycler)h FC(i)g FK(is)f(describ)s(ed) h(b)m(y)g(t)m(w)m(o)h(transitions:)901 4398 y FF(if)e FC(c)1041 4413 y FA(i)1097 4398 y FK(=)c(1)54 b FI(^)h FC(t)1460 4413 y FA(i)1516 4398 y FK(=)28 b(0)k FF(then)38 b FC(t)1993 4413 y FA(i)2021 4398 y FC(;)17 b(c)2107 4413 y FA(i)2135 4398 y FC(;)g(h)2235 4413 y FA(i)2300 4398 y FF(:=)38 b FK(1)p FC(;)17 b FK(0)p FC(;)g FK(1)901 4518 y FF(if)32 b FC(h)1055 4533 y FA(i)1111 4518 y FK(=)c(1)437 b FF(then)38 b FC(c)2000 4533 y FB(\()p FA(i)23 b Fa(mo)r(d)g FA(N)7 b FB(\)+1)2414 4518 y FC(;)17 b(h)2514 4533 y FA(i)2580 4518 y FF(:=)37 b FK(1)p FC(;)17 b FK(0)-9 4715 y(The)39 b(meaning)e(of)i(a)f(transition)f(\\)p FF(if)h FD(c)-5 b(ondition)38 b FF(then)g FD(assignment)p FK(")g(is)g(that,)i(if)d(the)i FD(c)-5 b(ondition)46 b FK(is)-9 4835 y(true)37 b(in)f(some)h(state,)i(then)e(the)h(system)g (can)f(ev)m(olv)m(e)h(to)e(a)h(new)h(state)f(p)s(erforming)e(the)j (\(parallel\))-9 4955 y FD(assignment)p FK(.)79 b(Hence,)50 b(if)44 b(the)i(system)g(is)f(in)f(a)h(state)g(where)i FC(c)2440 4970 y FA(i)2513 4955 y FK(is)e(1)g(and)g FC(t)2955 4970 y FA(i)3028 4955 y FK(is)g(0)g(then)h(w)m(e)g(can)-9 5076 y(sim)m(ultaneously)31 b(set)i FC(t)840 5091 y FA(i)901 5076 y FK(to)f(1,)h FC(c)1171 5091 y FA(i)1231 5076 y FK(to)g(0)f(and)h FC(h)1678 5091 y FA(i)1738 5076 y FK(to)g(1.)p eop %%Page: 32 33 32 32 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) 2039 b FK(32)137 -171 y(The)28 b(transitions)e(are)i(enco)s(ded)g(b)m (y)g(a)f(single)g(predicate)g(o)m(v)m(er)i(the)e(v)-5 b(alue)27 b(of)g(the)h(v)-5 b(ariables)26 b(b)s(efore)-9 -51 y(the)41 b(transitions)e(\(the)i FD(pr)-5 b(e-state)p FK(\))40 b(and)h(the)g(v)-5 b(alues)40 b(after)h(the)g(transition)e (\(the)i FD(p)-5 b(ost-state)p FK(\).)67 b(The)-9 70 y(v)-5 b(ariables)27 b(in)i(the)g(pre-state)h(are)f(the)g FC(t)1428 85 y FA(i)1457 70 y FC(;)17 b(h)1557 85 y FA(i)1585 70 y FC(;)g(c)1671 85 y FA(i)1699 70 y FC(;)g FK(1)27 b FI(\024)h FC(i)g FI(\024)g FC(N)40 b FK(whic)m(h)29 b(w)m(e)h(shall)e(collectiv)m(ely)g(refer)h(to)g(as)-11 190 y FC(~)-47 b(x)33 b FK(and)f(in)g(the)h(p)s(ost-state)g FC(t)1039 154 y Fy(0)1039 215 y FA(i)1068 190 y FC(;)17 b(h)1168 154 y Fy(0)1168 215 y FA(i)1196 190 y FC(;)g(c)1282 154 y Fy(0)1282 215 y FA(i)1309 190 y FC(;)g FK(1)28 b FI(\024)g FC(i)g FI(\024)h FC(N)10 b FK(,)33 b(whic)m(h)g(w)m(e)h (shall)d(refer)i(to)g(as)e FC(~)-47 b(x)3021 154 y Fy(0)3044 190 y FK(.)44 b(Eac)m(h)34 b(transition)-9 310 y(is)j(an)i(atomic)d (action)i(that)g(excludes)i(an)m(y)f(other)f(action.)60 b(Therefore)40 b(in)d(the)i(enco)s(ding)f(w)m(e)h(shall)-9 431 y(often)31 b(ha)m(v)m(e)i(to)f(sa)m(y)g(that)g(a)f(lot)f(of)i(v)-5 b(ariables)30 b(are)i(unc)m(hanged.)44 b(Assume)33 b(that)e FC(S)38 b FK(is)31 b(a)g(subset)i(of)f(the)-9 551 y(unprimed)f(v)-5 b(ariables)30 b FC(~)-47 b(x)p FK(.)43 b(W)-8 b(e)33 b(shall)e(use)j(a)e(predicate)g FD(unchange)-5 b(d)2469 566 y FA(S)2551 551 y FK(o)m(v)m(er)32 b FC(~)-47 b(x;)15 b(~)-47 b(x)2914 515 y Fy(0)2970 551 y FK(whic)m(h)33 b(ensures)h(that)-9 672 y(all)c(v)-5 b(ariables)31 b(in)h FC(S)38 b FK(are)33 b(unc)m(hanged.)45 b(It)33 b(is)f(de\014ned)i(as)f (follo)m(ws:)1265 904 y FD(unchange)-5 b(d)1706 927 y FA(S)1817 904 y FK(=)1893 919 y Fx(def)2048 809 y Fv(^)2037 1020 y FA(x)p Fy(2)p FA(S)2187 904 y FC(x)28 b FK(=)f FC(x)2428 862 y Fy(0)2469 904 y FC(:)-9 1212 y FK(It)48 b(is)f(sligh)m(tly)g(more)g(con)m(v)m(enien)m(t)j(to)e(use)h(the)f (predicate)h FD(assigne)-5 b(d)2629 1235 y FA(S)2676 1216 y Fd(0)2756 1212 y FK(=)54 b FD(unchange)-5 b(d)3326 1235 y FA(~)-34 b(x)p Fy(n)p FA(S)3449 1216 y Fd(0)3523 1212 y FK(whic)m(h)-9 1332 y(express)32 b(that)e(ev)m(ery)i(v)-5 b(ariable)29 b FD(not)40 b FK(in)29 b FC(S)1510 1296 y Fy(0)1564 1332 y FK(is)g(unc)m(hanged.)45 b(W)-8 b(e)30 b(can)h(no)m(w)g(de\014ne)h FC(P)3068 1347 y FA(i)3096 1332 y FK(,)e(the)h(transitions)-9 1452 y(of)h(cycler)h FC(i)g FK(o)m(v)m(er)g(the)g(v)-5 b(ariables)30 b FC(~)-48 b(x)q(;)1334 1430 y(~)1327 1452 y(x)1382 1424 y Fy(0)1438 1452 y FK(as)33 b(follo)m(ws:)475 1672 y FC(P)538 1687 y FA(i)626 1672 y FK(=)702 1687 y Fx(def)1037 1672 y FK(\()p FC(c)1117 1687 y FA(i)1167 1672 y FI(^)23 b(:)p FC(t)1357 1687 y FA(i)1408 1672 y FI(^)f FC(t)1531 1636 y Fy(0)1531 1697 y FA(i)1582 1672 y FI(^)h(:)p FC(c)1779 1636 y Fy(0)1779 1697 y FA(i)1829 1672 y FI(^)g FC(h)1974 1636 y Fy(0)1974 1697 y FA(i)2215 1672 y FI(^)g FD(assigne)-5 b(d)2653 1696 y Fy(f)p FA(c)2719 1706 y Fw(i)2745 1696 y FA(;t)2790 1706 y Fw(i)2816 1696 y FA(;h)2877 1706 y Fw(i)2903 1696 y Fy(g)2942 1672 y FK(\))888 1797 y FI(_)83 b FK(\()p FC(h)1131 1812 y FA(i)1182 1797 y FI(^)248 b FC(c)1538 1761 y Fy(0)1538 1826 y FB(\()p FA(i)22 b Fx(mo)r(d)e FA(N)7 b FB(\)+1)1954 1797 y FI(^)22 b(:)p FC(h)2164 1761 y Fy(0)2164 1821 y FA(i)2215 1797 y FI(^)h FD(assigne)-5 b(d)2653 1820 y Fy(f)p FA(c)2719 1834 y Fx(\()p Fw(i)20 b Fx(mo)r(d)h Fw(N)5 b Fx(\)+1)3080 1820 y FA(;h)3141 1830 y Fw(i)3167 1820 y Fy(g)3206 1797 y FK(\))-9 2024 y(The)45 b(signalling)d(of)i(termination)f(of)h(task)h FC(i)p FK(,)k(b)m(y)c(c)m(hanging)g FC(t)2374 2039 y FA(i)2447 2024 y FK(from)f(1)g(to)h(0)f(p)s(erformed)h(b)m(y)h(the)-9 2145 y(en)m(vironmen)m(t)32 b(is)h(mo)s(deled)e(b)m(y)j FC(N)43 b FK(transitions)31 b FC(E)1849 2160 y FA(i)1877 2145 y FC(;)17 b FK(1)28 b FI(\024)g FC(i)g FI(\024)g FC(N)10 b FK(:)1231 2365 y FC(E)1303 2380 y FA(i)1392 2365 y FK(=)1468 2380 y Fx(def)1612 2365 y FC(t)1647 2380 y FA(i)1698 2365 y FI(^)22 b(:)p FC(t)1887 2324 y Fy(0)1887 2389 y FA(i)1938 2365 y FI(^)h FD(assigne)-5 b(d)2376 2388 y Fy(f)p FA(t)2436 2398 y Fw(i)2463 2388 y Fy(g)2502 2365 y FC(;)-9 2585 y FK(expressing)34 b(the)f(transitions) f FF(if)g FC(t)1246 2600 y FA(i)1303 2585 y FK(=)c(1)k FF(then)h FC(t)1775 2600 y FA(i)1832 2585 y FK(:=)28 b(0.)44 b(No)m(w,)34 b(at)f(an)m(y)g(giv)m(en)g(state)h(the)f(system)h (can)-9 2705 y(p)s(erform)27 b(one)i(of)g(the)g(transitions)f(from)f (one)j(of)e(the)h FC(P)2018 2720 y FA(i)2046 2705 y FK('s)h(or)e(the)h FC(E)2492 2720 y FA(i)2521 2705 y FK('s,)h(i.e.,)f(all)e(p)s(ossible)h (transitions)-9 2825 y(are)k(giv)m(en)h(b)m(y)g(the)g(predicate)g FC(T)14 b FK(:)1068 3046 y FC(T)74 b FK(=)1275 3061 y Fx(def)1420 3046 y FC(P)1483 3061 y FB(1)1544 3046 y FI(_)23 b(\001)17 b(\001)g(\001)j(_)j FC(P)1923 3061 y FA(n)1991 3046 y FI(_)g FC(E)2152 3061 y FB(1)2214 3046 y FI(_)f(\001)17 b(\001)g(\001)k(_)h FC(E)2601 3061 y FA(n)2665 3046 y FC(:)-9 3266 y FK(In)34 b(the)h(initial)c(state)j(w) m(e)i(assume)f(that)f(all)e(tasks)k(are)e(stopp)s(ed,)i(no)e(cycler)h (has)g(a)f(tok)m(en)h(and)g(only)-9 3386 y(place)f(1)h(\()p FC(c)406 3401 y FB(1)445 3386 y FK(\))g(has)g(a)f(tok)m(en.)51 b(Hence)36 b(the)g(initial)31 b(state)k(can)g(b)s(e)g(c)m(haracterized) g(b)m(y)h(the)f(predicate)g FC(I)-9 3506 y FK(o)m(v)m(er)e(the)g (unprimed)f(v)-5 b(ariables)30 b FC(~)-48 b(x)33 b FK(giv)m(en)g(b)m (y:)1043 3726 y FC(I)68 b FK(=)1230 3741 y Fx(def)1375 3726 y FI(:)1435 3708 y FC(~)1441 3726 y(t)22 b FI(^)h(:)1646 3700 y FC(~)1653 3726 y(h)g FI(^)f FC(c)1862 3741 y FB(1)1924 3726 y FI(^)g(:)p FC(c)2120 3741 y FB(2)2182 3726 y FI(^)h(\001)17 b(\001)g(\001)j(^)j(:)p FC(c)2606 3741 y FA(N)2690 3726 y FC(:)-9 3946 y FK(\(Here)34 b FI(:)g FK(applied)e(to)i(a)f(v)m(ector) 1192 3928 y FC(~)1199 3946 y(t)g FK(means)h(the)g(conjunction)g(of)f FI(:)h FK(applied)e(to)h(eac)m(h)i(co)s(ordinate)e FC(t)3677 3961 y FA(i)3705 3946 y FK(.\))-9 4067 y(The)g(predicates)g(describing) f(Milner's)h(Sc)m(heduler)g(are)g(summarized)e(in)h(\014gure)h(21.)137 4187 y(Within)e(this)h(setup)i(w)m(e)g(could)e(start)g(asking)h(a)f (lot)f(of)h(questions.)45 b(F)-8 b(or)32 b(example,)110 4390 y(1.)48 b(Can)39 b(w)m(e)f(\014nd)h(a)e(predicate)h FC(R)h FK(o)m(v)m(er)g(the)f(unprimed)f(v)-5 b(ariables)36 b(c)m(haracterizing)h(exactly)i(the)234 4511 y(states)34 b(that)e(can)h(b)s(e)g(reac)m(hed)h(from)d FC(I)8 b FK(?)43 b FC(R)34 b FK(is)e(called)g(the)h(set)g(of)f FD(r)-5 b(e)g(achable)34 b(states)p FK(.)110 4714 y(2.)48 b(Ho)m(w)34 b(man)m(y)e(reac)m(hable)h(states)g(are)g(there?)110 4918 y(3.)48 b(Is)34 b(it)d(the)i(case)h(that)e(in)g(all)e(reac)m (hable)j(states)h(only)e(one)h(tok)m(en)g(is)f(presen)m(t?)110 5121 y(4.)48 b(Is)34 b(task)f FC(t)585 5136 y FA(i)646 5121 y FK(alw)m(a)m(ys)g(only)f(started)h(after)f FC(t)1768 5136 y FA(i)p Fy(\000)p FB(1)1887 5121 y FK(?)p eop %%Page: 33 34 33 33 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) 2039 b FK(33)p -9 -267 3836 4 v -9 879 4 1146 v 413 -50 a FD(unchange)-5 b(d)853 -27 y FA(S)987 -50 y FK(=)1063 -35 y Fx(def)1230 -125 y Fv(V)1313 -21 y FA(x)p Fy(2)p FA(S)1467 -50 y FC(x)29 b FK(=)e FC(x)1709 -86 y Fy(0)413 70 y FD(assigne)-5 b(d)761 94 y FA(S)808 75 y Fd(0)987 70 y FK(=)1063 85 y Fx(def)1230 70 y FD(unchange)g(d)1670 94 y FA(~)-34 b(x)p Fy(n)p FA(S)1793 75 y Fd(0)413 195 y FC(P)476 210 y FA(i)987 195 y FK(=)1063 210 y Fx(def)1329 195 y FK(\()p FC(c)1409 210 y FA(i)1459 195 y FI(^)23 b(:)p FC(t)1649 210 y FA(i)1700 195 y FI(^)f FC(t)1823 158 y Fy(0)1823 219 y FA(i)1874 195 y FI(^)h(:)p FC(c)2071 158 y Fy(0)2071 219 y FA(i)2121 195 y FI(^)g FC(h)2266 158 y Fy(0)2266 219 y FA(i)2316 195 y FI(^)159 b FD(assigne)-5 b(d)2890 218 y FA(c)2921 228 y Fw(i)2947 218 y FA(;t)2992 228 y Fw(i)3018 218 y FA(;h)3079 228 y Fw(i)3109 195 y FK(\))1230 315 y FI(_)33 b FK(\()p FC(h)1423 330 y FA(i)1474 315 y FI(^)248 b FC(c)1830 279 y Fy(0)1830 340 y FA(i)21 b Fx(mo)r(d)g FA(N)7 b FB(+1)2191 315 y FI(^)23 b(:)p FC(h)2402 279 y Fy(0)2402 340 y FA(i)2453 315 y FI(^)f FD(assigne)-5 b(d)2890 339 y FA(c)2921 351 y Fw(i)20 b Fx(mo)r(d)h Fw(N)5 b Fx(+1)3234 339 y FA(;h)3295 349 y Fw(i)3325 315 y FK(\))413 442 y FC(E)485 457 y FA(i)987 442 y FK(=)1063 457 y Fx(def)1230 442 y FC(t)1265 457 y FA(i)1316 442 y FI(^)22 b(:)p FC(t)1505 406 y Fy(0)1505 466 y FA(i)1556 442 y FI(^)h FD(assigne)-5 b(d)1994 465 y FA(t)2019 475 y Fw(i)413 582 y FC(T)517 b FK(=)1063 597 y Fx(def)1291 488 y Fv(_)1230 699 y FB(1)p Fy(\024)p FA(i)p Fy(\024)p FA(N)1479 582 y FC(P)1542 597 y FA(i)1592 582 y FI(_)23 b FC(E)1753 597 y FA(i)413 818 y FC(I)531 b FK(=)1063 833 y Fx(def)1230 818 y FI(:)1290 799 y FC(~)1296 818 y(t)23 b FI(^)g(:)1502 791 y FC(~)1509 818 y(h)f FI(^)h FC(c)1718 833 y FB(1)1779 818 y FI(^)g(:)p FC(c)1976 833 y FB(2)2038 818 y FI(^)g(\001)17 b(\001)g(\001)j(^)i(:)p FC(c)2461 833 y FA(N)p 3823 879 V -9 882 3836 4 v -9 1042 a FK(Figure)33 b(21:)45 b(Milner's)34 b(Sc)m(heduler)h(as)f (describ)s(ed)h(b)m(y)g(the)g(transition)d(predicate)i FC(T)48 b FK(and)34 b(the)g(initial-)-9 1163 y(state)f(predicate)f FC(I)8 b FK(.)110 1422 y(5.)48 b(Do)s(es)28 b(Milner's)g(Sc)m(heduler)i (p)s(ossess)g(a)e(deadlo)s(c)m(k?)42 b(I.e.,)30 b(is)e(there)h(a)f (reac)m(hable)g(state)h(in)e(whic)m(h)234 1542 y(no)33 b(transitions)e(can)i(b)s(e)g(tak)m(en?)-9 1706 y(T)-8 b(o)40 b(answ)m(er)j(these)f(questions)g(w)m(e)g(\014rst)f(ha)m(v)m(e)h (to)f(compute)g FC(R)q FK(.)68 b(In)m(tuitiv)m(ely)-8 b(,)43 b FC(R)f FK(m)m(ust)f(b)s(e)g(the)g(set)-9 1826 y(of)34 b(states)i(that)f(either)h(satisfy)f FC(I)43 b FK(\(are)35 b(initial\))c(or)k(within)f(a)h(\014nite)g(n)m(um)m(b)s (er)h(of)f FC(T)49 b FK(transitions)34 b(can)-9 1947 y(b)s(e)e(reac)m(hed)h(from)e FC(I)8 b FK(.)43 b(This)32 b(suggest)h(an)f(iterativ)m(e)f(algorithm)e(for)j(computing)f FC(R)i FK(as)f(an)g(increasing)-9 2067 y(c)m(hain)h(of)h(appro)m (ximations)e FC(R)1127 2031 y FB(0)1167 2067 y FC(;)17 b(R)1286 2031 y FB(1)1325 2067 y FC(;)g(:)g(:)g(:)f(;)h(R)1619 2031 y FA(k)1661 2067 y FC(;)g(:)g(:)g(:)33 b FK(Step)i FC(k)i FK(of)c(the)i(algorithm)30 b(\014nd)35 b(states)g(that)e(with)-9 2188 y(less)c(than)h FC(k)j FK(transitions)28 b(can)i(b)s(e)g(reac)m (hed)g(from)f FC(I)8 b FK(.)42 b(Hence,)32 b(w)m(e)e(tak)m(e)h FC(R)2700 2151 y FB(0)2767 2188 y FK(=)c(0)j(the)g(constan)m(tly)g (false)-9 2308 y(predicate)i(and)g(compute)g FC(R)1072 2272 y FA(k)r FB(+1)1237 2308 y FK(as)g(the)h(disjunction)e(of)h FC(I)40 b FK(and)32 b(the)h(set)g(of)e(states)i(whic)m(h)g(from)e(one) -9 2428 y(transition)f(of)j FC(T)46 b FK(can)33 b(b)s(e)f(reac)m(hed)i (from)e FC(R)1622 2392 y FA(k)1664 2428 y FK(.)44 b(Figure)31 b(22)i(illustrates)d(the)j(computation)e(of)i FC(R)q FK(.)137 2549 y(Ho)m(w)g(do)f(w)m(e)i(compute)e(this)g(with)h(R)m (OBDDs?)42 b(W)-8 b(e)33 b(start)g(with)f(the)h(R)m(OBDD)e FC(R)e FK(=)p 3302 2460 106 4 v 3302 2574 4 115 v 28 w(0)p 3404 2574 V 3302 2577 106 4 v 28 w(.)44 b(A)m(t)32 b(an)m(y)-9 2669 y(p)s(oin)m(t)26 b(in)h(the)h(computation)e(the)j (next)f(appro)m(ximation)e(is)h(computed)h(b)m(y)g(the)g(disjunction)f (of)g FC(I)36 b FK(and)-9 2789 y FC(T)44 b FK(comp)s(osed)32 b(with)e(the)i(previous)g(appro)m(ximation)c FC(R)2036 2753 y Fy(0)2060 2789 y FK(.)43 b(W)-8 b(e)31 b(are)h(done)f(when)h (the)g(curren)m(t)g(and)g(the)-9 2910 y(previous)h(appro)m(ximations)d (coincide:)234 3074 y FE(Rea)n(chable-St)-7 b(a)g(tes)p FK(\()p FC(I)8 b(;)17 b(T)8 b(;)15 b(~)-47 b(x)n(;)15 b(~)-47 b(x)1535 3038 y Fy(0)1559 3074 y FK(\))234 3202 y(1:)144 b FC(R)29 b FI( )p 684 3113 V 684 3227 4 115 v 55 w FK(0)p 786 3227 V 684 3230 106 4 v 234 3323 a(2:)144 b FF(rep)s(eat)234 3443 y FK(3:)363 b FC(R)748 3407 y Fy(0)799 3443 y FI( )28 b FC(R)234 3564 y FK(4:)363 b FC(R)29 b FI( )e FC(I)j FI(_)23 b FK(\()p FI(9)n FC(~)-47 b(x)q(:)32 b(T)k FI(^)23 b FC(R)q FK(\)[)n FC(~)-47 b(x=)n(~)g(x)1754 3527 y Fy(0)1778 3564 y FK(])234 3684 y(5:)144 b FF(un)m(til)31 b FC(R)789 3648 y Fy(0)840 3684 y FK(=)c FC(R)234 3804 y FK(6:)144 b FF(return)32 b FC(R)-9 4086 y Fn(7.1)135 b(Knigh)l(ts)46 b(tour)-9 4271 y FK(Using)39 b(the)h(same)g(enco)s (ding)f(of)g(a)h(c)m(hess)i(b)s(oard)d(as)h(in)f(section)h(6.1,)h (letting)d FC(x)3008 4286 y FA(ij)3109 4271 y FK(=)i(1)f(denote)i(the) -9 4391 y(presence)31 b(of)d(a)h(Knigh)m(t)f(at)g(p)s(osition)f(\()p FC(i;)17 b(j)6 b FK(\))29 b(w)m(e)h(can)f(solv)m(e)g(other)g(problems.) 42 b(W)-8 b(e)29 b(can)g(enco)s(de)h(mo)m(v)m(es)-9 4512 y(of)39 b(a)h(Knigh)m(t)f(as)i(transitions.)65 b(F)-8 b(or)39 b(eac)m(h)i(p)s(osition,)f(8)g(mo)m(v)m(es)h(are)f(p)s(ossible) g(if)f(they)i(sta)m(y)g(on)f(the)-9 4632 y(b)s(oard.)i(A)30 b(Knigh)m(t)f(at)g(\()p FC(i;)17 b(j)6 b FK(\))30 b(can)g(b)s(e)g(mo)m (v)m(ed)g(to)f(an)m(y)i(one)f(of)f(\()p FC(i)16 b FI(\006)g FK(1)p FC(;)h(j)24 b FI(\006)16 b FK(2\))p FC(;)h FK(\()p FC(i)f FI(\006)g FK(2)p FC(;)h(j)23 b FI(\006)16 b FK(1\))31 b(assuming)-9 4753 y(they)38 b(are)f(v)-5 b(acan)m(t)38 b(and)f(within)f(the)i(b)s(oard)f(b)s(oundary)-8 b(.)58 b(F)-8 b(or)37 b(all)e FC(i;)17 b(j)43 b FK(and)37 b FC(k)s(;)17 b(l)40 b FK(with)d(1)e FI(\024)i FC(k)s(;)17 b(l)37 b FI(\024)g FC(N)-9 4873 y FK(and)32 b(\()p FC(k)s(;)17 b(l)r FK(\))28 b FI(2)g(f)p FK(\()p FC(i)22 b FI(\006)h FK(1)p FC(;)17 b(j)27 b FI(\006)c FK(2\))p FC(;)17 b FK(\()p FC(i)22 b FI(\006)g FK(2)p FC(;)17 b(j)28 b FI(\006)22 b FK(1\))p FI(g)p FK(:)578 5064 y FC(M)672 5079 y FA(ij;k)r(l)836 5064 y FK(=)912 5079 y Fx(def)1024 5064 y FC(x)1079 5079 y FA(ij)1162 5064 y FI(^)h(:)p FC(x)1372 5079 y FA(k)r(;l)1479 5064 y FI(^)g(:)p FC(x)1689 5023 y Fy(0)1689 5089 y FA(ij)1772 5064 y FI(^)g FC(x)1916 5023 y Fy(0)1916 5089 y FA(k)r(l)2003 5064 y FI(^)2325 4970 y Fv(^)2091 5186 y FB(\()p FA(i)2142 5167 y Fd(0)2165 5186 y FA(;j)2218 5167 y Fd(0)2239 5186 y FB(\))p Fy(62f)p FB(\()p FA(i;j)t FB(\))p FA(;)p FB(\()p FA(k)r(;l)q FB(\))p Fy(g)2686 5064 y FC(x)2741 5079 y FA(i)2765 5060 y Fd(0)2788 5079 y FA(j)2821 5060 y Fd(0)2875 5064 y FK(=)k FC(x)3033 5023 y Fy(0)3033 5089 y FA(i)3057 5070 y Fd(0)3080 5089 y FA(j)3113 5070 y Fd(0)3156 5064 y FC(:)p eop %%Page: 34 35 34 34 bop -9 -460 a FG(7)97 b(VERIFICA)-8 b(TION)34 b(WITH)f(R)m(OBDDS) 2039 b FK(34)570 1923 y @beginspecial 0 @llx 0 @lly 315 @urx 264 @ury 3150 @rwi @setspecial %%BeginDocument: reachable.pstex /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -51.0 285.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit n 0 462 m 0 0 l 582 0 l 582 462 l cp clip 0.67500 0.67500 sc % Polyline 1.000 slw n 539 419 m 539 54 l 79 54 l 79 419 l cp gs col-1 s gr % Interp Spline gs n 164 119 m 156.5 123.4 140.2 131.6 139 144 curveto 137.7 156.6 146.0 170.8 159 174 curveto 181.6 179.6 206.4 166.0 214 144 curveto 218.6 130.7 211.6 115.0 199 109 curveto 187.0 103.3 171.7 114.5 164 119 curveto cp gs col-1 s gr gr % Interp Spline gs n 149 109 m 133.9 118.9 112.6 142.3 114 164 curveto 115.7 190.0 139.7 217.1 164 224 curveto 193.5 232.4 236.0 221.7 254 194 curveto 273.0 164.6 274.0 117.2 244 94 curveto 215.2 71.8 171.2 94.4 149 109 curveto cp gs col-1 s gr gr % Interp Spline gs n 144 99 m 129.7 113.3 96.4 143.1 94 169 curveto 91.7 194.0 108.8 229.6 129 244 curveto 164.5 269.3 232.1 282.9 274 259 curveto 311.9 237.3 338.2 182.4 329 139 curveto 321.1 101.7 274.4 72.9 244 64 curveto 226.3 58.8 193.8 68.0 179 74 curveto 169.3 77.9 151.2 91.8 144 99 curveto cp gs col-1 s gr gr % Interp Spline gs n 114 89 m 104.5 100.5 92.7 130.3 89 144 curveto 85.9 155.4 80.6 181.2 84 194 curveto 95.6 237.7 142.1 310.4 184 334 curveto 232.9 361.5 329.8 374.4 384 349 curveto 442.1 321.8 527.0 249.7 509 174 curveto 491.1 98.5 366.2 90.8 319 74 curveto 302.2 68.0 261.7 60.3 244 59 curveto 222.0 57.4 171.4 56.2 149 64 curveto 138.9 67.5 120.7 80.8 114 89 curveto cp gs col-1 s gr gr /Times-Roman ff 18.00 scf sf 284 49 m gs 1 -1 sc (Full state space) dup sw pop 2 div neg 0 rm col-1 sh gr $F2psEnd rs %%EndDocument @endspecial 980 416 a Fq(I)43 b FL(=)33 b Fq(R)1289 372 y Fr(1)1407 641 y Fq(R)1497 597 y Fr(2)1660 894 y Fq(R)1750 850 y Fr(3)2409 1344 y Fq(R)1904 1062 y FL(.)2017 1147 y(.)2157 1203 y(.)669 2234 y FK(Figure)f(22:)43 b(Sk)m(etc)m(h)34 b(of)e(computation)g(of)g(the)h(reac)m(hable)f (states)-9 2519 y(Hence,)i(the)f(transitions)e(are)i(giv)m(en)f(as)h (the)g(predicate)g FC(T)14 b FK(\()n FC(~)-47 b(x;)15 b(~)-47 b(x)2350 2483 y Fy(0)2373 2519 y FK(\):)842 2757 y FC(T)14 b FK(\()n FC(~)-47 b(x;)15 b(~)-47 b(x)1105 2716 y Fy(0)1128 2757 y FK(\))28 b(=)1270 2772 y Fx(def)1971 2662 y Fv(_)1381 2878 y FB(1)p Fy(\024)p FA(i;j;k)r(;l)q Fy(\024)p FA(N)s(;)p FB(\()p FA(k)r(;l)q FB(\))p Fy(2f)p FB(\()p FA(i)p Fy(\006)p FB(1)p FA(;j)t Fy(\006)p FB(2\))p FA(;)p FB(\()p FA(i)p Fy(\006)p FB(2)p FA(;j)t Fy(\006)p FB(1\))p Fy(g)2688 2757 y FC(M)2782 2772 y FA(ij;k)r(l)-9 3295 y FF(Exercise)36 b(7.1)h(\(Knigh)m(t's)g(tour\))48 b FK(W)-8 b(rite)41 b(a)h(program)f(to)h(solv)m(e)g(the)h(follo)m(wing) c(problem)i(using)-9 3415 y(the)e(R)m(OBDD-pac)m(k)-5 b(age:)54 b(Is)40 b(it)d(p)s(ossible)h(for)g(a)h(Knigh)m(t,)g(p)s (ositioned)e(at)i(the)g(lo)m(w)m(er)f(left)g(corner)h(to)-9 3536 y(visit)32 b(all)f(p)s(ositions)h(on)h(an)h FC(N)f FI(\002)23 b FC(N)44 b FK(b)s(oard?)h(\()p FD(Hint:)34 b FK(Compute)f(iterativ)m(ely)f(all)f(the)j(p)s(ositions)e(that)-9 3656 y(can)g(b)s(e)h(reac)m(hed)h(b)m(y)g(the)f(Knigh)m(t.\))42 b(T)-8 b(ry)34 b(it)d(for)h(v)-5 b(arious)32 b FC(N)10 b FK(.)-9 3884 y FF(Exercise)36 b(7.2)49 b FK(Wh)m(y)34 b(do)s(es)f(the)g(algorithm)c FE(Rea)n(chable-St)-7 b(a)g(tes)31 b FK(alw)m(a)m(ys)i(terminate?)-9 4113 y FF(Exercise)j(7.3)49 b FK(In)34 b(this)g(exercise)h(w)m(e)g(shall)e(w)m(ork)h(with)g (Milner's)f(Sc)m(heduler)i(for)f FC(N)40 b FK(=)30 b(4.)48 b(It)34 b(is)f(b)m(y)-9 4233 y(far)24 b(b)s(e)i(the)f(most)g(con)m(v)m (enien)m(t)i(to)e(solv)m(e)g(the)h(exercise)g(b)m(y)g(using)f(an)g (implemen)m(tation)d(of)j(an)g(R)m(OBDD)-9 4353 y(pac)m(k)-5 b(age.)234 4557 y FF(a\))49 b FK(Find)32 b(the)h(reac)m(hable)g(states) g(as)g(an)g(R)m(OBDD)e FC(R)q FK(.)234 4719 y FF(b\))49 b FK(Find)32 b(the)h(n)m(um)m(b)s(er)g(of)f(reac)m(hable)h(states.)234 4881 y FF(c\))49 b FK(Sho)m(w)27 b(that)g(in)g(all)e(reac)m(hable)i (states)h(at)e(most)h(one)g(tok)m(en)h(is)f(presen)m(t)h(on)f(an)m(y)h (of)f(the)449 5001 y(placeholders)38 b FC(c)1050 5016 y FB(1)1089 5001 y FC(;)17 b(:)g(:)g(:)f(;)h(c)1350 5016 y FA(N)1455 5001 y FK(b)m(y)39 b(form)m(ulating)c(a)j(suitable)f(prop)s (ert)m(y)h FC(P)52 b FK(and)38 b(pro)m(v)m(e)449 5121 y(that)32 b FC(R)d FI(\))e FC(P)14 b FK(.)p eop %%Page: 35 36 35 35 bop -9 -460 a FG(8)97 b(PR)m(OJECT:)34 b(AN)f(R)m(OBDD)f(P)-8 b(A)m(CKA)m(GE)1946 b FK(35)234 -171 y FF(d\))49 b FK(Sho)m(w)32 b(that)f(in)f(all)f(reac)m(hable)j(states)g(Milner's)e(Sc)m(heduler)i (can)g(alw)m(a)m(ys)f(p)s(erform)f(a)449 -51 y(transition,)h(i.e.,)h (it)g(do)s(es)h(not)f(p)s(ossess)j(a)d FD(de)-5 b(ad)5 b(lo)-5 b(ck)p FK(.)-9 139 y FF(Exercise)36 b(7.4)49 b FK(Complete)31 b(the)h(ab)s(o)m(v)m(e)h(exercise)g(b)m(y)g(sho)m (wing)f(that)g(the)g(tasks)h(are)f(alw)m(a)m(ys)g(started)-9 259 y(in)f(sequence)36 b(1)p FC(;)17 b FK(2)p FC(;)g(:)g(:)g(:)e(;)i(N) 5 b(;)17 b FK(1)p FC(;)g FK(2)g FC(:)g(:)g(:)-9 449 y FF(Exercise)36 b(7.5)49 b FK(W)-8 b(rite)34 b(a)g(program)f(that)h(giv) m(en)g(an)h FC(N)44 b FK(as)35 b(input)f(computes)h(the)f(reac)m(hable) h(states)-9 570 y(of)47 b(Milner's)g(Sc)m(heduler)i(with)e FC(N)58 b FK(cyclers.)90 b(The)49 b(program)d(should)h(write)h(out)f (the)h(n)m(um)m(b)s(er)g(of)-9 690 y(reac)m(hable)34 b(states)g(\(using)h FE(Sa)-7 b(tCount)p FK(\).)48 b(Run)34 b(the)g(program)f(for)g FC(N)41 b FK(=)29 b(2)p FC(;)17 b FK(4)p FC(;)g FK(6)p FC(;)g FK(8)p FC(;)g FK(10)p FC(;)g(:)g(:)g(:)31 b FK(Measure)-9 810 y(the)d(running)f(times)g(and)h(dra)m(w)h(a)e (graph)h(sho)m(wing)g(the)g(measuremen)m(ts)h(as)f(a)g(function)f(of)h FC(N)10 b FK(.)42 b(What)-9 931 y(is)32 b(the)h(asymptotic)e(running)i (time)e(of)h(y)m(our)h(program?)-9 1259 y FH(8)161 b(Pro)9 b(ject:)70 b(An)54 b(R)l(OBDD)f(P)l(ac)l(k)-9 b(age)-9 1478 y FK(This)30 b(pro)5 b(ject)31 b(implemen)m(ts)d(a)i(small)e(pac)m (k)-5 b(age)31 b(of)f(R)m(OBDD-op)s(erations.)40 b(The)31 b(full)d(pac)m(k)-5 b(age)31 b(should)-9 1598 y(con)m(tain)h(the)h (follo)m(wing)d(op)s(erations:)-9 1772 y FF(Init)p FK(\()p FC(n)p FK(\))234 1893 y(Initialize)g(the)j(pac)m(k)-5 b(age.)44 b(Use)34 b FC(n)e FK(v)-5 b(ariables)32 b(n)m(um)m(b)s(ered)h (1)g(through)f FC(n)p FK(.)-9 2087 y FF(Prin)m(t)p FK(\()p FC(u)p FK(\))234 2207 y(Prin)m(t)25 b(a)g(represen)m(tation)g(of)g(the) g(R)m(OBDD)f(on)h(the)g(standard)g(output.)41 b(Useful)25 b(for)f(debugging.)-9 2401 y FF(Mk)p FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\))234 2521 y(Return)28 b(the)f(n)m(um)m(b)s(er)g FC(u)g FK(of)f(a)h(no)s(de)g(with)f FD(var)11 b FK(\()p FC(u)p FK(\))27 b(=)h FC(i;)17 b FD(low)10 b FK(\()p FC(u)p FK(\))27 b(=)g FC(l)r(;)17 b FD(high)7 b FK(\()p FC(u)p FK(\))27 b(=)h FC(h)p FK(.)41 b(This)27 b(could)234 2642 y(b)s(e)22 b(an)g(existing)f(no)s(de,)k(or)c(a)h(newly)g(created)h (no)s(de.)40 b(The)23 b(reducedness)i(of)c(the)h(R)m(OBDD)f(should)234 2762 y(not)33 b(b)s(e)g(violated.)-9 2956 y FF(Build)p FK(\()p FC(t)p FK(\))234 3076 y(Construct)c(an)e(R)m(OBDD)g(from)f(a)h (Bo)s(olean)f(expression.)43 b(Y)-8 b(ou)27 b(could)g(restrict)h(y)m (ourself)g(to)f(the)234 3196 y(expressions)35 b FC(x)e FK(or)f FI(:)p FC(x)h FK(or)g(\014nite)f(conjunctions)h(of)f(these.)45 b(\(Wh)m(y?\))-9 3390 y FF(Apply)r FK(\()p FD(op)n FC(;)17 b(u)529 3405 y FB(1)568 3390 y FC(;)g(u)668 3405 y FB(2)706 3390 y FK(\))234 3511 y(Construct)34 b(the)f(R)m(OBDD)f(resulting)f (from)h(applying)f FD(op)h FK(on)h FC(u)2608 3526 y FB(1)2679 3511 y FK(and)g FC(u)2925 3526 y FB(2)2964 3511 y FK(.)-9 3704 y FF(Restrict)p FK(\()p FC(u;)17 b(j;)g(b)p FK(\))234 3825 y(Restrict)33 b(the)g(R)m(OBDD)e FC(u)h FK(according)g(to)h(the)g (truth)f(assignmen)m(t)h([)p FC(b=x)2912 3840 y FA(j)2949 3825 y FK(].)-9 4019 y FF(SatCoun)m(t)p FK(\()p FC(u)p FK(\))234 4139 y(Return)e(the)g(n)m(um)m(b)s(er)g(of)f(elemen)m(ts)h (in)f(the)h(set)g FD(sat)p FK(\()p FC(u)p FK(\).)42 b(\(Use)32 b(a)e(t)m(yp)s(e)h(that)g(can)f(con)m(tain)h(v)m(ery)234 4259 y(large)h(n)m(um)m(b)s(ers)h(suc)m(h)h(as)f(\015oating)e(p)s(oin)m (t)h(n)m(um)m(b)s(ers.\))-9 4453 y FF(An)m(ySat)p FK(\()p FC(u)p FK(\))234 4573 y(Return)h(a)g(satisfying)e(truth)i(assignmen)m (t)f(for)g FC(u)-9 4857 y Fn(Sub-pro)7 b(ject)44 b(1)-9 5042 y FK(Implemen)m(t)32 b(the)i(tables)f FC(T)47 b FK(and)33 b FC(H)41 b FK(with)33 b(their)g(op)s(erations)f(listed)h(in) f(section)i(4.)45 b(On)34 b(top)f(of)g(these)-9 5162 y(implemen)m(t)d(the)j(op)s(erations)f FE(Init)p FK(\()p FC(n)p FK(\),)h FE(Print)p FK(\()p FC(u)p FK(\),)f(and)h FE(Mk)p FK(\()p FC(i;)17 b(l)r(;)g(h)p FK(\).)p eop %%Page: 36 37 36 36 bop -9 -460 a FG(REFERENCES)3013 b FK(36)-9 -171 y Fn(Sub-pro)7 b(ject)44 b(2)-9 14 y FK(Con)m(tin)m(ue)h(implemen)m (tation)d(of)j(the)g(pac)m(k)-5 b(age)46 b(b)m(y)g(adding)e(the)h(op)s (erations)f FE(Build)p FK(\()p FC(t)p FK(\))i(and)f FE(Ap-)-9 134 y(pl)-7 b(y)r FK(\()p FD(op)o FC(;)17 b(u)391 149 y FB(1)430 134 y FC(;)g(u)530 149 y FB(2)569 134 y FK(\).)-9 423 y Fn(Sub-pro)7 b(ject)44 b(3)-9 608 y FK(Finish)31 b(y)m(our)i(implemen)m(tation)d(of)i(the)h(pac)m(k)-5 b(age)33 b(b)m(y)h(adding)f FE(Restrict)p FK(\()p FC(u;)17 b(j;)g(b)p FK(\),)32 b FE(Sa)-7 b(tCount)p FK(\()p FC(u)p FK(\),)-9 728 y(and)32 b FE(AnySa)-7 b(t)p FK(\()p FC(u)p FK(\).)-9 1061 y FH(References)-9 1280 y FK([AH97])131 b(Henrik)35 b(Reif)f(Andersen)j(and)e(Henrik)g(Hulgaard.)50 b(Bo)s(olean)33 b(expression)k(diagrams.)49 b(In)420 1400 y FD(Pr)-5 b(o)g(c)g(e)g(e)g(dings,)35 b(Twelfth)h(A)n(nnual)g (IEEE)g(Symp)-5 b(osium)35 b(on)h(L)-5 b(o)g(gic)36 b(in)g(Computer)g (Scienc)-5 b(e)p FK(,)420 1521 y(pages)33 b(88{98,)f(W)-8 b(arsa)m(w,)33 b(P)m(oland,)f(June)i(29{July)d(2)i(1997.)e(IEEE)j (Computer)f(So)s(ciet)m(y)-8 b(.)-9 1724 y([Bry86])119 b(Randal)27 b(E.)j(Bry)m(an)m(t.)38 b(Graph-based)28 b(algorithms)f(for)h(Bo)s(olean)f(function)h(manipulation.)420 1844 y FD(IEEE)35 b(T)-7 b(r)i(ansactions)33 b(on)h(Computers)p FK(,)e(8\(C-35\):677{691,)f(1986.)-9 2048 y([Bry92])119 b(Randal)21 b(E.)i(Bry)m(an)m(t.)28 b(Sym)m(b)s(olic)21 b(Bo)s(olean)h(manipulation)d(with)j(ordered)h(binary-decision)420 2168 y(diagrams.)42 b FD(A)n(CM)35 b(Computing)f(Surveys)p FK(,)e(24\(3\):293{318,)f(Septem)m(b)s(er)i(1992.)-9 2372 y([CBM89])49 b(Olivier)36 b(Coudert,)41 b(Christian)c(Berthet,)k (and)d(Jean)h(Christophe)f(Madre.)61 b(V)-8 b(eri\014cation)420 2492 y(of)31 b(sync)m(hronous)j(sequen)m(tial)d(mac)m(hines)h(based)g (on)f(sym)m(b)s(olic)g(execution.)42 b(In)31 b(J.)h(Sifakis,)420 2612 y(editor,)39 b FD(A)n(utomatic)h(V)-7 b(eri\014c)i(ation)39 b(Metho)-5 b(ds)40 b(for)g(Finite)f(State)i(Systems.)e(Pr)-5 b(o)g(c)g(e)g(e)g(dings)p FK(,)420 2733 y(v)m(olume)32 b(407)g(of)g FD(LNCS)p FK(,)h(pages)g(365{373.)e(Springer-V)-8 b(erlag,)30 b(1989.)-9 2936 y([CLR90])74 b(Thomas)33 b(H.)h(Cormen,)g(Charles)g(E.)f(Leiserson,)i(and)e(Ronald)g(L.)g(Riv)m (est.)47 b FD(Intr)-5 b(o)g(duction)420 3057 y(to)35 b(A)n(lgorithms)p FK(.)43 b(McGra)m(w-Hill,)30 b(1990.)-9 3260 y([Co)s(o71])106 b(S.A.)23 b(Co)s(ok.)28 b(The)c(complexit)m(y)e (of)g(theorem-pro)m(ving)g(pro)s(cedures.)29 b(In)23 b FD(Pr)-5 b(o)g(c)g(e)g(e)g(dings)24 b(of)i(the)420 3380 y(Thir)-5 b(d)40 b(A)n(nnual)g(A)n(CM)g(Symp)-5 b(osium)40 b(on)g(the)g(The)-5 b(ory)40 b(of)g(Computing)p FK(,)f(pages)h(151{158,)420 3501 y(New)33 b(Y)-8 b(ork,)33 b(1971.)f(Asso)s(ciation)f(for)h(Computing)g(Mac)m(hinery)-8 b(.)-9 3704 y([Mil89])132 b(Robin)32 b(Milner.)42 b FD(Communic)-5 b(ation)33 b(and)i(Concurr)-5 b(ency)p FK(.)42 b(Pren)m(tice)34 b(Hall,)d(1989.)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF buddy-2.4/doc/buddy.ps0000664000076500001440000154245010067023073010403 %!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: buddy.dvi %%Pages: 104 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips buddy %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2002.11.09:1826 %%BeginProcSet: texc.pro %! /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/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/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]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/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 /p{show}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: special.pro %! 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/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/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 TeXDict begin 39158280 55380996 1000 600 600 (buddy.dvi) @start %DVIPSBitmapFont: Fa cmr6 6 3 /Fa 3 52 df<13E01201120712FF12F91201B3A7487EB512C0A212217AA01E>49 DI<13FF000313C0380F03E0381C00F014F800 3E13FC147CA2001E13FC120CC712F8A2EB01F0EB03E0EB0FC03801FF00A2380003E0EB00 F01478147C143E143F1230127812FCA2143E48137E0060137C003813F8381E03F0380FFF C00001130018227DA01E>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmex10 10 1 /Fb 1 95 df94 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc cmsy10 10.95 17 /Fc 17 111 df<007FB812F8B912FCA26C17F83604789847>0 D3 D8 D 15 D<1818187CEF01FCEF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7 FCED07FCED1FF0ED7FC04A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC0 4848CAFCEA07FCEA1FF0EA7FC048CBFC5AEA7F80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB 0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED03FE923800 FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC170018381800AE007FB812 F8B912FCA26C17F8364878B947>20 D<126012F812FEEA7F80EA3FE0EA0FF8EA03FEC66C 7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE913800FF80ED3FE0ED0FF8ED 03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0EF0FF8EF03FC1701EF07F8EF 1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC04A48C8FC EC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0EA7FC048 CBFC12FC1270CCFCAE007FB812F8B912FCA26C17F8364878B947>I40 DI<03F015F0A20201824B15780203167C4B153C 0207163E4A488192C97E4A83023E707E023C1603027C834A707E49B97E49844984498401 3FCBEA0FC0017E727E49727ED803F8F001FCD80FE0F0007FD83FC0F13FC0B4CDEA0FF0A2 D83FC0F13FC0D80FE0F17F00D803F8F001FCC66CF003F0017E4E5A6D4E5A010FBAC7FC6D 606D606D60D900F8C9EA01F0027C4C5A023C5F023E16076E4C5A6E94C8FC6F5D6E6C153E 0203163C6F157C020116786F15F802005EA254327DAF5B>44 D<176017F01601A2EE03E0 A2EE07C0A2EE0F80A2EE1F00A2163EA25EA25EA24B5AA24B5AA24B5AA24B5AA24BC7FCA2 153EA25DA25DA24A5AA24A5AA24A5AA24A5AA24AC8FCA2143EA25CA25CA2495AA2495AA2 495AA2495AA249C9FCA2133EA25BA25BA2485AA2485AA2485AA2485AA248CAFCA2123EA2 5AA25AA25A12602C5473C000>54 D<007FB81280B912C0A27ECA1203B3A232187B9F3D> 58 D<15C04A7E4A7EA24A7EA34A7EA2EC1F3EA2EC3E1FA2EC3C0F027C7FA24A6C7EA249 486C7EA2ECE001010380A249486C7EA24948137CA249C77EA2011E141E013E141FA2496E 7EA2496E7EA2491403000182A248486E7EA248486E7EA2491578000F167CA248C97EA200 3E82A2003C82007C1780A248EE07C0A24816030060EE018032397BB63D>94 D<0060EE018000F0EE03C06C1607A2007CEE0F80A2003C1700003E5EA26C163EA26C6C5D A2000716786D15F8A26C6C4A5AA26C6C4A5AA200005E6D1407A2017C4A5AA26D4AC7FCA2 011E141E011F143EA26D6C5BA26D6C5BA26D6C485AA201015CECF003A26D6C485AA29138 7C0F80A2023C90C8FCEC3E1FA2EC1F3EA2EC0FFCA26E5AA36E5AA26E5A6E5A32397BB63D >I<146014F01301A214E01303A214C01307A2EB0F80A214005BA2131E133EA25BA21378 13F8A25B1201A25B1203A2485AA25B120FA290C7FC5AA2123EA2123C127CA2127812F8A4 1278127CA2123C123EA27EA27E7FA212077FA26C7EA212017FA212007FA21378137CA27F A2131E131FA27F1480A2EB07C0A2130314E0A2130114F0A213001460145A77C323>104 D<126012F07EA21278127CA2123C123EA27EA27E7FA212077FA26C7EA212017FA212007F A21378137CA27FA2131E131FA27F1480A2EB07C0A2130314E0A2130114F0A414E01303A2 14C01307A2EB0F80A214005BA2131E133EA25BA2137813F8A25B1201A25B1203A2485AA2 5B120FA290C7FC5AA2123EA2123C127CA2127812F8A25A1260145A7BC323>I<126012F0 B3B3B3B3B11260045B76C319>I<126012F07EA21278127CA2123C123EA2121E121FA27E 7FA212077FA212037FA212017FA212007FA21378137CA27FA2131E131FA27F80A2130780 A2130380A2130180A2130080A21478147CA2143C143EA2141E141FA26E7EA2140781A214 0381A2140181A2140081A21578157CA2153C153EA2151E151FA2811680A2150716C0A215 03ED0180225B7BC32D>110 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd cmmi12 12 2 /Fd 2 119 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A78891B>58 D<013E140ED9FF80EB3F802603C3C0137F380703E0380601F0120E121CD81803143F0038 151F0030150FA2D87007140700605BA2D8E00F150000C0497FEA001F4A5B1606133F91C7 FC160E49140C137EA2161C01FE14185B1638163016704848146016E05E150100005D1503 6D49C7FC1506017C130E017E5B6D137890380F81E06DB45AD900FEC8FC292D7DAB2F> 118 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmbx12 12 23 /Fe 23 121 df<161E163FB3AF007FBB1280BC12C0A46C1A80C9003FCAFCB3AF161E4A4A 7ABD57>43 D46 D48 DII<16 3FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E147E 147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B48C7 FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>52 D67 D69 D73 D77 D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 D99 D101 DI108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5 D8F001B512E002816E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F00 9026FF3E007F6C019E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081 B60003B512FEA5572D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F89139 87F03FFC91388F801F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083 B512FEA5372D7CAC3E>II< 90397FC00FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07 FF6C496D13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C 13E06E15C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091 C7FCED1FF092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F13 F8ED8FFC91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA3 5CB3A5B612E0A5272D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003 383FC00049133F48C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF 6C14C015F06C14FC6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA2 6C141F150FA27EA26C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8 F03F13E026E007FEC7FC232F7CAD2C>II120 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff cmti10 10.95 35 /Ff 35 122 df<933807FF80043F13E09338FE00F8DB01F0133EDB07E0130E4B48131F4C 137F031F14FF4BC7FCA218FE157E1878180015FE5DA31401A25DA414030103B712F0A218 E0903A0003F000070207140F4B14C0A3171F020F15805DA2173F1800141F5D5F177EA214 3F92C712FE5FA34A1301027EECF81CA3160302FEECF03C4A1538A21878187013014A0101 13F018E0933800F1C0EF7F804948EC1F0094C7FCA35C1307A2001E5B127F130F00FF5BA2 49CAFC12FEEAF81EEA703CEA7878EA1FF0EA07C0385383BF33>12 D<1838187CA218F8170118F0EF03E0A2EF07C0A2EF0F80171F1800173EA25FA25F16015F 4C5AA24C5AA24C5A161F94C7FC163EA25EA25E15015E4B5AA24B5AA24B5A151F93C8FC15 3EA25DA25D14015D4A5AA24A5AA24A5A141F92C9FC143EA25CA25C13015C495AA2495AA2 495A131F91CAFC133EA25BA25B12015B485AA2485AA2485A121F90CBFC123EA25AA25AA2 5A5A365B7FC32E>47 D<15FE913803FFC091380F01F091383C00F84A137C4A7F4948133F 49487F4A148049C7FC5BEB0E0C011E15C0EB1C0EEB3C06133813781370020E133FD9F00C 148013E0141C0218137F00011600EBC0384A13FEEC600102E05B3A00E3C003F89039FF00 07F0013C495A90C7485A5E037FC7FC15FC4A5A4A5AEC0FC04AC8FC147E14F8EB03E0495A 011FC9FC133E49141801F0143C48481438485A1678485A48C85A120E001E4A5AD83FE013 0301FF495A397C3FF01FD8780FB55AD8700391C7FCD8F0015B486C6C5A6E5AEC07C02A3F 79BC2E>50 D55 D<171C173C177CA217FCA216011603A21607A24C7EA2161DA21639 1679167116E1A2ED01C1A2ED038115071601150EA2031C7FA24B7EA25D15F05D4A5AA24A 5AA24AC7FC5C140E5C021FB6FC4A81A20270C7127FA25C13015C495AA249C8FCA2130E13 1E131C133C5B01F882487ED807FEEC01FFB500E0017FEBFF80A25C39417BC044>65 D<49B712C018F818FE903B0003FC0001FF9438007F804BEC3FC0A2F01FE014074B15F018 0FA2140F5D181FA2021F16E05D183F19C0023FED7F804B14FF19004D5A027F4A5A92C7EA 07F0EF1FE0EF7F804AD903FEC7FC92B512F017FE4AC7EA3F800101ED1FE04A6E7E170784 01036F7E5CA30107825CA3010F5E4A1407A260011F150F5C4D5A60013F153F4A4A5A4D5A 017F4A90C7FC4C5A91C7EA0FF849EC3FF0B812C094C8FC16F83C3E7BBD40>I<9339FF80 01C0030F13E0033F9038F803809239FF807E07913A03FC001F0FDA0FF0EB071FDA1FC0EC BF00DA7F806DB4FC4AC77E495AD903F86E5A495A130F4948157E4948157C495A13FF91C9 FC4848167812035B1207491670120FA2485A95C7FC485AA3127F5BA312FF5BA490CCFCA2 170FA2170EA2171E171C173C173817786C16706D15F04C5A003F5E6D1403001F4B5A6D4A C8FC000F151E6C6C5C6C6C14F86C6C495A6C6CEB07C090397FC03F8090261FFFFEC9FC01 0713F0010013803A4272BF41>I<49B712C018F818FE903B0003FE0003FF9438007F804B EC1FC0F00FE0F007F014074BEC03F8F001FCA2140F4BEC00FEA3141F4B15FFA3143F5DA3 027F5D5DA219FE14FF92C81203A34917FC4A1507A219F813034A150F19F0A20107EE1FE0 5CF03FC0A2010FEE7F804A16006060011F4B5A4A4A5A4D5AA2013F4B5A4AEC3FC04DC7FC 017F15FEEE03FC4AEB0FF001FFEC7FE0B8128004FCC8FC16E0403E7BBD45>I<49B812F8 A390260003FEC7121F18074B14031801F000F014075DA3140F5D19E0A2141F4B1338A2EF 7801023F027013C04B91C7FCA217F0027F5CED80011603160F91B65AA3ED001F49EC0780 5CA3010392C8FC5CF003804C13070107020E14005C93C75A180E010F161E4A151C183CA2 011F5E5C60A2013F15014A4A5A1707017F150F4D5A4A147F01FF913807FF80B9FCA295C7 FC3D3E7BBD3E>I<49B6FC5BA2D9000313005D5DA314075DA3140F5DA3141F5DA3143F5D A3147F5DA314FF92C7FCA35B5CA313035CA313075CA3130F5CA3131F5CA3133F5CA2137F A25C497EB67EA3283E7BBD23>73 D<49B5933807FFFC496062D90003F0FC00505ADBBF80 5E1A771AEF1407033F923801CFE0A2F1039F020FEE071F020E606F6C140E1A3F021E161C 021C04385BA2F1707F143C023804E090C7FCF001C0629126780FE0495A02705FF00700F0 0E0114F002E0031C5BA2F03803010116704A6C6C5D18E019070103ED01C00280DA03805B A2943807000F13070200020E5C5FDB03F8141F495D010E4B5CA24D133F131E011CDAF9C0 5CEEFB80197F013C6DB4C7FC013895C8FC5E01784A5C13F8486C4A5CD807FE4C7EB500F0 4948B512FE16E01500563E7BBD52>77 D<49B77E18F018FC903B0003FE0003FEEF00FF4B EC7F80F03FC00207151F19E05DA2020F16F0A25DA2141FF03FE05DA2023F16C0187F4B15 80A2027FEDFF00604B495A4D5A02FF4A5A4D5A92C7EA3FC04CB4C7FC4990B512FC17E04A CAFCA21303A25CA21307A25CA2130FA25CA2131FA25CA2133FA25CA2137FA25C497EB67E A33C3E7BBD3E>80 D<92391FE00380ED7FFC913A01FFFE0700913907F01F8F91390FC007 DF4AC66CB4FC023E6D5A4A130014FC495A4948147CA2495AA2010F15785CA3011F1570A4 6E91C7FCA2808014FE90380FFFE015FC6DEBFF8016E06D806D806D6C7F141F02037FEC00 3FED07FF1501A281A282A212075A167E120EA2001E15FE5EA25E003E14015E003F14034B 5A486C5C150F6D495A6D49C8FCD8F9F0137C39F8FE01F839F03FFFF0D8E00F13C026C001 FEC9FC314279BF33>83 D<48B9FCA25A903AFE001FF00101F89138E0007FD807E0163E49 013F141E5B48C75BA2001E147FA2001C4B131C123C003814FFA2007892C7FC12704A153C 00F01738485CC716001403A25DA21407A25DA2140FA25DA2141FA25DA2143FA25DA2147F A25DA214FFA292C9FCA25BA25CA21303A25CEB0FFE003FB67E5AA2383D71BC41>I<147E 49B47E903907C1C38090391F80EFC090383F00FF017E137F4914804848133F485AA24848 1400120F5B001F5C157E485AA215FE007F5C90C7FCA21401485C5AA21403EDF0385AA214 07EDE078020F1370127C021F13F0007E013F13E0003E137FECF3E1261F01E313C03A0F87 81E3803A03FF00FF00D800FC133E252977A72E>97 DIIII<167C4BB4FC923807C7809238 0F83C0ED1F87161FED3F3FA2157EA21780EE0E004BC7FCA414015DA414035DA30103B512 F8A390260007E0C7FCA3140F5DA5141F5DA4143F92C8FCA45C147EA414FE5CA413015CA4 495AA4495AA4495A121E127F5C12FF49C9FCA2EAFE1EEAF83C1270EA7878EA3FE0EA0F80 2A5383BF1C>II I<1478EB01FCA21303A314F8EB00E01400AD137C48B4FC38038F80EA0707000E13C0121E 121CEA3C0F1238A2EA781F00701380A2EAF03F140012005B137E13FE5BA212015BA21203 5B1438120713E0000F1378EBC070A214F0EB80E0A2EB81C01383148038078700EA03FEEA 00F8163E79BC1C>I108 DIII<903903E001F890390FF807FE903A1E 7C1E0F80903A1C3E3C07C0013C137801389038E003E0EB783F017001C013F0ED80019038 F07F0001E015F8147E1603000113FEA2C75AA20101140717F05CA20103140F17E05CA201 07EC1FC0A24A1480163F010F15005E167E5E131F4B5A6E485A4B5A90393FB80F80DA9C1F C7FCEC0FFCEC03E049C9FCA2137EA213FEA25BA21201A25BA21203A2387FFFE0B5FCA22D 3A80A72E>I114 DII<137C48B4141C26038F 80137EEA0707000E7F001E15FE121CD83C0F5C12381501EA781F007001805BA2D8F03F13 03140000005D5B017E1307A201FE5C5B150F1201495CA2151F0003EDC1C0491481A2153F 1683EE0380A2ED7F07000102FF13005C01F8EBDF0F00009038079F0E90397C0F0F1C9039 1FFC07F8903907F001F02A2979A731>I<017CEB01C048B4EB07F038038F80EA0707000E 01C013F8121E001C1403EA3C0F0038EC01F0A2D8781F130000705BA2EAF03F91C712E012 005B017E130116C013FE5B1503000115805BA2ED07001203495B150EA25DA25D15780001 14706D5B0000495A6D485AD97E0FC7FCEB1FFEEB03F0252979A72A>I<903903F001F890 390FFC07FE90393C1E0E0F9026780F1C138001F0EBB83FD801E013F89039C007F07FEA03 80000714E0D9000F140048151C000E4AC7FCA2001E131FA2C75BA2143F92C8FCA35C147E A314FE4A131CA30101143C001E1538003F491378D87F811470018314F000FF5D90390778 01C039FE0F7C033A7C0E3C078027783C1E1EC7FC391FF80FFC3907E003F029297CA72A> 120 D<137C48B4143826038F8013FCEA0707000E7F001E1401001C15F8EA3C0F12381503 D8781F14F000701380A2D8F03F1307020013E012005B017E130F16C013FE5B151F120149 1480A2153F000315005BA25D157EA315FE5D00011301EBF8030000130790387C1FF8EB3F F9EB07E1EB00035DA21407000E5CEA3F80007F495AA24A5AD8FF0090C7FC143E007C137E 00705B387801F0383803E0381E0FC06CB4C8FCEA03F8263B79A72C>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fg cmsy8 8 1 /Fg 1 1 df0 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fh cmr8 8 9 /Fh 9 62 df48 D<130C133C137CEA03FC12FFEAFC7C1200B3 B113FE387FFFFEA2172C7AAB23>III<140EA2 141E143EA2147E14FEA2EB01BE1303143E1306130E130C131813381330136013E013C0EA 0180120313001206120E120C5A123812305A12E0B612FCA2C7EA3E00A9147F90381FFFFC A21E2D7EAC23>I<000CEB0180380FC01F90B512005C5C14F014C0D80C7EC7FC90C8FCA8 EB1FC0EB7FF8380DE07C380F801F01001380000E130F000CEB07C0C713E0A2140315F0A4 127812FCA448EB07E012E0006014C00070130F6C14806CEB1F006C133E380780F83801FF E038007F801C2D7DAB23>I56 DI61 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fi cmmi8 8 4 /Fi 4 111 df<123C127EB4FCA21380A2127F123D1201A312031300A25A1206120E5A5A 5A126009157A8714>59 D78 D<1307EB0F80EB1FC0A2EB0F80EB070090C7 FCA9EA01E0EA07F8EA0E3CEA1C3E123812301270EA607EEAE07C12C013FC485A12001201 5B12035BA21207EBC04014C0120F13801381381F01801303EB0700EA0F06131EEA07F8EA 01F0122E7EAC18>105 D<3907C007E0391FE03FF83918F8783E393879E01E39307B801F 38707F00126013FEEAE0FC12C05B00815C0001143E5BA20003147E157C5B15FC0007ECF8 081618EBC00115F0000F1538913803E0300180147016E0001F010113C015E390C7EAFF00 000E143E251F7E9D2B>110 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fj cmmi10 10.95 31 /Fj 31 123 df<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A798919>58 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A 120E5A1218123812300B1C798919>I<183818FC1703EF0FF8EF3FE0EFFF80933803FE00 EE0FF8EE3FE0EEFF80DB03FEC7FCED0FF8ED3FE0EDFF80DA03FEC8FCEC0FF8EC3FE0ECFF 80D903FEC9FCEB0FF8EB3FE0EBFF80D803FECAFCEA0FF8EA3FE0EA7F8000FECBFCA2EA7F 80EA3FE0EA0FF8EA03FEC66C7EEB3FE0EB0FF8EB03FE903800FF80EC3FE0EC0FF8EC03FE 913800FF80ED3FE0ED0FF8ED03FE923800FF80EE3FE0EE0FF8EE03FE933800FF80EF3FE0 EF0FF8EF03FC17001838363678B147>II<126012F8B4FCEA7FC0EA1FF0EA07FCEA 01FF38007FC0EB1FF0EB07FCEB01FF9038007FC0EC1FF0EC07FCEC01FF9138007FC0ED1F F0ED07FCED01FF9238007FC0EE1FF0EE07FCEE01FF9338007FC0EF1FF0EF07F8EF01FCA2 EF07F8EF1FF0EF7FC0933801FF00EE07FCEE1FF0EE7FC04B48C7FCED07FCED1FF0ED7FC0 4A48C8FCEC07FCEC1FF0EC7FC04948C9FCEB07FCEB1FF0EB7FC04848CAFCEA07FCEA1FF0 EA7FC048CBFC12FC1270363678B147>I<17075F84171FA2173F177FA217FFA25E5EA24C 6C7EA2EE0E3F161E161C1638A21670A216E0ED01C084ED0380171FED07005D150E5DA25D 157815705D844A5A170F4A5A4AC7FC92B6FC5CA2021CC7120F143C14384A81A24A140713 015C495AA249C8FC5B130E131E4982137C13FED807FFED1FFEB500F00107B512FCA219F8 3E417DC044>65 D<49B712F818FF19E090260001FEC7EA3FF0F007F84B6E7E727E850203 815D1A80A20207167F4B15FFA3020F17004B5C611803021F5E4B4A5A180FF01FE0023F4B 5A4B4A5ADD01FEC7FCEF07F8027FEC7FE092B6C8FC18E092C7EA07F84AEC01FE4A6E7E72 7E727E13014A82181FA213034A82A301075F4A153FA261010F167F4A5E18FF4D90C7FC01 1F5E4A14034D5A013FED1FF04D5A4AECFFC0017F020790C8FCB812FC17F094C9FC413E7D BD45>I<49B712F818FF19C0D9000190C7EA3FF0F00FF84BEC03FCF000FE197F0203EE3F 805DF11FC0A20207EE0FE05D1AF0A2020F16075DA21AF8141F5DA2190F143F5DA21AF014 7F4B151FA302FF17E092C9123FA21AC049177F5C1A8019FF010318005C4E5A6101071603 4A5E4E5A180F010F4C5A4A5E4E5A4EC7FC011F16FE4A4A5AEF07F8013FED0FE0EF3FC04A 49B4C8FC017FEC0FFCB812F017C004FCC9FC453E7DBD4B>68 D<49B56C49B512F81BF0A2 90C76D9039000FFE004AEE03F0705D735A03DF150302037F038F5E82190791380787FC03 0793C7FC1503705C140F91260E01FF140EA26F151E021E80021C017F141C83193C023C6D 7E02381638161F711378147802706D6C1370A2040714F002F0804A01035C8318010101EC 01FF4A5E82188313034A91387FC380A2EF3FC7010716E791C8001F90C8FC18F718FF4981 010E5E1707A2131E011C6F5AA2013C1501137C01FE6F5AEA03FFB512FC187818704D3E7D BD49>78 D<49B77E18F818FFD90001D900017F9438003FE04BEC0FF0727E727E14034B6E 7EA30207825DA3020F4B5A5DA24E5A141F4B4A5A614E5A023F4B5A4B4A5A06FEC7FCEF03 FC027FEC0FF04BEBFF8092B500FCC8FC5F9139FF8001FE92C7EA7F80EF1FC084496F7E4A 1407A28413035CA2170F13075C60171F130F5CA3011F033F5B4AEE038018E0013F17071A 004A021F5B496C160EB600E090380FF01E05075B716C5ACBEAFFE0F03F8041407DBD45> 82 D86 D<027FB5D88007B512C091B6FCA2020101F8C7EBF8009126007FE0EC7F804C92C7FC033F 157C701478616F6C495A4E5A6F6C495A4EC8FC180E6F6C5B606F6C5B6017016F6C485A4D 5A6F018FC9FC179E17BCEE7FF85F705AA3707EA283163F167FEEF7FCED01E7EEC3FEED03 83ED070392380E01FF151E4B6C7F5D5D4A486D7E4A5A4A486D7E92C7FC140E4A6E7E5C4A 6E7E14F0495A49486E7E1307D91F806E7ED97FC014072603FFE0EC1FFF007F01FC49B512 FEB55CA24A3E7EBD4B>88 D97 DIIII<163EEEFFC0923803 E1E0923807C0F0ED0F811687ED1F8F160F153FA217E092387E038093C7FCA45DA514015D A30103B512FCA390260003F0C7FCA314075DA4140F5DA5141F5DA4143F92C8FCA45C147E A414FE5CA413015CA4495AA35CEA1E07127F5C12FF495AA200FE90C9FCEAF81EEA703EEA 7878EA1FF0EA07C02C537CBF2D>III<143C14FEA21301A314FCEB00701400AD137E3801FF80 3803C7C0EA0703000F13E0120E121C13071238A2EA780F007013C0A2EAF01F1480120013 3F14005B137EA213FE5BA212015B0003130E13F0A20007131EEBE01CA2143CEBC0381478 147014E013C13803E3C03801FF00EA007C173E7EBC1F>I108 D<01F8D907F0EB07F8D803FED93FFEEB1FFE28078F80F81FEB781F3E0F0F81C00F81E00F 803E0E07C78007C3C007C0001CD9CF00EBC78002FEDAEF007F003C4914FE0038495C4948 5C12780070495CA200F0494948130F011F600000495CA2041F141F013F6091C75B193F04 3F92C7FC5B017E92C75A197E5E01FE9438FE01C049027E14FCA204FE01011303000106F8 1380495CF20700030115F00003190E494A151E1A1C03035E0007943800F8F0494AEC7FE0 D801C0D900E0EC1F804A297EA750>I111 D114 D<147014FC1301A25CA21303A25CA21307A25CA2130FA25CA2007FB512F0B6 FC15E039001F8000133FA291C7FCA25BA2137EA213FEA25BA21201A25BA21203A25BA212 07EC01C013E01403000F1480A2EBC0071500140E141E5C000713385C3803E1E03801FF80 D8003EC7FC1C3A7EB821>116 D<017E147848B4EB01FC2603C7C013FED807031303000F 13E0120E121C0107130100381400167ED8780F143E00705B161EEAF01F4A131C1200133F 91C7123C16385B137E167801FE14705B16F016E0120149EB01C0A2ED0380A2ED0700A200 00140E5D6D133C017C5B6D5B90381F03C0903807FF80D901FCC7FC27297EA72C>118 D<013EEE0380D9FF800107EB0FE02601C3E090381F801FD8038117F0380701F0000E153F 001E1600D81C03160F003C170700384BEB03E0D87807147E00705B1801D8F00F14FE4A49 14C01200131FDA800114034C1480133F140003031407494A1400137EA26001FE0107140E 495C60A360150F017C5E017E011F14F0705B6D0139495A6D903970F8038090280FC0E07C 0FC7FC903A03FFC01FFC903A007F0007F03C297EA741>II<137C48B4EC 03802603C7C0EB0FC0EA0703000F7F000E151F001C168013071238163FD8780F15000070 5BA2D8F01F5C4A137E1200133F91C712FE5E5B137E150113FE495CA2150300015D5BA215 075EA2150F151F00005D6D133F017C137F017E13FF90393F03DF8090380FFF1FEB01FC90 C7123F93C7FCA25DD80380137ED80FE013FE001F5C4A5AA24848485A4A5A6CC6485A001C 495A001E49C8FC000E137C380781F03803FFC0C648C9FC2A3B7EA72D>I<02F8130ED903 FE131ED90FFF131C49EB803C49EBC0784914F090397E07F1E09038F800FF49EB1FC049EB 07800001EC0F006C48131E90C75A5D5D4A5A4A5A4A5A4AC7FC143E14785C495A495A495A 49C8FC011E14E05B5B4913014848EB03C0485AD807F8EB078048B4131F3A1F87E07F0039 1E03FFFE486C5B00785CD870005B00F0EB7FC048011FC7FC27297DA72A>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fk cmbx12 14.4 46 /Fk 46 122 df<171FA24D7EB3B3A4007FBD1280A2BE12C0A36C1C80A2CAD83F80CAFCB3 B3A471CBFCA25A5B79CA69>43 D46 D<913803FFC0023F13FC91B6FC010315C0010F018113F0903A 1FFC003FF849486D7E49486D7E49486D7E48496D138048496D13C0A24817E04890C813F0 A34817F8A24817FC49157FA3007F17FEA600FF17FFB3A5007F17FEA6003F17FCA26D15FF A26C17F8A36C17F0A26C6D4913E0A26C6D4913C06C17806E5B6C6D4913006D6C495AD91F FCEB3FF8903A0FFF81FFF06D90B55A01011580D9003F01FCC7FC020313C0384F7BCD43> 48 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7FCB3B3B3 A6007FB712FEA52F4E76CD43>II<91380FFFC091B5 12FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803F86E7E4916 80D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C13 005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E003 0113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA 0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F04A13C06C48 4A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD9 001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167FA216FF5D5D A25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC1F005C147E 147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A485A90C8FC 123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>III<121F7F7FEBFF8091B81280A45A1900606060A2606060485F0180C86C C7FC007EC95A4C5A007C4B5A5F4C5A160F4C5A484B5A4C5A94C8FC16FEC812014B5A5E4B 5A150F4B5AA24B5AA24B5A15FFA24A90C9FCA25C5D1407A2140FA25D141FA2143FA4147F 5DA314FFA55BAC6D5BA2EC3FC06E5A395279D043>I<913807FFC0027F13FC0103B67E01 0F15E090261FFC0113F8903A3FE0003FFCD97F80EB0FFE49C76C7E48488048486E138000 0717C04980120F18E0177FA2121F7FA27F7F6E14FF02E015C014F802FE4913806C7FDBC0 0313009238F007FE6C02F85B9238FE1FF86C9138FFBFF06CEDFFE017806C4BC7FC6D806D 81010F15E06D81010115FC010781011F81491680EBFFE748018115C048D9007F14E04848 011F14F048487F48481303030014F8484880161F4848020713FC1601824848157F173FA2 171FA2170FA218F8A27F007F17F06D151FA26C6CED3FE0001F17C06D157F6C6CEDFF806C 6C6C010313006C01E0EB0FFE6C01FCEBFFFC6C6CB612F06D5D010F1580010102FCC7FCD9 000F13C0364F7ACD43>I<91380FFF8091B512F8010314FE010F6E7E4901037F90267FF8 007F4948EB3FF048496D7E484980486F7E484980824817805A91C714C05A7013E0A218F0 B5FCA318F8A618FCA46C5DA37EA25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13F390387FF8 03011FB512E36D14C30103028313F89039007FFE03EC00401500A218F05EA3D801F816E0 487E486C16C0487E486D491380A218005E5F4C5A91C7FC6C484A5A494A5A49495B6C4849 5BD803FC010F5B9027FF807FFEC7FC6C90B55A6C6C14F06D14C0010F49C8FC010013F036 4F7ACD43>I<171F4D7E4D7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C8083047F 80167E8304FE804C7E03018116F8830303814C7E03078116E083030F814C7E031F811680 83033F8293C77E4B82157E8403FE824B800201835D840203834B800207835D844AB87EA2 4A83A3DA3F80C88092C97E4A84A2027E8202FE844A82010185A24A820103854A82010785 A24A82010F855C011F717FEBFFFCB600F8020FB712E0A55B547BD366>65 DI<932601FFFCEC01C0047F D9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7 383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F882494982494982494982 4949824990CA7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA2 98C7FC5CA2B5FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D 606C6D187EA26D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D 6C6C6C4BC7FC6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F 93C8FC030715FCDB007F14E0040101FCC9FC525479D261>IIII<9326 01FFFCEC01C0047FD9FFC013030307B600F81307033F03FE131F92B8EA803F0203DAE003 EBC07F020F01FCC7383FF0FF023F01E0EC0FF94A01800203B5FC494848C9FC4901F88249 49824949824949824949824990CA7E494883A2484983485B1B7F485B481A3FA24849181F A3485B1B0FA25AA298C8FC5CA2B5FCAE6C057FB712E0A280A36C94C7003FEBC000A36C7F A36C7FA27E6C7FA26C7F6C7FA26D7E6D7F6D7F6D6D5E6D7F6D01FC93B5FC6D13FF6D6C6D 5C6E01F0EC07FB020F01FEEC1FF10203903AFFF001FFE0020091B6EAC07F033FEE001F03 0703FC1307DB007F02E01301040149CAFC5B5479D26A>III80 D82 D<003FBC1280A59126C0003F9038C0007F49C71607D87FF806 0113C001E08449197F49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C9 94C7FCB3B3AC91B912F0A553517BD05E>84 D86 D97 DI<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001 FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48 92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC 3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC 020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91 B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980 485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C 6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9 003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901 817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191 C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01 F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE 903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F497E 000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3 A6B612E0A51B547BD325>I 107 DIII<913801FFE0021F13FE91B612C0010315F0010F9038 807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8 6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2 6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80 7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F 13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F 92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61 6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14 80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF 150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980 127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C 816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00 F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414 FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE 07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203 13802A4D7ECB34>II119 D121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fl cmbx12 20.74 12 /Fl 12 117 df49 D<92380FFFE04AB67E020F15F0027F15FE49B87E4917E0010F17F8013F8349D9C01F14FF 9027FFFC0001814801E06D6C80480180021F804890C86C8048486F8048486F8001FF6F80 4801C06E8002F081486D18806E816E18C0B5821BE06E81A37214F0A56C5BA36C5B6C5B6C 5B000313C0C690C9FC90CA15E060A34E14C0A21B80601B0060626295B55A5F624D5C624D 5C4D91C7FC614D5B4D13F04D5B6194B55A4C49C8FC4C5B4C5B4C13E04C5B604C90C9FCEE 7FFC4C5A4B5B4B5B4B0180EC0FF04B90C8FC4B5A4B5A4B48ED1FE0EDFFE04A5B4A5B4A90 C9FC4A48163F4A5ADA3FF017C05D4A48167F4A5A4990CA12FFD903FC160749BAFC5B4919 805B5B90BBFC5A5A5A5A481A005A5ABCFCA462A44C7176F061>I<923801FFFE033FEBFF F84AB7FC020F16E0023F16F84A16FE49B97E49DA003F80010F01F0010714F04901800101 804948C880D97FF86F7F02E081496C834801FC6F148014FF486E6E14C08181481AE081A9 6C5C1BC06C4A5C6C5C6D90C815806D5AD90FF85D90CA150062606295B55A4D5C624D5C4D 5C4D91C7FC4D13FC4D5B4CB512E0047F1480037FB548C8FC92B612F818C018F8F0FF806F 15F092C7003F13FC050713FF050114C071807213F8727F727F867214801BC07214E01BF0 A27214F81BFCA37214FEA31BFFEBFF80000313E0487F001F13FC487FA2487FA2B67EA31B FEA3601BFCA292C8FC6C1AF84A5D4A18F06C494B14E05C6C01C04B14C06C90C915804E14 006C6D4B5B6C01F092B55A6C01FC4A5C27007FFFC001075C6D01FE013F14C0010F90B85A 6D4DC7FC010117F8D9003F16E0020F93C8FC020015F0030749C9FC507378F061>II<0170187001FEEF01F86D6C160F02F8167F DAFF80EC07FF03FE49B5FC92B85A6262A26297C7FC61616119E061614EC8FC18F86018C0 95C9FC17F817C0020701F8CAFC91CDFCB0923801FFFC031FEBFFE092B612FC020315FF02 0F16C04A16F0027FD9003F7FDAFFF0010F13FE038001037F4AC76C8002F86E804A6F7F4A 6F7F4A834A6F7F91C980137E017C707F90CAFC1B80A21BC0A2841BE0A51BF0A313FE3803 FF80000F7F4813F0487F5A80B5FCA41BE0A44E14C05C7E4A18805C4A5D6C90C9150001E0 606C6C5E6D606C6C4C5B7F000794B55A6C6C6C4A5C6C6D4A5C6E4A5C26007FF8021F49C7 FC6DB4027F5B6DD9F007B55A6D90B712E0010317806D4CC8FC6D6C15F8021F15C002034A C9FCDA003F13804C7376F061>I<96267FFFE01670063FB6ED01F80503B700F01403053F 04FC14074CB96C130F040706E0131F043F72133F93BA00FC137F0303DC00076D13FF030F 03C09039003FFF814B02FCC8000713C3037F02E0030113F792B600806F6CB5FC02034ACA 121F4A02F8834A02E0834A4A1701027F4A8391B548CC7E494A85495C4C854988494A8549 4A85495C8A4991CDFC90B54886A2484A1B7FA2481E3F5D481E1F5D5A1F0FA2485CA3481E 075DA2F703F0489BC7FCA45DA2B6FCB27EA281A47EA2F703F06FF307F87EA36C80A21F0F 7E6F1CF07E6F1B1F7E20E06C6E1B3F816DF57FC06D80F7FF806D806D6E4F13006D6E616D 525A826D6E4F5A6D6E4F5A6E6D6C4E5A021F6EF0FFE06E6E4D5B6E02F84D5B6E02FE050F 90C7FC02006E6CEE3FFE6F02F0EEFFFC031F02FE03035B6FDAFFC0021F13E0030303FF01 03B55A030093B7C8FC043F18FC040718F0040118C0DC003F94C9FC050316F8DD003F1580 DE007F01F0CAFC757A75F78C>67 D<92383FFFF80207B612E0027F15FC49B87E010717E0 011F83499026F0007F13FC4948C7000F7F90B502036D7E486E6D806F6D80727F486E6E7F 8486727FA28684A26C5C72806C5C6D90C8FC6D5AEB0FF8EB03E090CAFCA70507B6FC041F B7FC0303B8FC157F0203B9FC021FECFE0391B612800103ECF800010F14C04991C7FC017F 13FC90B512F04814C0485C4891C8FC485B5A485B5C5A5CA2B5FC5CA360A36E5DA26C5F6E 5D187E6C6D846E4A48806C6D4A4814FC6C6ED90FF0ECFFFC6C02E090263FE07F14FE0001 9139FC03FFC06C91B6487E013F4B487E010F4B1307010303F01301D9003F0280D9003F13 FC020101F8CBFC57507ACE5E>97 D<93387FFF80030FB512FC037FECFF804AB712E00207 16F8021F16FE027FD9F8077F49B5D8C000804991C7003F13E04901FC020F7F49496E7F49 498049496E7F49496E7F90B55A48727E92C914804884485B1BC048841BE0485BA27313F0 5AA25C5AA21BF885A2B5FCA391BAFCA41BF002F8CCFCA67EA3807EA47E806CF103F0F207 F86C7F1A0F6C6E17F06C191F6F17E06C6E163F6D6DEE7FC06D6D16FF6D6D4B13806D6D4B 13006D6D6CEC0FFE6D02E0EC3FFC6D02F8ECFFF86D9126FFC00F5B023F91B65A020F1780 02034CC7FC020016F8031F15E0030392C8FCDB000F13E04D507BCE58>101 D<903801FFFCB6FCA8C67E131F7FB3AD95380FFFE095B512FE05036E7E050F15E0053F15 F84D81932701FFF01F7F4CD900077FDC07FC6D80DC0FF06D80DC1FC07F4C48824CC8FC04 7E6F7F5EEDFDF85E03FF707F5EA25EA25EA293C9FCA45DB3B3A6B8D8E003B81280A86178 79F76C>104 D<902601FFFCEC7FFEB6020FB512F0057F14FE4CB712C0040716F0041F82 047F16FE93B5C66C7F92B500F0010F14C0C66C0380010380011F4AC76C806D4A6E8004F0 6F7F4C6F7F4C6F7F4C8193C915804B7014C0861DE0A27414F0A27414F8A47513FCA57513 FEAF5113FCA598B512F8A31DF0621DE0621DC0621D806F5E701800704B5B505B704B5B70 92B55A04FC4A5C704A5C706C010F5C05E0013F49C7FC9227FE7FFC01B55A70B712F0040F 16C0040393C8FC040015F8053F14C0050301F0C9FC94CCFCB3A6B812E0A85F6F7ACD6C> 112 D<902601FFF8EB07FEB691383FFFC094B512F00403804C14FE4C8093261FFC3F1380 93263FE07F13C0DC7F80B5FCC66C5D011FDAFE0114E06DEBF9FC16F815FB16F016E015FF 16C07114C05E72138095381FFE0093C76C5AF001E095C8FCA25DA65DB3B3A2B812F8A843 4E7ACD4F>114 D<15FFA75CA55CA45CA25CA25CA25CA25C91B5FCA25B5B5B131F5B90B9 FC120FBAFCA6D8000791C9FCB3B3A3F01FE0AE183F7014C07F187F7014806D16FF826D4B 13006E6D485AEEFE0F6E90B55A020F5D6E5D020115C06E6C5C031F49C7FC030113F03B6E 7CEC4B>116 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fm cmtt10 10.95 81 /Fm 81 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00 A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14 00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2 02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F 90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2 29387DB730>I37 DII<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00485A5B 12035B485A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127FA47F123FA27F121FA2 6C7EA27F12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB01FF7F 147F141E184771BE30>I<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB7F8013 3F14C0131FEB0FE014F01307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4130114 FCA2130314F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A485AEA 3FE0485A485A90C7FC5A1278184778BE30>I<14E0497E497EA60038EC0380007EEC0FC0 D8FF83EB3FE001C3137F9038F3F9FF267FFBFB13C06CB61280000FECFE00000314F86C5C 6C6C13C0011F90C7FC017F13C048B512F04880000F14FE003FECFF80267FFBFB13C026FF F3F913E09038C3F87F0183133FD87E03EB0FC00038EC0380000091C7FCA66D5A6D5A2327 7AAE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76CC8FCAF143EA229297DAF 30>II<007FB612F0A2B712 F8A36C15F0A225077B9E30>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00 0C0C6E8B30>I<16F01501ED03F8A21507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80A2EDFF 00A24A5AA25D1403A24A5AA24A5AA24A5AA24A5AA24A5AA24AC7FCA2495AA25C1303A249 5AA2495AA2495AA2495AA2495AA249C8FCA2485AA25B1203A2485AA2485AA2485AA2485A A2485AA248C9FCA25AA2127CA225477BBE30>I<14FE903807FFC0497F013F13F8497F90 B57E48EB83FF4848C6138049137F4848EB3FC04848EB1FE049130F001F15F0491307A248 48EB03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA36D1303003F15F8A26D13 07001F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313006CEB FFFE6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>IIIII<000FB612804815C05AA316800180C8FCAEEB83FF019F13C090B512 F015FC8181D9FE0313809039F0007FC049133F0180EB1FE06CC7120F000E15F0C81207A2 16F81503A31218127EA2B4FC150716F048140F6C15E06C141F6DEB3FC06D137F3A3FE001 FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7FC25397BB730>II<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA7FE0 A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>58 D I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B0107 13C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA7F F87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE91 381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7FC A2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<12 78127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F010313 E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C0207 13C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813E0 000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>II< 147F4A7EA2497FA4497F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA5 90387F007FA4498049133F90B6FCA34881A39038FC001F00038149130FA4000781491307 A2D87FFFEB7FFFB56CB51280A46C496C130029397DB830>65 D<007FB512F0B612FE6F7E 82826C813A03F8001FF815076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B6 5A5E4BC7FC6F7E16E0829039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E 4B5A1503ED1FFC007FB6FCB75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C9039 03FFF03E49EBFC7E011F13FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B 48481303A2484813015B123F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE 123FA27F121F6D13016C6C14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E0 7FE06DB512C06D14806D1400010713FC6D13F09038007FC0273A7CB830>I<003FB512E0 4814FCB67E6F7E6C816C813A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A216 3F17C0161FA4EE0FE0AC161F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED 7FF0003FB65A485DB75A93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED8 03F8C7123FA8EE1F0093C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE 0FE0A9007FB7FCB8FCA46C16C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FC C7121FA8EE0F8093C7FCA5153E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8 487FB5FCA27E6C5B2A387EB730>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90 B6FC4813C1EC007F4848133F4848131F49130F485A491307121F5B123F491303A2127F90 C7FC6F5A92C8FC5A5AA892B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F12 1F6D130F120F7F6C6C131FA2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F3 0103EBC1F0010090C8FC293A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C 496C13F06C496C13E0D803F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D 4813F0B56C4813F8A26C496C13F06C496C13E02D387FB730>I<007FB6FCB71280A46C15 00260007F0C7FCB3B3A8007FB6FCB71280A46C1500213879B730>I<383FFFF8487FB57E A26C5B6C5BD801FCC9FCB3B0EE0F80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730 >76 DII<90383FFFE048B512FC000714FF4815804815C04815E0EBF80001E0133FD87F 80EB0FF0A290C71207A44815F8481403B3A96C1407A26C15F0A36D130FA26D131F6C6CEB 3FE001F813FF90B6FC6C15C06C15806C1500000114FCD8003F13E0253A7BB830>I<007F B512F0B612FE6F7E16E0826C813903F8003FED0FFCED03FE15016F7EA2821780163FA616 7F17005EA24B5A1503ED0FFCED3FF890B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0 B57EA46C5B29387EB730>I<003FB57E4814F0B612FC15FF6C816C812603F8017F913800 3FF0151F6F7E15071503821501A515035E1507150F4B5A153F4AB45A90B65A5E93C7FC5D 8182D9F8007FED3FE0151F150F821507A817F8EEF1FCA53A3FFF8003FB4801C0EBFFF8B5 6C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB730>82 D<90390FF803C0D97FFF13 E048B512C74814F74814FF5A381FF80F383FE001497E4848137F90C7123F5A48141FA215 0FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13FF6C14E0000114F86C80011F13 FF01031480D9003F13C014019138007FE0151FED0FF0A2ED07F8A2007C140312FEA56C14 0716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B51280160000FD5CD8FC7F13F8D8F8 1F5BD878011380253A7BB830>I<003FB712C04816E0B8FCA43AFE003F800FA8007CED07 C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730>I<3B7FFFC007FFFCB56C4813 FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600A36C6C14FE6D13016D5CEC8003 90393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC9038007FFCEC1FF02F3980B730 >II< D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C486D13E0D81FC09038001FC000 0F1680A76D143F00071600A7000390380F803E9039F01FC07EEC3FE0A3EC7FF0A2147D00 01157CA29039F8FDF8FCA314F8A300005D01F913FCA2ECF07CA201FD137DA2017D5CECE0 3DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D397FB730>I<3A3FFF01FFF848 01837F02C77FA202835B6C01015B3A01FC007F806D91C7FC00005C6D5BEB7F01EC81FCEB 3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA26D90C8FCA4497FA2497FA2815B 81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001143F49800003141F4980000714 0FD87FFEEB7FFFB590B5128080A25C6C486D130029387DB730>I<007FB5FCB61280A415 0048C8FCB3B3B3A5B6FC1580A46C140019476DBE30>91 D<007FB5FCB61280A47EC7123F B3B3B3A5007FB5FCB6FCA46C140019477DBE30>93 D<1307EB1FC0EB7FF0497E000313FE 000FEBFF80003F14E0D87FFD13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F00010 EB00401D0E77B730>I<007FB612F0A2B712F8A36C15F0A225077B7D30>I97 DII<913801 FFE04A7F5CA28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D8 1FF0133F49131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F 6C7E6D137F390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F0103 13C0D907FCC8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E4880480181 13803A07FC007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A 5AB7FCA516F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A 03FFC07FE06C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>IIII<14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA00 01B3A9003FB612C04815E0B7FCA27E6C15C023397AB830>I107 D<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB730>I< 02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F13872607FE07 EB03F801FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80B54801 8F13C0A46C486C01071380322881A730>II<49B4FC 010F13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81FE0EB0F F0A24848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D130300 3F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B512806C1500 6C6C13FC6D5B010F13E0010190C7FC272A7CA830>II<49B413F8010FEBC1FC013F13F14913FD48B6FC5A481381390F FC007F49131F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037FA26C6C 1307150F6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F13F101 0F13C1903803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>II< 90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E007F91 C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02001380 007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC5D5D00 FC14F0D8F83F13C026780FFEC7FC222A79A830>III<3B3FFFC07F FF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005DA26D13 0F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE01075BA214 F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFFE0486D 4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE00015D EC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FBA29039 3FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801C37FB5 80A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3ECE7F06D B45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1F89038 1F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500C11480 14E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A26C16C0 6C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805BA214C0 010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D147FA2 6E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387EB8FF0 EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316FC90C7 EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A4A5A49 90C7FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A485A485A48B7 FCB8FCA46C15FE28277DA630>II<127CA2 12FEB3B3B3AD127CA207476CBE30>II<017C133848B4 137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF8713E0010713C0486C1380D87C 0113003838007C1F0C78B730>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fn cmr10 10.95 85 /Fn 85 125 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907 F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7 FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11 DIII<121EEA7F80EAFFC0A9EA7F80ACEA3F00AC 121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33 D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013 00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E 0018130C0038131C003013181C1C7DBE2D>I<013F1603D9FFC04B7E2601E0E0150F2607 C070151F48486C4BC7FC023E157E48486C15FE48D90FC0EB03FC003ED90EF0EB0FF8DA0F 3F13FD007E903A070FFFF1F0007C0200EB03E0160000FC6D6C495A170F604DC8FC5F173E 5F17FC5F4C5A1603007CD907005B4C5A007E150F003E495C020E49C9FC003F5D6C49133E 260F803C5B023813FC6C6C485B3A01E0E001F03800FFC090273F0003E0133F90C70007EC FFC09339C001E0E0923A0F8007C070031F49487E0400143C033E90381F001C037E497F03 7C133E4B150F0201027E7F4B137C4A5A020702FCEB03805D4A5A141F92C7FC143E147E14 7C5CA2495A0103037CEB07005C4948147E010F033E5B4A160E49C8123F496F5B013E9238 0F803C49173801FC6F6C5A49923801E0E0496FB45A0160043FC7FC41497BC34C>37 DI<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013 C0A312011380120313005A120E5A1218123812300B1C79BE19>I<1430147014E0EB01C0 EB03801307EB0F00131E133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FC A25AA3123E127EA6127C12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA2 12017F12007F13787F133E131E7FEB07801303EB01C0EB00E014701430145A77C323>I< 12C07E12707E7E121E7E6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA21480130F A214C0A3130714E0A6130314F0B214E01307A614C0130FA31480A2131F1400A25B133EA2 5BA2137813F85B12015B485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<150615 0FB3A9007FB912E0BA12F0A26C18E0C8000FC9FCB3A915063C3C7BB447>43 D<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A 120E5A1218123812300B1C798919>II<121EEA7F80A2EAFFC0A4 EA7F80A2EA1E000A0A798919>IIII< EB07FC90383FFF8090B512E03903F01FF83907C007FC390F0001FE001E6D7E001C158000 3CEC7FC05AED3FE01270B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F16 8015FF16004A5A5D4A5A4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A495A49C712 70133E133C5B4914E0485A485A485A48C7120148B6FCA25A4815C0B7FCA3243D7CBC2D> II<150E151E153EA215 7EA215FE1401A21403EC077E1406140E141CA214381470A214E0EB01C0A2EB0380EB0700 A2130E5BA25B5BA25B5B1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC 4A7E49B6FCA3283E7EBD2D>I<00061403D80780131F01F813FE90B5FC5D5D5D15C092C7 FC14FCEB3FE090C9FCACEB01FE90380FFF8090383E03E090387001F8496C7E49137E497F 90C713800006141FC813C0A216E0150FA316F0A3120C127F7F12FFA416E090C7121F12FC 007015C012780038EC3F80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B5 5A013F90C7FCEB07F8243F7CBC2D>II<1238123C123F90B612FCA316F85A16F016E00078C712010070EC03C0ED078016005D 48141E151C153C5DC8127015F04A5A5D14034A5A92C7FC5C141EA25CA2147C147814F8A2 13015C1303A31307A3130F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>III<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EA FFC0A4EA7F80A2EA1E000A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FC B3121E127FEAFF80A213C0A4127F121E1200A412011380A3120313005A1206120E120C12 1C5A1230A20A3979A619>I<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A2 6C18E03C167BA147>61 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15 C3A291380381FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D 7E91B6FCA249819138800001A249C87EA24982010E157FA2011E82011C153FA2013C8201 38151FA2017882170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65 DII IIIIII<011FB512FCA3D9000713006E5A1401B3B3A6123FEA7F 80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07EC7FC 3800FFF8EB3FC026407CBD2F>IIIIIII82 DI<003FB91280A3903AF0007FE001018090393FC0003F48C7ED1FC0007E170712 7C00781703A300701701A548EF00E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42 >IIII<007FB5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48 EC1F806D6C92C7FC171E6D6C141C6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13 036F485ADA1FF090C8FC020F5BEDF81E913807FC1C163C6E6C5A913801FF7016F06E5B6F 5AA26F7E6F7EA28282153FED3BFEED71FF15F103E07F913801C07F0203804B6C7EEC0700 4A6D7E020E6D7E5C023C6D7E02386D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749 C86C7E496F7E497ED9FFC04A7E00076DEC7FFFB500FC0103B512FEA33F3E7EBD44>II<003FB712F8A391C7EA1FF013F801E0 EC3FE00180EC7FC090C8FC003EEDFF80A2003C4A1300007C4A5A12784B5A4B5AA200704A 5AA24B5A4B5AA2C8485A4A90C7FCA24A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8 FCA2495A4948141CA2495A495AA2495A495A173C495AA24890C8FC485A1778485A484815 F8A24848140116034848140F4848143FED01FFB8FCA32E3E7BBD38>II<486C13C00003130101001380481303000EEB0700 48130E0018130C0038131C003013180070133800601330A300E01370481360A400CFEB67 8039FFC07FE001E013F0A3007F133FA2003F131F01C013E0390F0007801C1C73BE2D>I< EAFFFCA4EA003CB3B3B3B3ABEAFFFCA40E5B7FC319>I97 DI<49B4FC010F13E090383F00F801 7C131E4848131F4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290 C9FC5AAB6C7EA3003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C 6C137890383F01F090380FFFC0D901FEC7FC222A7DA828>IIII< 167C903903F801FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC 0600000F6EC7FC49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E039 03FE0FC026071FFFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15 E06C810003813A0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E 157E6C5D6C6C495A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D 7EA82D>III<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC 147FEB7FFFA313017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03 F0381E07C0380FFF803801FC00185185BD1C>III<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B 7803F03C01F80007903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91 C75B13FF4992C7FCA2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C> I<3901F801FE00FF903807FFC091381E07E091387803F000079038E001F82603F9C07F00 01138001FB6D7E91C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14 FF010713E090381F81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F 15F04848EB01F8A2003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F8 6C6CEB03F0A26C6CEB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFF F0010090C7FC282A7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F0 3A07FFC001FC6C496C7E6C90C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0F F0A4EE1FE0A2EE3FC06D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0 DA3FFFC7FCEC07F891C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C9038 1F80F090397F00387C01FC131CD803F8130E4848EB0FFC150748481303121F485A150148 5AA448C7FCAA6C7EA36C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990 383F81F190380FFFC1903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807 E000FFEB1FF8EC787CECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A3 5BB3A5487EB512FEA31F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E 1307003C1303127C0078130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C 7F6C1480000114C0D8003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15 F07E14016C14E06CEB03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I< 131CA6133CA4137CA213FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A9 12009038FE01C0A2EB7F03013F138090381F8700EB07FEEB01F81B397EB723>IIII< B539F01FFFE0A30003D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7 FC90380FE00EECF01E6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147B ECF1FC903801E1FEECC0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80 486C80000F4A7EB539803FFFF8A32D277FA630>II<001FB61280A2EBE0000180140049485A001E 495A121C4A5A003C495A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A 90393FC00380A2EB7F80EBFF005A5B484813071207491400485A48485BA248485B484813 7F00FF495A90B6FCA221277EA628>II I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fo cmbx10 10.95 50 /Fo 50 123 df12 D14 D<16F04B7EB3AD007FBA12E0BB12F0A46C19E0C8D801F8C9FCB3AD6F5A44467AB951>43 D46 D<161C163E167EA216FE16FC150116F8A2150316F0A2150716E0150F16C0A2151F168015 3F1600A25D157E15FE5DA214015DA214035D14075DA2140F5D141F5DA2143F92C7FC5C14 7EA214FE5CA213015C13035CA213075C130F5CA2131F5C133F91C8FCA25B137EA213FE5B 12015BA212035B12075BA2120F5B121F5BA2123F90C9FCA25A127E12FE5AA25A1278275B 7AC334>I<140F143F5C495A130F48B5FCB6FCA313F7EAFE071200B3B3A8007FB612F0A5 243C78BB34>49 D<903803FF80013F13F890B512FE00036E7E4881260FF80F7F261FC003 7F4848C67F486C6D7E6D6D7E487E6D6D7EA26F1380A46C5A6C5A6C5A0007C7FCC8FC4B13 00A25E153F5E4B5AA24B5A5E4A5B4A5B4A48C7FC5D4A5AEC1FE04A5A4A5A9139FF000F80 EB01FC495A4948EB1F00495AEB1F8049C7FC017E5C5B48B7FC485D5A5A5A5A5AB7FC5EA4 293C7BBB34>I<903801FFE0010F13FE013F6D7E90B612E04801817F3A03FC007FF8D807 F06D7E82D80FFC131F6D80121F7FA56C5A5E6C48133FD801F05CC8FC4B5A5E4B5A4A5B02 0F5B902607FFFEC7FC15F815FEEDFFC0D9000113F06E6C7E6F7E6F7E6F7E1780A26F13C0 A217E0EA0FC0487E487E487E487EA317C0A25D491580127F49491300D83FC0495A6C6C49 5A3A0FFE01FFF86CB65A6C5DC61580013F49C7FC010313E02B3D7CBB34>II<00071538D80FE0EB01F801FE133F90 B6FC5E5E5E5E93C7FC5D15F85D15C04AC8FC0180C9FCA9ECFFC0018713FC019F13FF90B6 7E020113E09039F8007FF0496D7E01C06D7E5B6CC77FC8120F82A31780A21207EA1FC048 7E487E12FF7FA21700A25B4B5A6C5A01805C6CC7123F6D495AD81FE0495A260FFC075B6C B65A6C92C7FCC614FC013F13F0010790C8FC293D7BBB34>I66 D<922607FFC0130E92B500FC131E 020702FF133E023FEDC07E91B7EAE1FE01039138803FFB499039F80003FF4901C0130001 3F90C8127F4948151FD9FFF8150F48491507485B4A1503481701485B18004890CAFC197E 5A5B193E127FA349170012FFAC127F7F193EA2123FA27F6C187E197C6C7F19FC6C6D16F8 6C6D150119F06C6D15036C6DED07E0D97FFEED0FC06D6CED3F80010F01C0ECFF006D01F8 EB03FE6D9039FF801FFC010091B55A023F15E002071580020002FCC7FC030713C03F407A BE4C>IIII<922607FFC0130E92B500FC131E020702 FF133E023FEDC07E91B7EAE1FE01039138803FFB499039F80003FF4901C01300013F90C8 127F4948151FD9FFF8150F48491507485B4A1503481701485B18004890CAFC197E5A5B19 3E127FA34994C7FC12FFAB0407B612FC127F7FA3003F92C7383FFE00A27F7EA26C7FA26C 7F6C7FA26C7F6C7FD97FFE157F6D6C7E010F01E014FF6D01F813036D9038FF801F010091 B512F3023F15C00207ED803E02009138FE000E030701E090C7FC46407ABE52>I73 D75 D78 DI82 D<903A03FFC001C0011FEBF803017FEBFE0748B6128F4815DF48010013FFD80FF8130F48 481303497F4848EB007F127F49143F161F12FF160FA27F1607A27F7F01FC91C7FCEBFF80 6C13F8ECFFC06C14FCEDFF806C15E016F86C816C816C816C16806C6C15C07F010715E0EB 007F020714F0EC003F1503030013F8167F163F127800F8151FA2160FA27EA217F07E161F 6C16E06D143F01E015C001F8EC7F8001FEEB01FF9026FFE00713004890B55A486C14F8D8 F81F5CD8F00314C027E0003FFEC7FC2D407ABE3A>I<003FB912FCA5903BFE003FFE003F D87FF0EE0FFE01C0160349160190C71500197E127EA2007C183EA400FC183F48181FA5C8 1600B3AF010FB712F8A5403D7CBC49>III<903807FFC0013F13F848B6FC48812607FE037F260FF8007F 6DEB3FF0486C806F7EA36F7EA26C5A6C5AEA01E0C8FC153F91B5FC130F137F3901FFFE0F 4813E0000F1380381FFE00485A5B485A12FF5BA4151F7F007F143F6D90387BFF806C6C01 FB13FE391FFF07F36CEBFFE100031480C6EC003FD91FF890C7FC2F2B7DA933>97 D<13FFB5FCA512077EAFEDFFE0020713FC021FEBFF80027F80DAFF8113F09139FC003FF8 02F06D7E4A6D7E4A13074A80701380A218C082A318E0AA18C0A25E1880A218005E6E5C6E 495A6E495A02FCEB7FF0903AFCFF01FFE0496CB55AD9F01F91C7FCD9E00713FCC7000113 C033407DBE3A>IIIII<903A03FF8007F0 013F9038F83FF8499038FCFFFC48B712FE48018313F93A07FC007FC34848EB3FE1001FED F1FC4990381FF0F81700003F81A7001F5DA26D133F000F5D6C6C495A3A03FF83FF8091B5 C7FC4814FC01BF5BD80F03138090CAFCA2487EA27F13F06CB6FC16F016FC6C15FF17806C 16C06C16E01207001F16F0393FE000034848EB003F49EC1FF800FF150F90C81207A56C6C EC0FF06D141F003F16E001F0147FD81FFC903801FFC02707FF800F13006C90B55AC615F8 013F14E0010101FCC7FC2F3D7DA834>I<13FFB5FCA512077EAFED1FF8EDFFFE02036D7E 4A80DA0FE07F91381F007F023C805C4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A5333F7C BE3A>II<13FFB5FCA512077EB092380FFFFEA5DB01FEC7FC4B5A ED07F0ED1FE04B5A4B5A4BC8FCEC03FC4A5A4A5A141F4A7EECFFFCA2818102E77F02C37F 148102007F826F7E6F7E151F6F7E826F7F6F7F816F7FB5D8FC07EBFFC0A5323F7DBE37> 107 D<13FFB5FCA512077EB3B3AFB512FCA5163F7CBE1D>I<01FFD91FF8ECFFC0B590B5 010713F80203DAC01F13FE4A6E487FDA0FE09026F07F077F91261F003FEBF8010007013E DAF9F0806C0178ECFBC04A6DB4486C7FA24A92C7FC4A5CA34A5CB3A4B5D8FE07B5D8F03F EBFF80A551297CA858>I<01FFEB1FF8B5EBFFFE02036D7E4A80DA0FE07F91381F007F00 07013C806C5B4A6D7E5CA25CA35CB3A4B5D8FE0FB512E0A533297CA83A>II<01FFEBFFE0B5000713FC021FEBFF80027F80DA FF8113F09139FC007FF8000701F06D7E6C496D7E4A130F4A6D7E1880A27013C0A38218E0 AA4C13C0A318805E18005E6E5C6E495A6E495A02FCEBFFF0DAFF035B92B55A029F91C7FC 028713FC028113C00280C9FCACB512FEA5333B7DA83A>II<3901FE01FE00FF903807FF804A13E04A13F0EC3F1F91387C3FF800 0713F8000313F0EBFFE0A29138C01FF0ED0FE091388007C092C7FCA391C8FCB3A2B6FCA5 25297DA82B>I<90383FFC1E48B512BE000714FE5A381FF00F383F800148C7FC007E147E A200FE143EA27E7F6D90C7FC13F8EBFFE06C13FF15C06C14F06C806C806C806C80C61580 131F1300020713C014000078147F00F8143F151F7EA27E16806C143F6D140001E013FF90 38F803FE90B55A15F0D8F87F13C026E00FFEC7FC222B7DA929>IIIIIII<003FB612F8A4D9 F80113F001C014E0495A494813C04A1380007E15005C4A5A007C5C147F4A5A495B5DC65A 495B495BA249EB007C495A5C137F494813FC484913F85C5A48EBC0011480481403481300 4848130749131F007FECFFF0B7FCA426287DA72E>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fp cmbx12 24.88 29 /Fp 29 122 df[<96260FFFFE0507B5FC060FB600E00307B612F04DB700FC92B712FE05 1F04FF020F707E94B900C0017F17E00407DEF003B97E041FDEF80F18FC047F9126FC001F D9FC3F9126FE000F7F4BB6008001006DB600C001007F030702F8C8003FB600FCC8001F7F 4B02E0030F03F003077F033F02804B03C04B7F4B49C9007F92C9123F92B54893B6484C7F 4A02F04B03F893B5FC4A4A4B4B4B804A4A4B4B5D4A4A4F8451614A91C95E4A4997C9FCA2 4A496159807D5C91B5FC4C61A375735CA275735C75735C75745B76071F90C8FCA1EA07FC A1CAFCAF101FB612FEC5B5FCA9C702FCCA6C49C912018FA17EB3B3B3B2003FB800F0011F B800F8011FB812F8A9>181 144 123 271 194 14 D[143 142 120 269 165 66 D[<0803B500C0EE01F00703B600FEEE03F8077FDBFFE015070607 B800FC150F063F05FF151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326 F8000FECC003040F4BC86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F0933900 7FFF3F030703C0051F90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A 92CD7E4A4A864A4A864A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E49 8B494A88A2495C8D90B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485CFA0F F09FC7FCA25AA45DA3B6FCB27EA381A47EA46C80FA07F0FA0FF87EA2817EA36C6F1D1F23 F07E827E223F6D6E1EE0A26D6E1D7F23C06D6E1DFF7F705213806D806D55130070646D6F 646D6F515A6E6E1B1F6E6E515A6E6E515A6E6E1BFF6E6E505B6E6E505B6E6F4F5B6E03E0 4F90C7FC6F6EF13FFE6F02FC4F5A030F02FF4E485A6F03C005075B030103F0051F5B6F03 FE057F1380043FDAFFE00303B5C8FC040F03FE033F13FC0403DBFFF80107B55A040093B8 12E0053F1A80050F4FC9FC050119F8DD003F18C0060795CAFCDE007F16F0070393CBFCDF 000314C0>141 146 115 271 168 I[138 141 120 268 153 69 D[<0803B500C0EE01F00703B600FE4C7E077FDBFFE015070607B800FC150F 063F05FF151F4DBA00E0143F050F07F8147F053F07FE14FF94BC5B04039326F8000FECC0 03040F4BC86CEBF007043F03C0030F6D5A93B648C900036D5A4B03F09339007FFF3F0307 03C0051F90B5FC4B92CB7E033F02FC18034B02F08492B648844A0380193F4A92CD7E4A4A 864A4A864A02F0864A4A864A8991B65A494B874992CF7E4C885B494A885E498B494A88A2 495C8D90B65A8D5A5E48217FA24892D1FC223FA25A5DA248211FA3485C7C5A9FC9FCA25A A45DA3B6FCB27EA381A20A0FBB12F8A27EA46C80A36C98C96C02F8C7FCA2817EA36C81A2 7E827E827FA26D80A26D806D80A26D806D80A26D816D816E806E806E806E6E97B6FC6E80 6E806E03C0606E816F02F8606F02FE60030F6E606F03E0173F030103F85F6F03FF933801 FFFC043F03E00307497E040F03FF033F497E040304FC0107B5EAE00F040093B8487E053F F20001050F07FCEB007F050107F0141FDD003F06C01407060795C81201DE007F04F8ED00 700703048093C8FCDF000302E0CDFC>157 146 115 271 183 71 D[74 142 122 269 87 73 D[163 144 120 269 173 82 D[<93260FFFF8163E4BB600E0153F031F03FE5D037FDBFFC05C02 03B800F05B020F05FC5B4A05FF5B027FF0C00F91B526FE000FECF01F010302C0D9007F6D 5A4991C800076D5A4901FC030090B6FC4901F0163F4949160F4901808290B5170192CBFC 4849844849181F87484984A2484984874886A248498588A24887A388A2B58680A36E85A2 80A26E8580A2818103F0725A6C6E96C7FC15FE8116E06C15FEEEFFE017FF6C17F0F0FF80 6C18F8F1FFC06C19FCF2FF806C1AE01BF86C1AFE6C747E6D1AE0886D866D866D1AFF6D87 6D87010087806E86020F86020386020086153F030F851501DB001F19801601DC000F18C0 EF007F060717E0F0003F070316F0F1003F1A0F080315F81A00871B1F877514FCA287007F 86486C85A288A388A36D86A31EF87FA37F1EF0A26D626D1CE0A27F6D5013C0A26E1B806E 96B5FC6E1B0002F8606E4E5B6E626E6C5F03E04D5B03F84D5B03FE057F5BDBFFC093B55A 04F803035C496CD9FF80021F91C7FCD9FC1F02FF49B55AD9F80792B75A496C19F049C661 49011F18804901074DC8FC90C817F848031F16C048030003FCC9FC007C04011480>102 146 115 271 129 I[162 144 120 269 179 85 D<93B512FC037FECFFF00207B8FC023F17E091B912F84918FE0107727E499126C0007F14 E04901E0C7000F80496D020380496D020014FE6F6F7F90B570806F6F8085486E6F807380 A27380A28885886C5CA26D4982886D5B6D5B010713C0010190CAFC90CCFCA90603B7FC05 0FB8FC0403B9FC167F0307BAFC153F4AB7EA807F020FEDE000023F02FCC7FC91B612E001 0392C8FC4914FC011F14F04914C0495C90B548C9FC485C485C485C485C5A5D485CA24891 CAFCA3B6FC5CA397B6FCA461806C60F107EF6C6E150F6F16CF6C183F6FDB7F8F806C6EDB FF0F14E06C02FCDA03FE15FE6C6E91260FFC0791B5FC6C6E6CD93FF817806C923AF803FF F003013F91B6487E010FEF8000010394C77E010004FC141F021F03F0140702010380DA00 7F1400DA000701F8CDFC695F79DD71>97 D[113 144 121 270 129 I<94387FFFF0041FB612E093B712 FE0307707E031F17F092B97E4A18FE020784021F9126F8000F14804A0280010014C04A49 C74814E049B500F85C494A17F0494A5C495C494A4A14F84991C8FC5D495B90B5FC5D5A48 5C7314F05A4B6F14E05A7314C0487214804B93383FFE00F20FF84896C8FCA4485CA5B6FC B07EA281A37EA36C80A37E6F18FE6CF201FFA26C6E5F1CFE6C801B076C6EEF0FFC6D7F70 EE1FF86DF13FF06D6E167F6D6EEEFFE06D02F84B13C06D6E5D6D02FF030F13806D03C002 3F1300023F02F0903801FFFC6E9126FF801F5B020792B65A6E18C0020060033F4CC7FC03 0716F8030016C0041F4AC8FCDC007F13C0585F78DD67>I[113 144 120 270 129 I<94387FFFC0040FB6FC93B712E0030716FC 031F16FF037F17C04AB912F00207DAF80380021F912680003F13FE4A49C7000F7F4A01F8 02038049B5486E804902C06E6C7F494A6F7F4991C9FC49727F4949707F4B84498490B548 707F5A4B198048855D481CC086481CE05D5A871DF05AA25D5AA21DF887A2B6FCA392BBFC A51DF00380CDFCA77EA4817EA37EA2817EA26CF307F06FF00FF87E816C1B1F6F19F06C1B 3F6D6DF07FE06D7FF4FFC06D6E4C13806D6E5E6D02F04C13006D6EEE1FFE6D6E4C5A6D6C 01FFEEFFF86E02E002035B6E02FC021F5B02079126FFC003B55A6E92B7C7FC020060033F 17F8030F17E003011780DB003F03FCC8FC040315C0DC000F01F8C9FC5D5F7ADD6A>I[<95 383FFF80050FB512F094B612FE040781041F16C0047F824BB87E0307DAF8077F031FDAC0 0F7F4B49C6487F4B495B92B500F0814A4A5B4A5C4A93B612805F4A91C7FC5C5E5C5E5C73 1400A24C6E5B91B56F5BA2735B070313E00700138097C8FCB3A4BA12F8A9C702FCCBFCB3 B3B3B3A2003FB9FCA9>81 144 121 271 71 II[114 143 119 270 129 I[49 144 119 271 65 I[50 143 119 270 65 108 DII<94381FFFF00407B612 C0047F15FC0303B87E030F17E0037F17FC4ABAFC4A9126FC007F80020F02C0010714E04A 49C880027F01F8033F13FC91B5486F7F4902C003077F494A6F804991C96C804949708049 49717F49874949717FA290B548717F48884B83481D80A2481DC04B83481DE0A2481DF0A3 484A7114F8A4481DFCA5B61BFEAF6C1DFCA56C6E4D14F8A36C1DF0A36C1DE06F5F6C1DC0 A26C6E4D1480A26C1D006F5F6C646D6D4D5B6F94B5FC6D636D6D4C5C6D6E4B5C6D6E4B5C 6D02F0031F5C6D6E4B91C7FC6D6C01FE92B512FC6ED9FFC001075C6E02FC017F5C020791 B812C0020196C8FC6E6C17FC031F17F003031780DB007F03FCC9FC040715C0DC001F01F0 CAFC675F7ADD74>II< DB7FC049B47E90B6021F13F8B7027F13FE4DB67E4D15E04D814D814D01077F94263FF00F 7F94387FC01F4D48487FD8003F16000107DAC1FE491480EEC3FC6D5DEEC7F05F16CF5F16 DF4D6D1400A204FFC76C5BA2735B4C6E5B735B070013C04C92C8FCA45EA65EB3B3AAB912 FCA9515D79DC5F>114 D<92261FFFF814F80203B638C001FC023FEDFC0791B8121F0103 17FF130F013F9038F8001F4990C8FCD9FFF8153F4801E0150F484915034849814890CAFC 197F4848173F191F485AA2007F180FA31907487EA27FA28002E0705A6E93C8FC14FC14FF 15F06CECFF8016FCEEFFF06CEEFF8018F06C17FE727E6C18E0856C18FC6C846C727E6C85 6D84011F846D841303010084023F83140F020183EC001FDB007F16801603DC000F15C017 00183F060F14E0007F1703486C82727E857F85857FA2857F1BC07FA27F1B806D5F7F1B00 6E5E6E5F6E163F6E4C5A02FC4C5A6E03035B6E6C4A5B03F0023F5B03FF0107B55A01F991 B7C7FCD9F07F16FCD9E01F16F0D9800716C0D9000193C8FC48D9003F14F8007C020349C9 FC4B5F78DD5C>I[72 132 124 258 90 II<007FB86C49 B712FEA9C792C9000F02C0C7FC6E6E030101F0C8FC715F6E6E4B5B6E6E4B5B6E4E90C9FC 6E6E5E71151F6E6E4B5A6E6E4B5A6E4E5A6F6E495B72495B6F6E495B6F806F6E4990CAFC 6F4C5A72495A6F6E495A6F6E495A6F03815B705E7014C307E75B7091B5CBFC705D705D70 5D6282705D715C8386718071807180837180864D814D815F4D81874D814D81DDFFF3804C 13E14C01C1804C0180814E6C804C6E804C487F4C48824C486D804C486D804B496D804B49 7F73804B49834B90C86C804B486F804B48814B486F804B48844C6F804A71804A496F804A 49814A90CA814A487180023F7280010FB500E07080B8031FB812E0A9735C7CDB7B>120 D<007FB800C04AB71280A9D800034ACA000791C7FC6D080013F0775A6D6E4E5AA26E6E60 64836E4F90C8FC836E4F5A836E4F5AA26E6E4C5AA26E6E5F1C3F6E6E5F1C7F836E4F5A84 6F4D5B846F4D90C9FCA26F6E4A5AA26F6E5D1B0F846F4D5A846F4D5A846F4D5AA26F6E4A 5AA2706E5C627002C091CAFC6219E0704B5A19F0704B5AA2706E485AA2706E485AA27002 FE5B1A7F19FF704B5AA2715DA27192CBFCA2715CA2715CA3715CA2715CA2715CA2715CA2 725BA27290CCFCA3725AA2725AA24E5AA24E5AA261187FA24E5AA24D5B13FE2603FF804A 90CDFC000F13E0486D4A5A487F486D4A5AA260B56C141F4D5AA24D5A17FF604C5B4A4990 CEFC6C5D4C5A6C49EB3FFC4A495A6C4948485A9026FE80075B270FFFC03F5B6C90B6CFFC 6C5D6C15F86C6C5C011F14C0010749D0FC9038007FE071857CDB7B>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fq cmtt12 12 9 /Fq 9 122 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B6C8A33>46 D64 D98 D100 D<14E0EB03F8A2497EA36D5AA2EB00E091C8FCAA383FFFF8487FA47EEA00 01B3AD007FB612C0B712E016F0A216E06C15C0243E78BD33>105 D107 D116 DI<3B7FFF801FFF E0B56C4813F06E4813F8A24A6C13F06C496C13E0D803F8C7EAFC00000114015E7F000014 036D5C137EA2017F495A7FA26E485A131FA26D6C485AA214E0010749C7FCA214F0130315 7EEB01F8A2157C010013FC14FC5D147C147DEC3FF0A36E5AA36E5AA2141F5DA2143F92C8 FCA3147EA214FE003F5B1301387F81F81383EB87F0139FEBFFE06C5B5C6C90C9FCEA0FFC EA03F02D427DAA33>121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fr cmr12 12 34 /Fr 34 122 df<1606A25E161C1618163816305EEC7F80903903FFF0C090380FC0FC9039 3E001F8049130F01F0EB03C04848497E0003814848EB0CF84848147C1518001F157E48C7 487E157015604802E01380007EECC01FEC0180A200FED9030013C0A21406140E140C141C 14185CA25C007E16805CD87F01143F003F4914001303001F90C7123E0186147E000F157C 01CC14FC00075DD803F8495A00014A5A00004A5A017E011FC7FC90387F807E9038C7FFF8 9038C07F804848C9FCA248CAFC5A1206120E120C5AA22A3F7DB431>28 D<140C141C1438147014E0EB01C01303EB0780EB0F00A2131E5BA25B13F85B12015B1203 A2485AA3485AA348C7FCA35AA2123EA2127EA4127CA312FCB3A2127CA3127EA4123EA212 3FA27EA36C7EA36C7EA36C7EA212017F12007F13787FA27F7FA2EB0780EB03C01301EB00 E014701438141C140C166476CA26>40 D<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7E A21378137C133C133E131E131FA2EB0F80A3EB07C0A3EB03E0A314F0A21301A214F8A413 00A314FCB3A214F8A31301A414F0A21303A214E0A3EB07C0A3EB0F80A3EB1F00A2131E13 3E133C137C13785BA2485A485AA2485A48C7FC120E5A5A5A5A5A16647BCA26>I<121EEA 7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A312011380120313005A1206120E 5A5A5A12600B1D78891B>44 DI<14FF010713E090381F81F890 383E007C01FC133F4848EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301001F 15F8A2003F15FCA390C8FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8 A26C6CEB03F0A36C6CEB07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F 81F8903807FFE0010090C7FC28447CC131>48 D50 D<14FF010713E0011F13F890387F80FC9038FC007E48487F4848EB1F804848 EB0FC0000FEC07E0485AED03F0485A16F8007F140190C713FCA25AA216FE1500A516FFA4 6C5CA36C7E5D121F7F000F5C6C6C130E150C6C6C131C6C6C5BD8007C5B90383F01E09039 0FFF80FE903801FE0090C8FC150116FCA4ED03F8A216F0D80F801307486C14E0486C130F 16C0ED1F80A249EB3F0049137E001EC75A001C495A000F495A3907E01FE06CB51280C649 C7FCEB1FF028447CC131>57 D<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3A5121E EA7F80A2EAFFC0A4EA7F80A2EA1E000A2B78AA1B>I67 D73 D<010FB512FEA3D9000313806E130080B3B3AB123F487E487EA44A5A13801300 006C495A00705C6C13076C5C6C495A6CEB1F802603E07FC7FC3800FFFCEB1FE027467BC3 32>I76 D78 D<003FB912F8A3903BF0001FF8001F0180 6D481303003EC7150048187C0078183CA20070181CA30060180CA5481806A5C81600B3B3 A54B7EED7FFE49B77EA33F447DC346>84 DI97 DI<167FED3FFFA315018182B3EC7F80903803FFF090380FC07C90383F 000E017E1307496D5AD803F87F48487F5B000F81485AA2485AA2127FA290C8FC5AAB7E7F A2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F806C6C010E13C0013F011C13FE 90380FC0F8903803FFE09026007F0013002F467DC436>100 DIII< EA01FC12FFA3120712031201B3EC01FE913807FFC091381E07F091383801F802707FECE0 00D9FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F457DC436 >II108 DI<3901FC01FE00FF903807FFC091381E07F091383801F8000701707F0003EBE0 002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA32F2C7DAB 36>II<3901FC03FC00FF90380FFF809138 3C07E091387001F83A07FDE000FE00030180137FD801FFEC3F8091C7EA1FC04915E04914 0F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07F8A217F0160F6D15E0EE1FC06D14 3F17806EEB7E00D9FDC05B9039FCF003F891383C0FE091381FFF80DA03FCC7FC91C9FCAE 487EB512F8A32F3F7DAB36>I<3903F803F000FFEB1FFCEC3C3EEC707F0007EBE0FF3803 F9C000015B13FBEC007E153C01FF13005BA45BB3A748B4FCB512FEA3202C7DAB26>114 D<90383FE0183901FFFC383907E01F78390F0003F8001E1301481300007C1478127800F8 1438A21518A27EA27E6C6C13006C7E13FC383FFFE06C13FC6C13FF6C14C06C14E0C614F0 011F13F81300EC0FFC140300C0EB01FE1400157E7E153EA27EA36C143C6C147C15786C14 F86CEB01F039F38003E039F1F00F8039E07FFE0038C00FF01F2E7DAC26>I<1306A5130E A4131EA3133E137EA213FE12011207001FB512F0B6FCA2C648C7FCB3A4150CAA017E131C 017F1318A26D133890381F8030ECC070903807E0E0903801FFC09038007F001E3E7EBC26 >I118 D121 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fs cmr12 14.4 21 /Fs 21 122 df<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F000C0C768B21>46 D50 D<120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F00 C7FCB3A9120FEA3FC0EA7FE0EAFFF0A6EA7FE0EA3FC0EA0F000C3376B221>58 D66 D68 D82 D97 D99 D101 D103 D<1378EA01FE487E487FA66C90C7FC6C5AEA007890C8FC B0EB7F80B5FCA41203C6FC137FB3B3A43801FFE0B61280A419507CCF21>105 D107 DI<01FFD907 FEEC03FFB590261FFFC0010F13E0037F01F0013F13F8912701F80FFC9038FC07FE913D03 C003FE01E001FF000390260700019038038000C6010E6D6C48C76C7E6D48DA7F8E6E7E4A 159CA24ADA3FF86E7E02605D14E04A5DA34A5DB3AD2601FFE0DAFFF0EC7FF8B6D8C07F90 26FFE03FB512F0A45C347CB363>I<01FFEB07FCB590383FFF8092B512E0913901F00FF8 913903C007FC000349C66C7EC6010E13016D486D7E5C143002706E7E146014E05CA35CB3 AD2601FFE0903801FFE0B600C0B612C0A43A347CB341>I I<90397F8007FCB590387FFF800281B512E0913987F00FF891398F8003FC000390399E00 01FFC601BC6D7FD97FF86E7E4A6E7E4A6E7E4A140F844A6E7EA2717EA3717EA4711380AB 4D1300A44D5AA24D5AA2606E140F4D5A6E5D6E4A5A6E4A5A02BC4AC7FC029E495A028FEB 07FC913987E01FF00281B512C0DA807F90C8FCED0FF892CAFCB13801FFE0B612C0A4394B 7DB341>I<01FFEB1F80B5EB7FF0913801FFF8913803E1FC91380783FE0003EB0F07C613 1EEB7F1C1438143091387003FC91386000F0160014E05CA45CB3AA8048487EB612F0A427 347DB32E>114 DI< D97F80EC7F80B591B5FCA400031503C61500017F157FB3AC17FFA35EA3013F5C6EEB077F A2011F020E7F6D6C011C13F06E0178EBFFC0903903FC01F06DB512E06D6C1380912607FC 00EB80003A357CB341>117 D121 D E %EndDVIPSBitmapFont end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%PaperSize: A4 %%EndSetup %%Page: 1 1 1 0 bop 907 162 a Fs(BuDDy:)52 b(Binary)37 b(Decision)i(Diagram)c(pac)m (k)-7 b(age)1724 275 y(Release)38 b(2.2)1628 482 y Fr(J\034rn)33 b(Lind-Nielsen)1244 599 y(IT-Univ)m(ersit)m(y)g(of)f(Cop)s(enhagen)i (\(ITU\))1535 715 y(e-mail:)41 b Fq(buddy@itu.dk)1626 828 y Fr(No)m(v)m(em)m(b)s(er)33 b(9,)g(2002)1430 3250 y @beginspecial 0 @llx 0 @lly 139 @urx 216 @ury 1390 @rwi @setspecial %%BeginDocument: example.pstex %!PS-Adobe-2.0 EPSF-2.0 %%Title: example.pstex %%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 %%CreationDate: Fri Jul 17 10:12:32 1998 %%For: jl@britta (Jorn Lind-Nielsen) %%Orientation: Portrait %%BoundingBox: 0 0 139 216 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -145.0 343.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 6712 m -1000 -1000 l 5733 -1000 l 5733 6712 l cp clip 0.06000 0.06000 sc 7.500 slw % Ellipse n 3300 2400 270 270 0 360 DrawEllipse gs col0 s gr /Helvetica ff 270.00 scf sf 3210 2520 m gs 1 -1 sc (X) col0 sh gr % Ellipse n 3300 4170 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 2700 3270 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 3900 3270 270 270 0 360 DrawEllipse gs col0 s gr % Ellipse n 4455 4170 270 270 0 360 DrawEllipse gs col0 s gr % Polyline n 3000 5100 m 3600 5100 l 3600 5700 l 3000 5700 l cp gs col0 s gr % Polyline n 3900 5100 m 4500 5100 l 4500 5700 l 3900 5700 l cp gs col0 s gr % Polyline gs clippath 2957 2969 m 2864 3052 l 2907 2936 l 2817 3071 l 2867 3104 l cp clip n 3150 2625 m 2850 3075 l gs col0 s gr gr % arrowhead n 2957 2969 m 2864 3052 l 2907 2936 l 2932 2953 l 2957 2969 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 3693 2936 m 3735 3052 l 3643 2969 l 3733 3104 l 3783 3071 l cp clip n 3450 2625 m 3750 3075 l gs col0 s gr gr [] 0 sd % arrowhead n 3693 2936 m 3735 3052 l 3643 2969 l 3668 2953 l 3693 2936 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3649 3881 m 3556 3964 l 3599 3848 l 3509 3983 l 3559 4016 l cp clip n 3842 3537 m 3542 3987 l gs col0 s gr gr % arrowhead n 3649 3881 m 3556 3964 l 3599 3848 l 3624 3865 l 3649 3881 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 4235 3824 m 4277 3940 l 4185 3857 l 4275 3992 l 4325 3959 l cp clip n 3992 3513 m 4292 3963 l gs col0 s gr gr [] 0 sd % arrowhead n 4235 3824 m 4277 3940 l 4185 3857 l 4210 3841 l 4235 3824 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 3036 3830 m 3062 3950 l 2982 3857 l 3055 4002 l 3109 3975 l cp clip n 2850 3525 m 3075 3975 l gs col0 s gr gr [] 0 sd % arrowhead n 3036 3830 m 3062 3950 l 2982 3857 l 3009 3844 l 3036 3830 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3330 4953 m 3300 5073 l 3270 4953 l 3270 5115 l 3330 5115 l cp clip n 3300 4425 m 3300 5100 l gs col0 s gr gr % arrowhead n 3330 4953 m 3300 5073 l 3270 4953 l 3300 4953 l 3330 4953 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 3975 4970 m 4032 5079 l 3930 5010 l 4038 5131 l 4082 5091 l cp clip n 3450 4425 m 4050 5100 l gs col0 s gr gr [] 0 sd % arrowhead n 3975 4970 m 4032 5079 l 3930 5010 l 3952 4990 l 3975 4970 l cp gs 0.00 setgray ef gr col0 s % Polyline [60] 0 sd gs clippath 3579 5023 m 3469 5081 l 3539 4979 l 3419 5088 l 3459 5132 l cp clip n 4275 4350 m 3450 5100 l gs col0 s gr gr [] 0 sd % arrowhead n 3579 5023 m 3469 5081 l 3539 4979 l 3559 5001 l 3579 5023 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 4336 4963 m 4280 5073 l 4278 4950 l 4242 5108 l 4301 5121 l cp clip n 4425 4425 m 4275 5100 l gs col0 s gr gr % arrowhead n 4336 4963 m 4280 5073 l 4278 4950 l 4307 4957 l 4336 4963 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3131 4983 m 3204 5082 l 3093 5029 l 3217 5133 l 3256 5087 l cp clip n 2550 3525 m 2550 3527 l 2549 3530 l 2549 3536 l 2548 3546 l 2546 3560 l 2544 3579 l 2541 3602 l 2538 3629 l 2535 3661 l 2532 3696 l 2528 3735 l 2524 3777 l 2520 3821 l 2516 3866 l 2513 3912 l 2510 3958 l 2507 4004 l 2505 4049 l 2504 4092 l 2504 4133 l 2504 4173 l 2506 4211 l 2508 4247 l 2512 4280 l 2517 4312 l 2523 4342 l 2530 4371 l 2539 4398 l 2550 4425 l 2562 4451 l 2576 4477 l 2592 4503 l 2610 4529 l 2630 4556 l 2652 4583 l 2677 4611 l 2704 4641 l 2734 4671 l 2765 4702 l 2799 4733 l 2834 4766 l 2870 4798 l 2907 4831 l 2944 4864 l 2980 4896 l 3016 4926 l 3051 4955 l 3083 4982 l 3112 5007 l 3138 5029 l 3161 5048 l 3180 5063 l 3195 5076 l 3207 5085 l 3225 5100 l gs col0 s gr gr % arrowhead n 3131 4983 m 3204 5082 l 3093 5029 l 3112 5006 l 3131 4983 l cp gs 0.00 setgray ef gr col0 s /Helvetica ff 270.00 scf sf 3210 4290 m gs 1 -1 sc (Z) col0 sh gr /Helvetica ff 270.00 scf sf 3210 5490 m gs 1 -1 sc (1) col0 sh gr /Helvetica ff 270.00 scf sf 4140 5505 m gs 1 -1 sc (0) col0 sh gr /Helvetica ff 270.00 scf sf 2610 3390 m gs 1 -1 sc (Y) col0 sh gr /Helvetica ff 270.00 scf sf 3810 3390 m gs 1 -1 sc (Y) col0 sh gr /Helvetica ff 270.00 scf sf 4365 4290 m gs 1 -1 sc (Z) col0 sh gr $F2psEnd rs %%EndDocument @endspecial eop %%Page: 2 2 2 1 bop eop %%Page: 1 3 1 2 bop 236 826 a Fp(Con)-6 b(ten)g(ts)236 1362 y Fo(1)85 b(In)m(tro)s(duction)2778 b(1)373 1475 y Fn(1.1)94 b(Ac)m(kno)m (wledgemen)m(ts)59 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)127 b(1)236 1679 y Fo(2)85 b(Users)35 b(Guide)2791 b(3)373 1792 y Fn(2.1)94 b(Getting)31 b(BuDDy)h(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(3)373 1905 y(2.2)94 b(Installing)81 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(3)373 2018 y(2.3)94 b(Compiling)43 b(.)i(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(3)373 2131 y(2.4)94 b(Programming)29 b(with)g(BuDDy)82 b(.)45 b(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)127 b(3)582 2244 y(2.4.1)106 b(More)31 b(Examples)40 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(4)373 2357 y(2.5)94 b(V)-8 b(ariable)30 b(sets)90 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(4)373 2469 y(2.6)94 b(Dynamic)30 b(V)-8 b(ariable)30 b(Reordering)51 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(5)373 2582 y(2.7)94 b(Error)29 b(Handling)60 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(6)373 2695 y(2.8)94 b(The)30 b(C++)f(in)m(terface)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(6)373 2808 y(2.9)94 b(Finite)29 b(Domain)h(Blo)s(c)m(ks)83 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(7)373 2921 y(2.10)49 b(Bo)s(olean)30 b(V)-8 b(ectors)26 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(7)582 3034 y(2.10.1)61 b(C++)29 b(In)m(terface)77 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)127 b(9)236 3238 y Fo(3)85 b(E\016ciency)35 b(Concerns)2407 b(11)236 3442 y(4)85 b(Some)34 b(Implemen)m(tation)e(details)1967 b(13)236 3645 y(5)85 b(Reference)2853 b(15)373 3758 y Fn(b)s(ddCac)m(heStat)103 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(20)373 3871 y(b)s(ddGb)s(cStat)106 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(21)373 3984 y(b)s(ddStat)59 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(22)373 4097 y(b)s(dd)p 534 4097 28 4 v 30 w(addref)j(.)46 b(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(22)373 4210 y(b)s(dd)p 534 4210 V 30 w(addv)-5 b(arblo)s(c)m(k)67 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)82 b(23)373 4323 y(b)s(dd)p 534 4323 V 30 w(in)m(taddv)-5 b(arblo)s(c)m(k)100 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(23)373 4436 y(b)s(dd)p 534 4436 V 30 w(allsat)123 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(24)373 4549 y(b)s(dd)p 534 4549 V 30 w(and)119 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(24)373 4662 y(b)s(dd)p 534 4662 V 30 w(ano)s(decoun)m(t)94 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)82 b(25)373 4775 y(b)s(dd)p 534 4775 V 30 w(appall)92 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(25)373 4887 y(b)s(dd)p 534 4887 V 30 w(app)s(ex)98 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(26)373 5000 y(b)s(dd)p 534 5000 V 30 w(apply)115 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(27)373 5113 y(b)s(dd)p 534 5113 V 30 w(appuni)61 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)82 b(27)373 5226 y(b)s(dd)p 534 5226 V 30 w(autoreorder)88 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)82 b(28)373 5339 y(b)s(dd)p 534 5339 V 30 w(autoreorder)p 1024 5339 V 33 w(times)55 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(28)373 5452 y(b)s(dd)p 534 5452 V 30 w(biimp)106 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)82 b(28)373 5565 y(b)s(dd)p 534 5565 V 30 w(blo)s(c)m(k\014le)p 891 5565 V 32 w(ho)s(ok)68 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(29)373 5678 y(b)s(dd)p 534 5678 V 30 w(buildcub)s(e)88 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(29)1995 5989 y(i)p eop %%Page: 2 4 2 3 bop 373 162 a Fn(b)s(dd)p 534 162 28 4 v 30 w(ibuildcub)s(e)62 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(29)373 275 y(b)s(dd)p 534 275 V 30 w(cac)m(hestats)c(.) 45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)82 b(30)373 388 y(b)s(dd)p 534 388 V 30 w(clear)p 751 388 V 33 w(error)65 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(30)373 501 y(b)s(dd)p 534 501 V 30 w(clrv)-5 b(arblo)s(c)m(ks)76 b(.)46 b(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(30)373 614 y(b)s(dd)p 534 614 V 30 w(comp)s(ose)71 b(.)46 b(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(31)373 727 y(b)s(dd)p 534 727 V 30 w(constrain)113 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(31)373 840 y(b)s(dd)p 534 840 V 30 w(delref)115 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(32)373 953 y(b)s(dd)p 534 953 V 30 w(disable)p 839 953 V 31 w(reorder)100 b(.)46 b(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(32)373 1066 y(b)s(dd)p 534 1066 V 30 w(done)d(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(32)373 1178 y(b)s(dd)p 534 1178 V 30 w(enable)p 817 1178 V 33 w(reorder)120 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)82 b(33)373 1291 y(b)s(dd)p 534 1291 V 30 w(error)p 757 1291 V 33 w(ho)s(ok)60 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)82 b(33)373 1404 y(b)s(dd)p 534 1404 V 30 w(errstring)66 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)82 b(34)373 1517 y(b)s(dd)p 534 1517 V 30 w(exist)f(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(34)373 1630 y(b)s(dd)p 534 1630 V 30 w(extv)-5 b(arn)m(um)56 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(34)373 1743 y(b)s(dd)p 534 1743 V 30 w(false)91 b(.)45 b(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(35)373 1856 y(b)s(dd)p 534 1856 V 30 w(\014le)p 681 1856 V 32 w(ho)s(ok)66 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(35)373 1969 y(b)s(dd)p 534 1969 V 30 w(forall)60 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(36)373 2082 y(b)s(dd)p 534 2082 V 30 w(freepair)105 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)82 b(36)373 2195 y(b)s(dd)p 534 2195 V 30 w(fullsatone)95 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(36)373 2308 y(b)s(dd)p 534 2308 V 30 w(gb)s(c)p 703 2308 V 33 w(ho)s(ok)114 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(37)373 2420 y(b)s(dd)p 534 2420 V 30 w(getallo)s(cn)m(um)68 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(37)373 2533 y(b)s(dd)p 534 2533 V 30 w(getno)s(den)m(um)63 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(38)373 2646 y(b)s(dd)p 534 2646 V 30 w(getreorder)p 968 2646 V 34 w(metho)s(d)92 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(38)373 2759 y(b)s(dd)p 534 2759 V 30 w(getreorder)p 968 2759 V 34 w(times)110 b(.)45 b(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(38)373 2872 y(b)s(dd)p 534 2872 V 30 w(high)93 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(39)373 2985 y(b)s(dd)p 534 2985 V 30 w(imp)113 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)82 b(39)373 3098 y(b)s(dd)p 534 3098 V 30 w(init)57 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(40)373 3211 y(b)s(dd)p 534 3211 V 30 w(isrunning)105 b(.)45 b(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(40)373 3324 y(b)s(dd)p 534 3324 V 30 w(ite)94 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)82 b(41)373 3437 y(b)s(dd)p 534 3437 V 30 w(ith)m(v)-5 b(ar)103 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(41)373 3550 y(b)s(dd)p 534 3550 V 30 w(lev)m(el2v)-5 b(ar)61 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)82 b(42)373 3662 y(b)s(dd)p 534 3662 V 30 w(load)99 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(42)373 3775 y(b)s(dd)p 534 3775 V 30 w(fnload)90 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(42)373 3888 y(b)s(dd)p 534 3888 V 30 w(lo)m(w)61 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)82 b(43)373 4001 y(b)s(dd)p 534 4001 V 30 w(mak)m(eset)90 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(43)373 4114 y(b)s(dd)p 534 4114 V 30 w(newpair)92 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(44)373 4227 y(b)s(dd)p 534 4227 V 30 w(nith)m(v)-5 b(ar)123 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)82 b(44)373 4340 y(b)s(dd)p 534 4340 V 30 w(no)s(decoun)m(t)69 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(45)373 4453 y(b)s(dd)p 534 4453 V 30 w(not)64 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(45)373 4566 y(b)s(dd)p 534 4566 V 30 w(or)114 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)82 b(45)373 4679 y(b)s(dd)p 534 4679 V 30 w(pathcoun)m(t)77 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(46)373 4792 y(b)s(dd)p 534 4792 V 30 w(prin)m(tall)114 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(46)373 4905 y(b)s(dd)p 534 4905 V 30 w(fprin)m(tall)k(.)46 b(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(46)373 5017 y(b)s(dd)p 534 5017 V 30 w(prin)m(tdot)e(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)82 b(47)373 5130 y(b)s(dd)p 534 5130 V 30 w(fprin)m(tdot)123 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(47)373 5243 y(b)s(dd)p 534 5243 V 30 w(prin)m(torder)74 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(47)373 5356 y(b)s(dd)p 534 5356 V 30 w(prin)m(tset)100 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(48)373 5469 y(b)s(dd)p 534 5469 V 30 w(fprin)m(tset)72 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)82 b(48)373 5582 y(b)s(dd)p 534 5582 V 30 w(prin)m(tstat)60 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)82 b(48)373 5695 y(b)s(dd)p 534 5695 V 30 w(fprin)m(tstat)103 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(48)1983 5989 y(ii)p eop %%Page: 3 5 3 4 bop 373 162 a Fn(b)s(dd)p 534 162 28 4 v 30 w(prin)m(ttable)85 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(49)373 275 y(b)s(dd)p 534 275 V 30 w(fprin)m(ttable)57 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(49)373 388 y(b)s(dd)p 534 388 V 30 w(relpro)s(d)119 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)82 b(49)373 501 y(b)s(dd)p 534 501 V 30 w(reorder)123 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(50)373 614 y(b)s(dd)p 534 614 V 30 w(reorder)p 848 614 V 33 w(gain)64 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) 82 b(51)373 727 y(b)s(dd)p 534 727 V 30 w(reorder)p 848 727 V 33 w(ho)s(ok)110 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)82 b(51)373 840 y(b)s(dd)p 534 840 V 30 w(reorder)p 848 840 V 33 w(prob)s(e)76 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(52)373 953 y(b)s(dd)p 534 953 V 30 w(reorder)p 848 953 V 33 w(v)m(erb)s(ose)77 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(52)373 1066 y(b)s(dd)p 534 1066 V 30 w(replace)58 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(53)373 1178 y(b)s(dd)p 534 1178 V 30 w(resetpair)62 b(.)46 b(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(53)373 1291 y(b)s(dd)p 534 1291 V 30 w(resize)p 782 1291 V 33 w(ho)s(ok)105 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(54)373 1404 y(b)s(dd)p 534 1404 V 30 w(restrict)123 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(55)373 1517 y(b)s(dd)p 534 1517 V 30 w(satcoun)m(t)72 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)82 b(55)373 1630 y(b)s(dd)p 534 1630 V 30 w(setcoun)m(tset)107 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)82 b(55)373 1743 y(b)s(dd)p 534 1743 V 30 w(satcoun)m(tln)66 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(56)373 1856 y(b)s(dd)p 534 1856 V 30 w(setcoun)m(tlnset)101 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)82 b(56)373 1969 y(b)s(dd)p 534 1969 V 30 w(satone)i(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(56)373 2082 y(b)s(dd)p 534 2082 V 30 w(satoneset)115 b(.)45 b(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(57)373 2195 y(b)s(dd)p 534 2195 V 30 w(sa)m(v)m(e)103 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)82 b(57)373 2308 y(b)s(dd)p 534 2308 V 30 w(fnsa)m(v)m(e)94 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(57)373 2420 y(b)s(dd)p 534 2420 V 30 w(scanset)124 b(.)46 b(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(58)373 2533 y(b)s(dd)p 534 2533 V 30 w(setcac)m(heratio)108 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)82 b(58)373 2646 y(b)s(dd)p 534 2646 V 30 w(setmaxincrease)96 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(59)373 2759 y(b)s(dd)p 534 2759 V 30 w(setmaxno)s(den)m(um)116 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(59)373 2872 y(b)s(dd)p 534 2872 V 30 w(setminfreeno)s(des)56 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(60)373 2985 y(b)s(dd)p 534 2985 V 30 w(setpair)67 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)82 b(60)373 3098 y(b)s(dd)p 534 3098 V 30 w(setb)s(ddpair)53 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(60)373 3211 y(b)s(dd)p 534 3211 V 30 w(setpairs)102 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(61)373 3324 y(b)s(dd)p 534 3324 V 30 w(setb)s(ddpairs)87 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) 82 b(61)373 3437 y(b)s(dd)p 534 3437 V 30 w(setv)-5 b(arn)m(um)68 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(61)373 3550 y(b)s(dd)p 534 3550 V 30 w(setv)-5 b(arorder)105 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(62)373 3662 y(b)s(dd)p 534 3662 V 30 w(simplify)90 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(62)373 3775 y(b)s(dd)p 534 3775 V 30 w(stats)d(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(62)373 3888 y(b)s(dd)p 534 3888 V 30 w(strm)p 747 3888 V 33 w(ho)s(ok)70 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(63)373 4001 y(b)s(dd)p 534 4001 V 30 w(supp)s(ort)99 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(63)373 4114 y(b)s(dd)p 534 4114 V 30 w(sw)m(ap)m(v)-5 b(ar)91 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)82 b(64)373 4227 y(b)s(dd)p 534 4227 V 30 w(true)104 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(64)373 4340 y(b)s(dd)p 534 4340 V 30 w(unique)69 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(65)373 4453 y(b)s(dd)p 534 4453 V 30 w(v)-5 b(ar)71 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(65)373 4566 y(b)s(dd)p 534 4566 V 30 w(v)-5 b(ar2lev)m(el)61 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(65)373 4679 y(b)s(dd)p 534 4679 V 30 w(v)-5 b(arblo)s(c)m(k)g(all)122 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)82 b(66)373 4792 y(b)s(dd)p 534 4792 V 30 w(v)-5 b(arn)m(um)108 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(66)373 4905 y(b)s(dd)p 534 4905 V 30 w(v)-5 b(arpro\014le)105 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(66)373 5017 y(b)s(dd)p 534 5017 V 30 w(v)m(eccomp)s(ose)87 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) 82 b(67)373 5130 y(b)s(dd)p 534 5130 V 30 w(v)m(ersionn)m(um)94 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)82 b(67)373 5243 y(b)s(dd)p 534 5243 V 30 w(v)m(ersionstr)92 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(67)373 5356 y(b)s(dd)p 534 5356 V 30 w(xor)66 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(68)373 5469 y(b)s(ddfalse)50 b(.)c(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(68)373 5582 y(b)s(ddtrue)63 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(68)373 5695 y(b)m(v)m(ec)66 b(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(69)1970 5989 y(iii)p eop %%Page: 4 6 4 5 bop 373 162 a Fn(b)m(v)m(ec)p 551 162 28 4 v 34 w(add)98 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)82 b(69)373 275 y(b)m(v)m(ec)p 551 275 V 34 w(addref)64 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(70)373 388 y(b)m(v)m(ec)p 551 388 V 34 w(co)s(erce)71 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)82 b(70)373 501 y(b)m(v)m(ec)p 551 501 V 34 w(con)109 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(70)373 614 y(b)m(v)m(ec)p 551 614 V 34 w(cop)m(y)64 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(71)373 727 y(b)m(v)m(ec)p 551 727 V 34 w(delref)94 b(.)46 b(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(71)373 840 y(b)m(v)m(ec)p 551 840 V 34 w(div)120 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)82 b(71)373 953 y(b)m(v)m(ec)p 551 953 V 34 w(div\014xed)71 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(72)373 1066 y(b)m(v)m(ec)p 551 1066 V 34 w(equ)106 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(72)373 1178 y(b)m(v)m(ec)p 551 1178 V 34 w(false)70 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)82 b(72)373 1291 y(b)m(v)m(ec)p 551 1291 V 34 w(free)101 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(73)373 1404 y(b)m(v)m(ec)p 551 1404 V 34 w(gte)54 b(.)46 b(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(73)373 1517 y(b)m(v)m(ec)p 551 1517 V 34 w(gth)114 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)82 b(73)373 1630 y(b)m(v)m(ec)p 551 1630 V 34 w(isconst)117 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(74)373 1743 y(b)m(v)m(ec)p 551 1743 V 34 w(ite)73 b(.)46 b(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(74)373 1856 y(b)m(v)m(ec)p 551 1856 V 34 w(lte)73 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)82 b(74)373 1969 y(b)m(v)m(ec)p 551 1969 V 34 w(lth)62 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(75)373 2082 y(b)m(v)m(ec)p 551 2082 V 34 w(map1)98 b(.)46 b(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(75)373 2195 y(b)m(v)m(ec)p 551 2195 V 34 w(map2)98 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(76)373 2308 y(b)m(v)m(ec)p 551 2308 V 34 w(map3)98 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(76)373 2420 y(b)m(v)m(ec)p 551 2420 V 34 w(m)m(ul)95 b(.)45 b(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(77)373 2533 y(b)m(v)m(ec)p 551 2533 V 34 w(m)m(ul\014xed)117 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)82 b(77)373 2646 y(b)m(v)m(ec)p 551 2646 V 34 w(neq)106 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(77)373 2759 y(b)m(v)m(ec)p 551 2759 V 34 w(shl)61 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(78)373 2872 y(b)m(v)m(ec)p 551 2872 V 34 w(shl\014xed)h(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)82 b(78)373 2985 y(b)m(v)m(ec)p 551 2985 V 34 w(shr)122 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(79)373 3098 y(b)m(v)m(ec)p 551 3098 V 34 w(shr\014xed)73 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(79)373 3211 y(b)m(v)m(ec)p 551 3211 V 34 w(sub)107 b(.)45 b(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(80)373 3324 y(b)m(v)m(ec)p 551 3324 V 34 w(true)h(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)82 b(80)373 3437 y(b)m(v)m(ec)p 551 3437 V 34 w(v)-5 b(al)60 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(81)373 3550 y(b)m(v)m(ec)p 551 3550 V 34 w(v)-5 b(ar)121 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)82 b(81)373 3662 y(b)m(v)m(ec)p 551 3662 V 34 w(v)-5 b(arfdd)61 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(82)373 3775 y(b)m(v)m(ec)p 551 3775 V 34 w(v)-5 b(arv)m(ec)66 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)82 b(82)373 3888 y(fdd)p 508 3888 V 31 w(clearall)77 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(82)373 4001 y(fdd)p 508 4001 V 31 w(domain)67 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(83)373 4114 y(fdd)p 508 4114 V 31 w(domainn)m(um)104 b(.)46 b(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(83)373 4227 y(fdd)p 508 4227 V 31 w(domainsize)67 b(.)45 b(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(83)373 4340 y(fdd)p 508 4340 V 31 w(equals)115 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)82 b(84)373 4453 y(fdd)p 508 4453 V 31 w(extdomain)k(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)82 b(84)373 4566 y(fdd)p 508 4566 V 31 w(\014le)p 656 4566 V 32 w(ho)s(ok)91 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(85)373 4679 y(fdd)p 508 4679 V 31 w(in)m(taddv)-5 b(arblo)s(c)m(k)54 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)82 b(85)373 4792 y(fdd)p 508 4792 V 31 w(ithset)68 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)82 b(86)373 4905 y(fdd)p 508 4905 V 31 w(ith)m(v)-5 b(ar)58 b(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(86)373 5017 y(fdd)p 508 5017 V 31 w(mak)m(eset)115 b(.)46 b(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(87)373 5130 y(fdd)p 508 5130 V 31 w(o)m(v)m(erlap)s(domain)62 b(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)82 b(87)373 5243 y(fdd)p 508 5243 V 31 w(prin)m(tset)54 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(88)373 5356 y(fdd)p 508 5356 V 31 w(fprin)m(tset)97 b(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(88)373 5469 y(fdd)p 508 5469 V 31 w(scanallv)-5 b(ar)110 b(.)45 b(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(88)373 5582 y(fdd)p 508 5582 V 31 w(scanset)c(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)82 b(89)373 5695 y(fdd)p 508 5695 V 31 w(scan)m(v)-5 b(ar)68 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(89)1971 5989 y(iv)p eop %%Page: 5 7 5 6 bop 373 162 a Fn(fdd)p 508 162 28 4 v 31 w(setpair)92 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(90)373 275 y(fdd)p 508 275 V 31 w(setpairs)56 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(90)373 388 y(fdd)p 508 388 V 31 w(strm)p 722 388 V 32 w(ho)s(ok)96 b(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)82 b(91)373 501 y(fdd)p 508 501 V 31 w(v)-5 b(arn)m(um)62 b(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f (.)h(.)g(.)f(.)h(.)82 b(91)373 614 y(fdd)p 508 614 V 31 w(v)-5 b(ars)60 b(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(92)373 727 y(op)s(erator)p Fm(<<)90 b Fn(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)82 b(92)1984 5989 y(v)p eop %%Page: 6 8 6 7 bop 1971 5989 a Fn(vi)p eop %%Page: 1 9 1 8 bop 236 785 a Fl(Chapter)65 b(1)236 1200 y Fp(In)-6 b(tro)6 b(duction)236 1645 y Fn(BuDDy)27 b(is)e(a)h(Binary)f(Decision)g (Diagram)h(pac)m(k)-5 b(age)28 b(that)e(pro)m(vides)f(all)g(of)h(the)g (most)g(used)f(functions)236 1758 y(for)31 b(manipulating)d(BDDs.)43 b(The)30 b(pac)m(k)-5 b(age)33 b(also)d(includes)f(functions)g(for)i (in)m(teger)g(arithmetics)f(suc)m(h)236 1871 y(as)h(addition)d(and)i (relational)f(op)s(erators.)377 1984 y(BuDDy)36 b(started)f(as)g(a)h (tec)m(hnology)g(transfer)e(pro)5 b(ject)35 b(b)s(et)m(w)m(een)h(the)f (T)-8 b(ec)m(hnical)34 b(Univ)m(ersit)m(y)g(of)236 2097 y(Denmark)i(and)f(Bann)g(Visualstate.)57 b(The)35 b(later)h(is)e(no)m (w)i(using)e(the)i(tec)m(hniques)f(from)g(BuDDy)i(in)236 2210 y(their)30 b(soft)m(w)m(are.)42 b(See)30 b Fm(www.visualstate.com) p Fn(.)377 2323 y(This)19 b(man)m(ual)h(describ)s(es)f(only)h(the)h(in) m(terface)g(to)h(BuDDy)-8 b(,)24 b(not)d(the)g(underlying)c(theory)k (of)g(BDDs.)236 2435 y(More)37 b(information)c(ab)s(out)j(that)g(can)g (b)s(e)f(found)f(in)g(Henrik)h(Reif)g(Andersen's)f(\\An)i(In)m(tro)s (duction)236 2548 y(T)-8 b(o)42 b(Binary)e(Decision)h(Diagrams")g(whic) m(h)f(is)h(supplied)c(with)j(the)h(BuDD)m(Y)i(distribution.)69 b(Ev)m(en)236 2661 y(more)39 b(information)e(can)j(of)f(course)g(b)s(e) f(found)g(in)f(the)i(original)e(pap)s(ers)h(b)m(y)h(Bry)m(an)m(t,)j (Rudell)37 b(and)236 2774 y(Brace)32 b([1,)f(3)q(,)f(2)q(,)g(4)q(])236 3061 y Fk(1.1)136 b(Ac)l(kno)l(wledgemen)l(ts)236 3264 y Fn(Thanks)38 b(to)i(the)f(follo)m(wing)e(p)s(eople)h(for)g(new)h (ideas,)h(bug)e(h)m(un)m(ts)h(and)f(lots)h(of)g(discussions:)55 b(Gerd)236 3376 y(Behrmann,)26 b(Henrik)f(Reif)g(Andersen,)h(Ken)g (Larsen,)g(Jacob)h(Lic)m(h)m(ten)m(b)s(erg,)g(P)m(oul)e(Williams,)g (Nik)m(ola)5 b(j)236 3489 y(Bjorner,)31 b(Alan)e(Mishc)m(henk)m(o,)i (Henrik)e(Hulgaard,)h(and)g(Malte)h(Helmert.)1985 5989 y(1)p eop %%Page: 2 10 2 9 bop 1985 5989 a Fn(2)p eop %%Page: 3 11 3 10 bop 236 785 a Fl(Chapter)65 b(2)236 1200 y Fp(Users)77 b(Guide)236 1682 y Fk(2.1)136 b(Getting)45 b(BuDDy)236 1885 y Fn(BuDDy)31 b(can)g(b)s(e)f(found)f(on)h(the)h(serv)m(er)f Fm(http://www.itu.dk/researc)o(h/bu)o(ddy)o Fn(.)236 2171 y Fk(2.2)136 b(Installing)347 2374 y Fn(1.)46 b(Edit)30 b(the)g(\014le)g("con\014g")h(to)g(sp)s(ecify)e(y)m(our)i(compiler)e (and)g(install)g(options.)347 2562 y(2.)46 b(T)m(yp)s(e)30 b Fm(make)g Fn(to)h(mak)m(e)g(the)g(binary)-8 b(.)347 2749 y(3.)46 b(T)m(yp)s(e)30 b Fm(make)47 b(install)28 b Fn(to)j(cop)m(y)h(the)e(BDD)i(\014les)d(to)i(their)f(appropriate)f (directories)347 2937 y(4.)46 b(T)m(yp)s(e)30 b Fm(make)47 b(examples)28 b Fn(to)j(mak)m(e)h(the)e(examples)236 3223 y Fk(2.3)136 b(Compiling)236 3426 y Fn(This)28 b(is)g(rather)h (simple.)38 b(Just)28 b(inform)g(the)h(compiler)f(of)h(where)g(the)g (binaries)e(and)h(include)f(\014les)h(are)236 3539 y(installed.)38 b(With)26 b(Gn)m(u)h(C)g(this)f(is)h(done)g(with)f(the)h Fm(-I)g Fn(and)g Fm(-L)f Fn(options.)39 b(Assuming)26 b(that)i(the)f(binary)236 3652 y(library)g Fm(libbdd.a)g Fn(is)h(installed)e(in)i Fm(/usr/local/lib)d Fn(and)j(the)i(include)c (\014le)i Fm(bdd.h)g Fn(is)g(installed)f(in)236 3765 y Fm(/usr/local/include)p Fn(,)f(then)k(the)g(compile)g(command)g (should)e(b)s(e)377 3968 y Fm(cc)48 b(-I/usr/local/include)42 b(myfile.c)j(-o)j(myfile)e(-L/usr/include/lib)c(-lbdd)236 4173 y Fn(If)31 b(the)h(ab)s(o)m(v)m(e)h(directories)d(are)i(included)d (in)h(y)m(our)i(searc)m(h)g(path)f(already)-8 b(,)33 b(then)e(y)m(ou)h(migh)m(t)f(b)s(e)g(able)236 4286 y(to)g(reduce)f(the) h(command)f(to)463 4485 y Fm(cc)48 b(myfile.c)d(-o)i(myfile)f(-lbdd)236 4777 y Fk(2.4)136 b(Programming)46 b(with)f(BuDDy)236 4980 y Fn(First)28 b(of)h(all)f(a)h(program)g(needs)f(to)i(call)e Fm(bdd)p 1791 4980 29 4 v 33 w(init\(nodenum,cachesize\))23 b Fn(to)29 b(initialize)d(the)j(BDD)236 5093 y(pac)m(k)-5 b(age.)55 b(The)34 b Fm(nodenum)e Fn(parameter)j(sets)g(the)g(initial)c (n)m(um)m(b)s(er)i(of)i(BDD)h(no)s(des)d(and)h Fm(cachesize)236 5206 y Fn(sets)28 b(the)g(size)f(of)h(the)g(cac)m(hes)h(used)e(for)g (the)h(BDD)g(op)s(erators)g(\(not)g(the)g(unique)e(no)s(de)h(table\).) 40 b(These)236 5319 y(cac)m(hes)32 b(are)f(used)e(for)i Fm(bdd)p 1166 5319 V 33 w(apply)e Fn(anmong)h(others.)377 5432 y(Go)s(o)s(d)g(initial)e(v)-5 b(alues)30 b(are)1985 5989 y(3)p eop %%Page: 4 12 4 11 bop 427 150 a Fo(Example)642 b(no)s(den)m(um)99 b(cac)m(hesize)427 263 y Fn(Small)29 b(test)i(examples)486 b(1000)377 b(100)427 376 y(Small)29 b(examples)618 b(10000)331 b(1000)427 489 y(Medium)29 b(sized)h(examples)246 b(100000)287 b(10000)427 602 y(Large)31 b(examples)526 b(1000000)203 b(v)-5 b(ariable)236 757 y(T)d(o)s(o)40 b(few)f(no)s(des)f(will)e(only) j(result)f(in)f(reduced)i(p)s(erformance)f(as)h(this)f(increases)h(the) h(n)m(um)m(b)s(er)d(of)236 870 y(garbage)g(collections)e(needed.)55 b(If)35 b(the)h(pac)m(k)-5 b(age)37 b(needs)e(more)h(no)s(des,)g(then)f (it)g(will)e(automatically)236 983 y(increase)21 b(the)g(size)f(of)h (the)g(no)s(de)f(table.)38 b(Use)21 b Fm(bdd)p 1906 983 29 4 v 34 w(setminfreenodes)16 b Fn(to)22 b(c)m(hange)g(the)f (parameters)g(for)236 1095 y(when)h(this)g(is)g(done)g(and)g(use)h Fm(bdd)p 1398 1095 V 33 w(setcacheratio)d Fn(to)j(enable)f(dynamical)g (resizing)f(of)i(the)g(op)s(erator)236 1208 y(cac)m(hes.)41 b(Y)-8 b(ou)27 b(ma)m(y)g(also)f(use)g(the)g(function)f Fm(bdd)p 1912 1208 V 34 w(setmaxincrease)d Fn(to)27 b(adjust)f(ho)m(w)g (BuDDy)h(resizes)236 1321 y(the)k(no)s(de)e(table.)377 1434 y(After)42 b(the)f(initialization)d(a)k(call)e(m)m(ust)h(b)s(e)g (done)g(to)h Fm(bdd)p 2469 1434 V 33 w(setvarnum)d Fn(to)j(de\014ne)e (ho)m(w)h(man)m(y)236 1547 y(v)-5 b(ariables)30 b(to)j(use)e(in)f(this) g(session.)43 b(This)30 b(n)m(um)m(b)s(er)g(ma)m(y)i(b)s(e)f(increased) g(later)g(on)h(either)f(b)m(y)g(calls)g(to)236 1660 y Fm(bdd)p 386 1660 V 34 w(setvarnum)d Fn(or)i(to)h Fm(bdd)p 1246 1660 V 34 w(extvarnum)p Fn(.)377 1773 y(The)20 b(atomic)h (functions)e(for)h(getting)h(new)f(BDD)h(no)s(des)f(are)g Fm(bdd)p 2588 1773 V 34 w(ithvar\(i\))d Fn(and)j Fm(bdd)p 3382 1773 V 34 w(nithvar\(i\))236 1886 y Fn(whic)m(h)27 b(returns)f(references)i(to)h(BDD)g(no)s(des)e(of)h(the)f(form)h(\()p Fj(v)2359 1900 y Fi(i)2387 1886 y Fj(;)15 b Fn(0)p Fj(;)g Fn(1\))30 b(and)d(\()p Fj(v)2875 1900 y Fi(i)2904 1886 y Fj(;)15 b Fn(1)p Fj(;)g Fn(0\).)42 b(The)27 b(no)s(des)g(con-)236 1999 y(structed)h(in)f(this)g(w)m(a)m(y)j(corresp)s(onds)c(to)j(the)g (p)s(ositiv)m(e)e(and)h(negativ)m(e)h(v)m(ersions)f(of)g(a)h(single)d (v)-5 b(ariable.)236 2112 y(Initially)28 b(the)i(v)-5 b(ariable)29 b(order)h(is)g Fj(v)1451 2126 y Fh(0)1515 2112 y Fj(<)25 b(v)1655 2126 y Fh(1)1720 2112 y Fj(<)g(:)15 b(:)g(:)26 b(<)f(v)2087 2126 y Fi(n)p Fg(\000)p Fh(1)2250 2112 y Fj(<)g(v)2390 2126 y Fi(n)2437 2112 y Fn(.)377 2225 y(The)41 b(BDDs)h(returned)e(from)h Fm(bdd)p 1611 2225 V 34 w(ithvar\(i\))d Fn(can)k(then)f(b)s(e)f(used)h(to)h(form)f (new)f(BDDs)j(b)m(y)236 2337 y(calling)c Fm(bdd)p 684 2337 V 33 w(apply\(a,b,op\))e Fn(where)j Fm(op)f Fn(ma)m(y)i(b)s(e)f Fm(bddop)p 2367 2337 V 33 w(and)f Fn(or)h(an)m(y)h(of)f(the)h(other)f (op)s(erators)236 2450 y(de\014ned)27 b(in)g Fm(bdd.h)p Fn(.)38 b(The)28 b(apply)e(function)h(p)s(erforms)f(the)j(binary)d(op)s (eration)h(indicated)g(b)m(y)h Fm(op)p Fn(.)39 b(Use)236 2563 y Fm(bdd)p 386 2563 V 34 w(not)28 b Fn(to)i(negate)g(a)f(BDD.)i (The)d(result)g(from)h Fm(bdd)p 2115 2563 V 33 w(apply)f Fn(and)g(an)m(y)h(other)h(BDD)g(op)s(erator)f Ff(must)236 2676 y Fn(b)s(e)c(handed)f(o)m(v)m(er)j(to)f Fm(bdd)p 1114 2676 V 34 w(addref)d Fn(to)k(increase)e(the)g(reference)h(coun)m (t)g(of)g(the)g(no)s(de)e(b)s(efore)h(an)m(y)h(other)236 2789 y(op)s(eration)34 b(is)g(p)s(erformed.)52 b(This)33 b(is)h(done)g(to)h(prev)m(en)m(t)h(the)f(BDD)h(from)e(b)s(eing)f (garbage)j(collected.)236 2902 y(When)f(a)g(BDD)i(is)d(no)h(longer)f (in)g(use,)i(it)e(can)i(b)s(e)e(de-referenced)h(b)m(y)g(a)h(call)e(to)i Fm(bdd)p 3230 2902 V 33 w(delref)p Fn(.)53 b(The)236 3015 y(exceptions)28 b(to)h(this)e(are)h(the)h(return)e(v)-5 b(alues)27 b(from)h Fm(bdd)p 2171 3015 V 33 w(ithvar)f Fn(and)g Fm(bdd)p 2837 3015 V 34 w(nithvar)p Fn(.)37 b(These)28 b(do)g(not)236 3128 y(need)35 b(to)g(b)s(e)f(reference)h (coun)m(ted,)h(although)e(it)g(is)g(not)h(an)f(error)g(to)i(do)e(so.)53 b(The)35 b(use)f(of)g(the)h(BDD)236 3241 y(pac)m(k)-5 b(age)33 b(ends)c(with)g(a)i(call)f(to)h Fm(bdd)p 1493 3241 V 33 w(done)p Fn(.)40 b(See)31 b(the)f(\014gures)g(2.1)h(and)f (2.2)h(for)g(an)f(example.)377 3354 y(Information)41 b(on)g(the)h(BDDs)h(can)f(b)s(e)e(found)h(using)f(the)i Fm(bdd)p 2621 3354 V 33 w(var)p Fn(,)i Fm(bdd)p 3011 3354 V 33 w(low)d Fn(and)g Fm(bdd)p 3561 3354 V 34 w(high)236 3467 y Fn(functions)30 b(that)i(returns)e(the)i(v)-5 b(ariable)30 b(lab)s(elling)e(a)k(BDD,)h(the)f(lo)m(w)f(branc)m(h)g (and)f(the)i(high)e(branc)m(h)236 3579 y(of)h(a)g(BDD.)377 3692 y(Prin)m(ting)i(BDDs)i(is)e(done)i(using)d(the)j(functions)e Fm(bdd)p 2277 3692 V 33 w(printall)f Fn(that)j(prin)m(ts)e Ff(al)5 b(l)35 b Fn(used)e(no)s(des,)236 3805 y Fm(bdd)p 386 3805 V 34 w(printtable)25 b Fn(that)j(prin)m(ts)f(the)h(part)f(of)i (the)f(no)s(detable)f(that)h(corresp)s(onds)f(to)h(a)h(sp)s(eci\014c)d (BDD)236 3918 y(and)d Fm(bdd)p 556 3918 V 34 w(printset)e Fn(that)j(prin)m(ts)e(a)i(sp)s(eci\014c)e(BDD)j(as)f(a)f(list)g(of)g (elemen)m(ts)h(in)e(a)i(set)g(\(all)f(paths)g(ending)236 4031 y(in)29 b(the)i(true)f(terminal\).)236 4275 y Fe(2.4.1)113 b(More)37 b(Examples)236 4446 y Fn(More)31 b(complex)f(examples)g(can)h (b)s(e)f(found)f(in)g(the)h Fm(buddy/examples)d Fn(directory)-8 b(.)236 4733 y Fk(2.5)136 b(V)-11 b(ariable)45 b(sets)236 4936 y Fn(F)-8 b(or)25 b(some)g(functions)e(lik)m(e)h Fm(bdd)p 1312 4936 V 33 w(exist)f Fn(it)h(is)g(p)s(ossible)e(to)j(pass) f(a)h(whole)e(set)i(of)g(v)-5 b(ariables)23 b(to)i(b)s(e)f(quan-)236 5048 y(ti\014ed,)32 b(using)f(BDDs)i(that)g(represen)m(t)f(the)h(v)-5 b(ariables.)44 b(These)32 b(BDDs)i(are)e(simply)e(the)i(conjunction)236 5161 y(of)f(all)f(the)g(v)-5 b(ariables)30 b(in)f(their)h(p)s(ositiv)m (e)g(form)g(and)g(can)h(either)f(b)s(e)g(build)e(that)j(w)m(a)m(y)g(or) g(b)m(y)g(a)g(call)f(to)236 5274 y Fm(bdd)p 386 5274 V 34 w(makeset)p Fn(.)53 b(F)-8 b(or)35 b(the)h Fm(bdd)p 1307 5274 V 33 w(restrict)d Fn(function)h(the)h(v)-5 b(ariables)34 b(need)h(to)h(b)s(e)e(included)e(in)i(b)s(oth)236 5387 y(p)s(ositiv)m(e)c(and)f(negativ)m(e)j(form)e(whic)m(h)f(can)i (only)e(b)s(e)h(done)g(man)m(ually)-8 b(.)377 5500 y(If)27 b(for)f(example)g(v)-5 b(ariable)26 b(1)h(and)f(v)-5 b(ariable)26 b(3)h(are)g(to)g(b)s(e)f(included)e(in)i(a)h(set,)h(then)e (it)h(can)g(b)s(e)f(done)236 5613 y(in)j(t)m(w)m(o)j(w)m(a)m(ys,)f(as)g (sho)m(wn)f(in)f(\014gure)h(2.3.)1985 5989 y(4)p eop %%Page: 5 13 5 12 bop 236 127 a Fm(#include)46 b()236 352 y(main\(void\))236 465 y({)379 578 y(bdd)h(x,y,z;)379 804 y(bdd_init\(1000,100\);)379 917 y(bdd_setvarnum\(5\);)379 1143 y(x)h(=)f(bdd_ithvar\(0\);)379 1256 y(y)h(=)f(bdd_ithvar\(1\);)379 1369 y(z)h(=)f (bdd_addref\(bdd_apply\(x,y,)o(bddo)o(p_an)o(d\)\))o(;)379 1594 y(bdd_printtable\(z\);)379 1707 y(bdd_delref\(z\);)379 1820 y(bdd_done\(\);)236 1933 y(})236 2229 y Fn(Figure)32 b(2.1:)46 b(Standard)32 b(C)g(in)m(terface)h(to)g(BuDDy)-8 b(.)48 b(In)32 b(this)f(mo)s(de)h(b)s(oth)g('b)s(dd')f(and)h('BDD')i (can)f(b)s(e)236 2342 y(used)25 b(as)g(BuDDy)h(BDD)h(t)m(yp)s(es.)39 b(The)25 b(C)g(in)m(terface)h(requires)d(the)j(user)f(to)h(ensure)e (garbage)j(collection)236 2454 y(is)33 b(handled)g(correctly)-8 b(.)53 b(This)32 b(means)i(calling)f('b)s(dd)p 2066 2454 28 4 v 31 w(addref)7 b(')33 b(ev)m(ery)i(time)f(a)h(new)f(BDD)h(is)e (created,)236 2567 y(and)d('b)s(dd)p 599 2567 V 31 w(delref)7 b(')30 b(whenev)m(er)g(a)h(BDD)g(is)f(not)g(in)f(use)h(an)m(ymore.)236 2842 y Fk(2.6)136 b(Dynamic)45 b(V)-11 b(ariable)45 b(Reordering)236 3045 y Fn(Dynamic)31 b(v)-5 b(ariable)29 b(reordering)h(can)h(b)s(e)f (done)h(using)e(the)i(functions)e Fm(bdd)p 2845 3045 29 4 v 34 w(reorder\(int)44 b(method\))236 3158 y Fn(and)34 b Fm(bdd)p 567 3158 V 34 w(autoreorder\(int)43 b(method\))p Fn(.)52 b(Where)35 b(the)g(parameter)g Fm(method)p Fn(,)f(for)h (instance)f(can)h(b)s(e)236 3271 y Fm(BDD)p 386 3271 V 34 w(REORDER)p 756 3271 V 32 w(WIN2ITE)p Fn(.)40 b(The)i(pac)m(k)-5 b(age)44 b(m)m(ust)e(kno)m(w)g(ho)m(w)g(the)g(BDD)h(v)-5 b(ariables)41 b(are)h(related)g(to)236 3384 y(eac)m(h)30 b(other,)g(so)f(the)f(user)h(m)m(ust)f(de\014ne)g(blo)s(c)m(ks)g(of)h (BDD)h(v)-5 b(ariables,)28 b(using)f Fm(bdd)p 3036 3384 V 34 w(addvarblock\(bdd)236 3497 y(var,)47 b(int)g(fixed\))p Fn(.)65 b(A)39 b(blo)s(c)m(k)f(is)g(a)i(range)f(of)g(BDD)h(v)-5 b(ariables)38 b(that)i(should)d(b)s(e)h(k)m(ept)i(together.)236 3610 y(It)34 b(ma)m(y)g(either)f(b)s(e)g(a)h(simple)d(con)m(tiguous)j (sequence)g(of)f(v)-5 b(ariables)32 b(or)i(a)g(sequence)g(of)f(other)h (blo)s(c)m(ks)236 3723 y(with)g(ranges)h(inside)e(their)h(paren)m(ts)h (range.)55 b(In)35 b(this)e(w)m(a)m(y)j(all)e(the)i(blo)s(c)m(ks)e (form)h(a)g(tree)h(of)f(ranges.)236 3836 y(P)m(artially)29 b(o)m(v)m(erlapping)h(blo)s(c)m(ks)g(are)h(not)f(allo)m(w)m(ed.)377 3949 y(Example:)52 b(Assume)36 b(the)h(blo)s(c)m(k)f Fj(v)1598 3963 y Fh(0)1652 3949 y Fj(:)15 b(:)g(:)i(v)1818 3963 y Fh(9)1857 3949 y Fn(,)38 b(is)e(added)f(as)i(the)g(\014rst)e (blo)s(c)m(k)h(and)g(then)g(the)h(blo)s(c)m(k)236 4062 y Fj(v)280 4076 y Fh(1)335 4062 y Fj(:)15 b(:)g(:)h(v)500 4076 y Fh(8)540 4062 y Fn(.)53 b(This)33 b(yields)g(the)h Fj(v)1294 4076 y Fh(0)1349 4062 y Fj(:)15 b(:)g(:)h(v)1514 4076 y Fh(9)1588 4062 y Fn(blo)s(c)m(k)35 b(at)g(the)g(top,)h(with)d (the)i Fj(v)2717 4076 y Fh(1)2772 4062 y Fj(:)15 b(:)g(:)h(v)2937 4076 y Fh(8)3011 4062 y Fn(blo)s(c)m(k)34 b(as)h(a)g(c)m(hild.)52 b(If)236 4174 y(no)m(w)29 b(the)g(blo)s(c)m(k)g Fj(v)862 4188 y Fh(1)916 4174 y Fj(:)15 b(:)g(:)h(v)1081 4188 y Fh(4)1150 4174 y Fn(w)m(as)29 b(added,)g(it)f(w)m(ould)g(b)s(ecome)h (a)g(c)m(hild)f(of)h(the)g Fj(v)2886 4188 y Fh(1)2940 4174 y Fj(:)15 b(:)g(:)i(v)3106 4188 y Fh(8)3174 4174 y Fn(blo)s(c)m(k,)29 b(similarly)236 4287 y(the)35 b(blo)s(c)m(k)f Fj(v)685 4301 y Fh(5)739 4287 y Fj(:)15 b(:)g(:)i(v)905 4301 y Fh(8)978 4287 y Fn(w)m(ould)33 b(b)s(e)h(a)h(c)m(hild)e(of)h (the)h Fj(v)1991 4301 y Fh(1)2045 4287 y Fj(:)15 b(:)g(:)i(v)2211 4301 y Fh(8)2284 4287 y Fn(blo)s(c)m(k.)53 b(If)34 b(w)m(e)g(add)g(the) h(v)-5 b(ariables)33 b Fj(v)3571 4301 y Fh(1)3610 4287 y Fn(,)j Fj(v)3715 4301 y Fh(2)3754 4287 y Fn(,)236 4400 y Fj(v)280 4414 y Fh(3)349 4400 y Fn(and)29 b Fj(v)569 4414 y Fh(4)639 4400 y Fn(as)h(single)e(v)-5 b(ariable)28 b(blo)s(c)m(ks)h(w)m(e)i(at)f(last)g(get)h(tree)f(sho)m(w)m(ed)g(in)e (\014gure)h(2.4.)42 b(If)29 b(all)g(v)-5 b(ariables)236 4513 y(should)33 b(b)s(e)h(added)g(as)h(single)f(v)-5 b(ariable)33 b(blo)s(c)m(ks)h(then)h Fm(bdd)p 2290 4513 V 33 w(varblockall)d Fn(can)j(b)s(e)f(used)g(instead)g(of)236 4626 y(doing)c(it)g(man)m(ually)-8 b(.)377 4739 y(The)33 b(reordering)g(algorithm)f(is)h(then)g(to)h(\014rst)f(reorder)g(the)h (top)g(most)f(blo)s(c)m(ks)g(and)g(there)h(after)236 4852 y(descend)k(in)m(to)f(eac)m(h)i(blo)s(c)m(k)f(and)f(reorder)g (these)i(recursiv)m(ely)d(-)i(unless)e(the)i(blo)s(c)m(k)g(is)e (de\014ned)h(as)h(a)236 4965 y(\014xed)30 b(blo)s(c)m(k.)377 5078 y(If)47 b(the)h(user)f(w)m(an)m(t)h(to)h(con)m(trol)f(the)f(sw)m (apping)f(of)i(v)-5 b(ariables)46 b(himself,)k(then)d(the)h(functions) 236 5191 y Fm(bdd)p 386 5191 V 34 w(swapvar)42 b(bdd)p 942 5191 V 34 w(setvarorder)f Fn(ma)m(y)k(b)s(e)f(used.)83 b(But)44 b(this)g(is)f(not)i(p)s(ossible)d(in)h(conjunction)236 5304 y(with)34 b(the)h(use)g(of)g(v)-5 b(ariable)34 b(blo)s(c)m(ks)h (and)f(the)i Fm(bdd)p 1999 5304 V 33 w(swapvar)d Fn(is)i(unfortunately) e(quite)i(slo)m(w)g(since)f(a)236 5416 y(full)29 b(scan)i(of)g(all)f (the)h(no)s(des)f(m)m(ust)h(b)s(e)f(done)h(b)s(oth)f(b)s(efore)g(and)h (after)g(the)g(sw)m(ap.)42 b(Other)31 b(reordering)236 5529 y(functions)i(are)j Fm(bdd)p 939 5529 V 33 w(autoreorder)p 1500 5529 V 31 w(times)p Fn(,)f Fm(bdd)p 1975 5529 V 34 w(reorder)p 2345 5529 V 32 w(verbose)p Fn(,)f Fm(bdd)p 2916 5529 V 34 w(sizeprobe)p 3382 5529 V 32 w(hook)f Fn(and)236 5642 y Fm(bdd)p 386 5642 V 34 w(reorder)p 756 5642 V 32 w(hook)p Fn(.)1985 5989 y(5)p eop %%Page: 6 14 6 13 bop 236 127 a Fm(#include)46 b()236 352 y(main\(void\))236 465 y({)379 578 y(bdd)h(x,y,z;)379 804 y(bdd_init\(1000,100\);)379 917 y(bdd_setvarnum\(5\);)379 1143 y(x)h(=)f(bdd_ithvar\(0\);)379 1256 y(y)h(=)f(bdd_ithvar\(1\);)379 1369 y(z)h(=)f(x)h(&)f(y;)379 1594 y(cout)g(<<)g(bddtable)f(<<)h(z)g(<<)h(endl;)379 1820 y(bdd_done\(\);)236 1933 y(})236 2229 y Fn(Figure)36 b(2.2:)52 b(C++)35 b(in)m(terface)h(to)h(BuDDy)-8 b(.)58 b(In)35 b(this)g(mo)s(de)g('b)s(dd')f(is)h(a)h(C++)f(class)h(that)g (wraps)f(a)236 2342 y(handler)e(around)g(the)i(standard)f(C)g(in)m (terface,)i(and)e(the)h('BDD')h(t)m(yp)s(e)f(referes)f(to)h(the)g (standard)f(C)236 2454 y(BDD)e(t)m(yp)s(e.)43 b(The)30 b(C++)g(in)m(terface)h(handles)f(all)f(garbage)k(collection,)d(so)i(no) e(calls)g(to)i('b)s(dd)p 3471 2454 28 4 v 31 w(addref)7 b(')236 2567 y(and)30 b('b)s(dd)p 599 2567 V 31 w(delref)7 b(')30 b(are)g(needed.)236 2825 y Fk(2.7)136 b(Error)45 b(Handling)236 3028 y Fn(If)33 b(an)g(error)g(o)s(ccurs)g(then)g(a)g(c) m(hec)m(k)i(is)d(done)h(to)h(see)g(if)e(there)i(is)e(an)m(y)i(error)f (handler)e(de\014ned)h(and)g(if)236 3141 y(so)37 b(it)f(is)f(called)g (with)g(the)i(error)f(co)s(de)g(of)h(in)m(terest.)58 b(The)36 b(default)g(error)f(handler)g(prin)m(ts)g(an)h(error)236 3253 y(message)g(on)e Fm(stderr)e Fn(and)i(then)f(ab)s(orts)h(the)h (program.)52 b(A)34 b(handler)e(can)j(also)f(b)s(e)f(de\014ned)g(b)m(y) h(the)236 3366 y(user)c(with)f(a)i(call)e(to)j Fm(bdd)p 1140 3366 29 4 v 33 w(error)p 1413 3366 V 33 w(hook)p Fn(.)236 3653 y Fk(2.8)136 b(The)44 b(C++)g(in)l(terface)236 3856 y Fn(Mostly)35 b(this)e(consists)i(of)f(a)h(set)g(of)g(o)m(v)m (erloaded)h(function)d(wrapp)s(ers)g(that)i(tak)m(es)h(a)f Fm(bdd)f Fn(class)g(and)236 3969 y(calls)24 b(the)i(appropriate)e(C)g (functions)g(with)g(the)h(ro)s(ot)g(n)m(um)m(b)s(er)f(stored)h(in)f (the)h Fm(bdd)f Fn(class.)39 b(The)25 b(names)236 4082 y(of)36 b(these)f(wrapp)s(ers)f(are)h(exactly)h(the)g(same)f(as)h(for)f (the)g(C)g(functions.)54 b(In)34 b(addition)g(to)i(this)e(a)h(lot)236 4194 y(of)k(the)g(C++)e(op)s(erators)i(lik)m(e)f Fm(|)p Fn(&)g(-)g(=)h(==)f(are)g(o)m(v)m(erloaded)i(in)d(order)h(to)i(p)s (erform)d(most)i(of)f(the)236 4307 y Fm(bdd)p 386 4307 V 34 w(apply\(\))28 b Fn(op)s(erations.)40 b(These)30 b(are)h(listed)e(together)j(with)d Fm(bdd)p 2630 4307 V 33 w(apply)p Fn(.)40 b(The)30 b(rest)g(are)427 4508 y Fo(Op)s(erator)111 b(Description)101 b(Return)35 b(v)-6 b(alue)427 4621 y Fm(=)481 b Fn(assignmen)m(t)427 4733 y Fm(==)433 b Fn(test)480 b(returns)29 b(1)i(if)e(t)m(w)m(o)j(BDDs)f (are)g(equal,)f(otherwise)g(0)427 4846 y Fm(!=)433 b Fn(test)480 b(returns)29 b(0)i(if)e(t)m(w)m(o)j(BDDs)f(are)g(equal,)f (otherwise)g(1)427 4959 y Fm(bdd.id\(\))145 b Fn(iden)m(tit)m(y)320 b(returns)29 b(the)i(ro)s(ot)f(n)m(um)m(b)s(er)f(of)i(the)g(BDD)236 5215 y(The)i(default)f(constructor)h(for)g(the)g Fm(bdd)g Fn(class)f(initializes)f(the)i(b)s(dds)e(to)i(the)h(constan)m(t)g (false)f(v)-5 b(alue.)236 5328 y(Reference)32 b(coun)m(ting)e(is)g (totally)g(automatic)i(when)d(the)i Fm(bdd)f Fn(class)g(is)g(used,)g (here)g(the)h(constructors)236 5441 y(and)f(destructors)f(tak)m(es)j (care)f(of)f Ff(al)5 b(l)30 b Fn(reference)h(coun)m(ting!)40 b(The)30 b(C++)f(in)m(terface)h(is)f(also)h(de\014ned)f(in)236 5554 y Fm(bdd.h)g Fn(so)i(nothing)e(extra)i(is)f(needed)g(to)h(use)f (it.)1985 5989 y(6)p eop %%Page: 7 15 7 14 bop 236 127 a Fm(#include)46 b()236 352 y(main\(\))236 465 y({)379 578 y(bdd)h(v1,)g(v3;)379 691 y(bdd)g(seta,)g(setb;)379 804 y(static)f(int)h(v[2])g(=)g({1,3};)379 1030 y(bdd_init\(100,100\);) 379 1143 y(bdd_setvarnum\(5\);)379 1369 y(v1)h(=)f(bdd_ithvar\(1\);)379 1481 y(v3)h(=)f(bdd_ithvar\(3\);)523 1707 y(/*)g(One)g(way)g(*/)379 1820 y(seta)g(=)g(bdd_addref\()e(bdd_apply\(v1,v3,bddop_and)o(\))d(\);) 379 1933 y(bdd_printtable\(seta\);)523 2159 y(/*)47 b(Another)f(way)g (*/)379 2272 y(setb)h(=)g(bdd_addref\()e(bdd_makeset\(v,2\))f(\);)379 2385 y(bdd_printtable\(setb\);)236 2498 y(})1095 2793 y Fn(Figure)30 b(2.3:)41 b(Tw)m(o)31 b(w)m(a)m(ys)g(to)g(create)h(a)f (v)-5 b(ariable)29 b(set.)236 3062 y Fk(2.9)136 b(Finite)45 b(Domain)h(Blo)t(c)l(ks)236 3265 y Fn(Included)20 b(in)h(the)i(BDD)g (pac)m(k)-5 b(age)24 b(is)d(a)i(set)g(of)f(functions)f(for)h (manipulating)d(v)-5 b(alues)22 b(of)g(\014nite)f(domains,)236 3378 y(lik)m(e)27 b(for)f(example)h(\014nite)f(state)i(mac)m(hines.)39 b(These)27 b(functions)f(are)h(used)f(to)i(allo)s(cate)g(blo)s(c)m(ks)e (of)h(BDD)236 3491 y(v)-5 b(ariables)29 b(to)i(represen)m(t)g(in)m (teger)g(v)-5 b(alues)29 b(instead)h(of)g(only)g(true)g(and)g(false.) 377 3604 y(New)j(\014nite)f(domain)f(blo)s(c)m(ks)i(are)g(allo)s(cated) f(using)g Fm(fdd)p 2356 3604 29 4 v 33 w(extdomain)e Fn(and)i(BDDs)i(represen)m(ting)236 3717 y(in)m(teger)k(v)-5 b(alues)37 b(can)g(b)s(e)g(build)d(using)i Fm(fdd)p 1760 3717 V 34 w(ithvar)p Fn(.)60 b(The)37 b(BDD)h(represen)m(ting)f(iden)m (tit)m(y)g(b)s(et)m(w)m(een)236 3830 y(t)m(w)m(o)i(sets)f(of)f (di\013eren)m(t)g(domains)f(can)h(b)s(e)g(build)d(using)i Fm(fdd)p 2380 3830 V 34 w(equals)p Fn(.)60 b(BDDs)38 b(represen)m(ting)f(\014nite)236 3943 y(domain)h(sets)h(can)f(b)s(e)g (prin)m(ted)f(using)g Fm(fdd)p 1780 3943 V 34 w(printset)f Fn(and)i(the)h(o)m(v)m(erloaded)g(C++)f(op)s(erator)h Fm(<<)p Fn(.)236 4056 y(P)m(airs)g(for)h Fm(bdd)p 776 4056 V 33 w(replace)e Fn(can)i(b)s(e)e(made)i(using)e Fm(fdd)p 2134 4056 V 34 w(setpair)f Fn(and)i(v)-5 b(ariable)39 b(sets)h(can)f(b)s(e)g(made)236 4169 y(using)27 b Fm(fdd)p 622 4169 V 34 w(ithset)f Fn(and)i Fm(fdd)p 1289 4169 V 34 w(makeset)p Fn(.)38 b(The)28 b(\014nite)f(domain)g(blo)s(c)m(k)h (in)m(terface)h(is)f(de\014ned)f(for)h(b)s(oth)236 4282 y(C)i(and)g(C++.)40 b(T)-8 b(o)31 b(use)f(this)f(in)m(terface)i(y)m(ou) g(m)m(ust)f(include)e Fm("fdd.h")p Fn(.)377 4394 y(Enco)s(ding)37 b(using)g(FDDs)i(are)g(done)f(with)f(the)i(Least)g(Signi\014can)m(t)e (Bits)h(\014rst)f(in)g(the)i(ordering)236 4507 y(\(top)29 b(of)g(the)g(BDD\).)h(Assume)e(v)-5 b(ariables)27 b Fj(V)1743 4521 y Fh(0)1798 4507 y Fj(:)15 b(:)g(:)h(V)1972 4521 y Fh(3)2040 4507 y Fn(are)29 b(used)f(to)h(enco)s(de)f(the)h(v)-5 b(alue)28 b(12)i(-)e(this)g(w)m(ould)236 4620 y(yield)h Fj(V)509 4634 y Fh(0)574 4620 y Fn(=)c(0)p Fj(;)15 b(V)808 4634 y Fh(1)873 4620 y Fn(=)25 b(0)p Fj(;)15 b(V)1107 4634 y Fh(2)1173 4620 y Fn(=)25 b(1)p Fj(;)15 b(V)1407 4634 y Fh(3)1472 4620 y Fn(=)25 b(1.)377 4733 y(An)j(example)f(program) h(using)e(the)i(FDD)h(in)m(terface)g(can)f(b)s(e)f(found)f(in)h(the)h (examples)f(directory)-8 b(.)236 5018 y Fk(2.10)136 b(Bo)t(olean)45 b(V)-11 b(ectors)236 5221 y Fn(Another)28 b(in)m(terface)h(la)m(y)m(er) f(for)g(BuDDy)g(implemen)m(ts)f(b)s(o)s(olean)g(v)m(ectors)i(for)f(use) f(with)g(in)m(teger)h(arith-)236 5334 y(metics.)65 b(A)39 b(b)s(o)s(olean)e(v)m(ector)j(is)e(simply)e(an)i(arra)m(y)h(of)g(BDDs)g (where)f(eac)m(h)i(BDD)g(represen)m(ts)e(one)236 5447 y(bit)d(of)g(an)h(expression.)55 b(T)-8 b(o)36 b(use)f(this)f(in)m (terface)i(y)m(ou)g(m)m(ust)g(include)d Fm("bvec.h")p Fn(.)54 b(As)35 b(an)h(example,)236 5560 y(supp)s(ose)29 b(w)m(e)i(w)m(an)m(t)g(to)g(express)f(the)h(follo)m(wing)e(assignmen)m (t)h(from)g(an)g(expression)463 5740 y Fj(x)c Fn(:=)f Fj(y)e Fn(+)d(10)1985 5989 y(7)p eop %%Page: 8 16 8 15 bop 1465 1068 a @beginspecial 0 @llx 0 @lly 177 @urx 120 @ury 1770 @rwi @setspecial %%BeginDocument: varblock.pstex %!PS-Adobe-2.0 EPSF-2.0 %%Title: varblock.pstex %%Creator: fig2dev Version 3.2 Patchlevel 1 %%CreationDate: Tue Feb 29 15:36:52 2000 %%For: jln@joshua.itu.dk (Jorn Lind-Nielsen) %%Orientation: Portrait %%BoundingBox: 0 0 177 120 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -108.0 153.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 3550 m -1000 -1000 l 5740 -1000 l 5740 3550 l cp clip 0.06000 0.06000 sc % Polyline 7.500 slw gs clippath 3255 1110 m 3225 1200 l 3195 1110 l 3195 1215 l 3255 1215 l cp clip n 3225 825 m 3225 1200 l gs col0 s gr gr % arrowhead n 3255 1110 m 3225 1200 l 3195 1110 l 3225 1110 l 3255 1110 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2643 1783 m 2550 1800 l 2614 1730 l 2522 1781 l 2551 1834 l cp clip n 3225 1425 m 2550 1800 l gs col0 s gr gr % arrowhead n 2643 1783 m 2550 1800 l 2614 1730 l 2629 1756 l 2643 1783 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3836 1730 m 3900 1800 l 3807 1783 l 3899 1834 l 3928 1781 l cp clip n 3225 1425 m 3900 1800 l gs col0 s gr gr % arrowhead n 3836 1730 m 3900 1800 l 3807 1783 l 3821 1756 l 3836 1730 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2397 2338 m 2325 2400 l 2346 2307 l 2292 2397 l 2343 2428 l cp clip n 2550 2025 m 2325 2400 l gs col0 s gr gr % arrowhead n 2397 2338 m 2325 2400 l 2346 2307 l 2371 2323 l 2397 2338 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2746 2314 m 2764 2407 l 2694 2343 l 2745 2435 l 2798 2405 l cp clip n 2550 2025 m 2764 2407 l gs col0 s gr gr % arrowhead n 2746 2314 m 2764 2407 l 2694 2343 l 2720 2328 l 2746 2314 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 3090 2327 m 3150 2400 l 3058 2378 l 3147 2433 l 3179 2383 l cp clip n 2550 2025 m 3150 2400 l gs col0 s gr gr % arrowhead n 3090 2327 m 3150 2400 l 3058 2378 l 3074 2352 l 3090 2327 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 2042 2378 m 1950 2400 l 2010 2327 l 1921 2383 l 1953 2433 l cp clip n 2550 2025 m 1950 2400 l gs col0 s gr gr % arrowhead n 2042 2378 m 1950 2400 l 2010 2327 l 2026 2352 l 2042 2378 l cp gs 0.00 setgray ef gr col0 s $F2psEnd rs %%EndDocument @endspecial 1690 768 a Fd(v)1737 783 y Fh(1)1793 768 y Fd(:)17 b(:)g(:)f(v)1971 783 y Fh(4)1990 468 y Fd(v)2037 483 y Fh(1)2093 468 y Fd(:)h(:)g(:)f(v)2271 483 y Fh(8)1990 168 y Fd(v)2037 183 y Fh(0)2093 168 y Fd(:)h(:)g(:)f(v)2271 183 y Fh(9)1690 1068 y Fd(v)1737 1083 y Fh(2)1915 1068 y Fd(v)1962 1083 y Fh(3)2140 1068 y Fd(v)2187 1083 y Fh(4)2327 768 y Fd(v)2374 783 y Fh(5)2430 768 y Fd(:)h(:)g(:)g(v)2609 783 y Fh(8)1465 1068 y Fd(v)1512 1083 y Fh(1)236 1264 y Fn(Figure)33 b(2.4:)49 b(The)33 b(v)-5 b(ariable)33 b(tree)h(for)g(the)g(v)-5 b(ariable)32 b(blo)s(c)m(ks)h Fj(v)2405 1278 y Fh(0)2460 1264 y Fj(:)15 b(:)g(:)h(v)2625 1278 y Fh(9)2665 1264 y Fn(,)35 b Fj(v)2769 1278 y Fh(1)2823 1264 y Fj(:)15 b(:)g(:)h(v)2988 1278 y Fh(8)3028 1264 y Fn(,)35 b Fj(v)3132 1278 y Fh(1)3186 1264 y Fj(:)15 b(:)g(:)i(v)3352 1278 y Fh(4)3391 1264 y Fn(,)35 b Fj(v)3495 1278 y Fh(5)3550 1264 y Fj(:)15 b(:)g(:)h(v)3715 1278 y Fh(8)3754 1264 y Fn(,)236 1377 y Fj(v)280 1391 y Fh(1)320 1377 y Fn(,)30 b Fj(v)419 1391 y Fh(2)459 1377 y Fn(,)g Fj(v)558 1391 y Fh(3)628 1377 y Fn(and)g Fj(v)849 1391 y Fh(4)888 1377 y Fn(.)236 1752 y(what)j(w)m(e)g(do)g(is)e(to)j(enco)s (de)f(the)g(v)-5 b(ariable)31 b Fj(y)36 b Fn(and)c(the)h(v)-5 b(alue)32 b(10)i(as)f(b)s(o)s(olean)e(v)m(ectors)k Fj(y)g Fn(and)d Fj(v)k Fn(of)d(a)236 1865 y(\014xed)d(length.)40 b(Assume)30 b(w)m(e)h(use)f(four)f(bits)h(with)f(LSB)h(to)h(the)g(righ) m(t,)f(then)g(w)m(e)h(get)463 2053 y Fj(y)e Fn(=)c Fc(h)p Fj(y)713 2067 y Fh(4)752 2053 y Fj(;)15 b(:)g(:)g(:)i(;)e(y)999 2067 y Fh(1)1038 2053 y Fc(i)463 2265 y Fj(v)29 b Fn(=)c Fc(h)p Fn(1)p Fj(;)15 b Fn(0)p Fj(;)g Fn(1)p Fj(;)g Fn(0)p Fc(i)236 2478 y Fn(where)32 b(eac)m(h)h Fj(y)752 2492 y Fi(i)812 2478 y Fn(is)e(the)i(BDD)g(v)-5 b(ariable)31 b(used)g(to)i(enco)s(de)g(the)f(in)m(teger)g(v)-5 b(ariable)31 b Fj(y)s Fn(.)46 b(No)m(w)33 b(the)g(result)236 2591 y(of)e(the)f(addition)f(can)i(b)s(e)e(expressed)h(as)h(the)f(v)m(ector) i Fj(z)e Fn(=)25 b Fc(h)p Fj(z)2339 2605 y Fh(4)2379 2591 y Fj(;)15 b(:)g(:)g(:)h(;)f(z)2622 2605 y Fh(1)2663 2591 y Fc(i)30 b Fn(where)g(eac)m(h)i Fj(z)3238 2605 y Fi(i)3296 2591 y Fn(is:)463 2778 y Fj(z)505 2792 y Fi(i)559 2778 y Fn(=)25 b Fj(y)700 2792 y Fi(i)758 2778 y Fn(xor)31 b Fj(v)962 2792 y Fi(i)1020 2778 y Fn(xor)f Fj(c)1218 2792 y Fi(i)p Fg(\000)p Fh(1)236 2966 y Fn(and)g(the)h(carry) f(in)f Fj(c)950 2980 y Fi(i)1009 2966 y Fn(is)463 3153 y Fj(c)502 3167 y Fi(i)556 3153 y Fn(=)c(\()p Fj(y)732 3167 y Fi(i)791 3153 y Fn(and)k Fj(v)1011 3167 y Fi(i)1040 3153 y Fn(\))h(or)h(\()p Fj(c)1291 3167 y Fi(i)p Fg(\000)p Fh(1)1440 3153 y Fn(and)f(\()p Fj(y)1697 3167 y Fi(i)1755 3153 y Fn(or)h Fj(v)1911 3167 y Fi(i)1939 3153 y Fn(\)\))p Fj(:)236 3341 y Fn(with)37 b Fj(c)490 3355 y Fh(0)569 3341 y Fn(=)h(0.)65 b(What)39 b(is)f(left)g(no)m(w)g(is)g(to)h(assign)f (the)g(result)g(to)h Fj(x)p Fn(.)65 b(This)37 b(is)g(a)i(conjunction)e (of)i(a)236 3454 y(biimplication)27 b(of)j(eac)m(h)i(elemen)m(t)f(in)e (the)h(v)m(ectors,)i(so)f(the)g(result)e(is)463 3712 y Fj(R)d Fn(=)694 3606 y Fh(4)665 3631 y Fb(^)654 3813 y Fi(i)p Fh(=1)784 3712 y Fj(x)836 3726 y Fi(i)889 3712 y Fc(,)f Fj(z)1047 3726 y Fi(i)1076 3712 y Fj(:)236 3967 y Fn(The)37 b(ab)s(o)m(v)m(e)h(example)f(could)f(b)s(e)g(carried)h(out) g(with)f(the)h(follo)m(wing)f(C++)g(program)h(that)g(utilizes)236 4080 y(the)31 b(FDD)g(in)m(terface)g(for)f(prin)m(ting)f(the)h(result.) 236 4268 y Fm(#include)46 b("bvec.h")236 4494 y(main\(\))236 4607 y({)379 4720 y(int)h(domain[2])f(=)h({16,16};)379 4945 y(bdd_init\(100,100\);)379 5058 y(fdd_extdomain\(domain,)42 b(2\);)379 5284 y(bvec)47 b(y)g(=)h(bvec_varfdd\(0\);)379 5397 y(bvec)f(v)g(=)h(bvec_con\(4,)d(10\);)379 5510 y(bvec)i(z)g(=)h (bvec_add\(y,)d(v\);)379 5736 y(bvec)i(x)g(=)h(bvec_varfdd\(1\);)1985 5989 y Fn(8)p eop %%Page: 9 17 9 16 bop 379 162 a Fm(bdd)95 b(result)46 b(=)i(bddtrue;)379 388 y(for)f(\(int)g(n=0)g(;)g(n;)g Fc(\024)p Fj(;)g Fc(\025)p Fj(;)g Fn(=)p Fj(;)g Fc(6)p Fn(=)27 b(can)g(also)g(b)s(e)f(enco)s(ded.)40 b(Assume)26 b(w)m(e)h(w)m(an)m(t)h(to)f(enco)s(de)236 1140 y Fj(x)e Fc(\024)g Fj(y)34 b Fn(using)28 b(the)j(same)g(v)-5 b(ariables)29 b(as)h(in)f(the)i(ab)s(o)m(v)m(e)h(example.)40 b(This)29 b(w)m(ould)g(b)s(e)g(done)i(as:)236 1328 y Fm(#include)46 b("bvec.h")236 1554 y(main\(\))236 1667 y({)379 1780 y(int)h(domain[2])f(=)h({16,16};)379 2005 y(bdd_init\(100,100\);)379 2118 y(fdd_extdomain\(domain,)42 b(2\);)379 2344 y(bvec)47 b(y)g(=)h(bvec_varfdd\(1\);)379 2457 y(bvec)f(x)g(=)h(bvec_varfdd\(0\);)379 2683 y(bdd)95 b(result)46 b(=)i(bvec_lte\(x,y\);)379 2909 y(cout)f(<<)g(fddset)f(<<)h (result)g(<<)g(endl)f(<<)i(endl;)236 3022 y(})236 3209 y Fn(Please)42 b(note)g(that)g(all)e(v)m(ectors)i(that)g(are)g (returned)e(from)h(an)m(y)h(of)f(the)h Fm(bvec)p 3044 3209 29 4 v 33 w(xxx)e Fn(functions)g(are)236 3322 y(referenced)31 b(coun)m(ted)f(b)m(y)h(the)f(system.)236 3566 y Fe(2.10.1)113 b(C++)37 b(In)m(terface)236 3737 y Fn(The)30 b(C++)f(in)m(terface)i (de\014nes)f(the)g(class)236 3925 y Fm(class)47 b(bvec)236 4038 y({)284 4151 y(public:)379 4376 y(bvec\(void\);)379 4489 y(bvec\(int)f(bitnum\);)379 4602 y(bvec\(int)g(bitnum,)g(int)h (val\);)379 4715 y(bvec\(const)e(bvec)i(&v\);)379 4828 y(~bvec\(void\);)379 5054 y(void)g(set\(int)f(i,)h(const)f(bdd)h(&b\);) 379 5167 y(bdd)g(operator[]\(int)d(i\))95 b(const;)379 5280 y(int)47 b(bitnum\(void\))e(const;)379 5393 y(int)i(empty\(void\)) e(const;)379 5506 y(bvec)i(operator=\(const)d(bvec)i(&src\);)236 5618 y(})1985 5989 y Fn(9)p eop %%Page: 10 18 10 17 bop 236 162 a Fn(The)29 b(default)f(constructor)h(mak)m(es)g(an)g (empt)m(y)g(v)m(ector)i(with)c(no)i(elemen)m(ts,)h(the)f(in)m(teger)g (constructor)236 275 y(creates)34 b(a)e(v)m(ector)i(with)d Fm(bitnum)f Fn(elemen)m(ts)j(\(all)e(set)i(to)g(false\))f(and)g(the)g (third)e(constructor)j(creates)236 388 y(a)d(v)m(ector)i(with)d Fm(bitnum)f Fn(elemen)m(ts)i(and)f(assigns)g(the)h(in)m(teger)h(v)-5 b(alue)29 b Fm(val)g Fn(to)h(the)h(v)m(ector.)42 b(Reference)236 501 y(coun)m(ting)33 b(is)g(done)g(automatically)-8 b(.)49 b(The)33 b(i'th)f(elemen)m(t)i(in)e(the)i(v)m(ector)g(can)g(b)s(e)f(c)m (hanged)g(with)f Fm(set)236 614 y Fn(and)24 b(read)g(with)f Fm(operator[])p Fn(.)36 b(The)24 b(n)m(um)m(b)s(er)f(of)h(bits)f(can)i (b)s(e)e(found)g(with)g Fm(bitnum)g Fn(and)h(the)g(metho)s(d)236 727 y Fm(empty)29 b Fn(returns)g(true)h(if)g(the)g(v)m(ector)i(is)e(a)h (NULL)f(v)m(ector.)1962 5989 y(10)p eop %%Page: 11 19 11 18 bop 236 785 a Fl(Chapter)65 b(3)236 1200 y Fp(E\016ciency)77 b(Concerns)236 1645 y Fn(Getting)29 b(the)g(most)g(out)f(of)h(an)m(y)g (BDD)g(pac)m(k)-5 b(age)31 b(is)c(not)i(alw)m(a)m(ys)g(easy)-8 b(.)41 b(It)29 b(requires)e(some)h(kno)m(wledge)236 1758 y(ab)s(out)c(the)g(optimal)g(order)f(of)i(the)f(BDD)h(v)-5 b(ariables)23 b(and)h(it)f(also)h(helps)f(if)g(y)m(ou)i(ha)m(v)m(e)g (some)f(kno)m(wledge)236 1871 y(of)31 b(the)f(in)m(ternals)f(of)i(the)f (pac)m(k)-5 b(age.)377 1984 y(First)31 b(of)g(all)g(|)g(a)g(go)s(o)s(d) h(initial)c(v)-5 b(ariable)30 b(order)h(is)f(a)i(m)m(ust.)44 b(Using)30 b(the)i(automatic)g(reordering)236 2097 y(metho)s(ds)c(ma)m (y)h(b)s(e)f(an)g(easy)h(solution,)f(but)f(without)h(a)h(go)s(o)s(d)f (initial)e(order)h(it)h(ma)m(y)h(also)g(b)s(e)f(a)g(w)m(aste)236 2210 y(of)j(time.)377 2323 y(Second)c(|)f(memory)h(is)e(sp)s(eed.)39 b(If)26 b(y)m(ou)h(allo)s(cate)g(as)g(m)m(uc)m(h)g(memory)f(as)h(p)s (ossible)d(from)i(the)h(v)m(ery)236 2435 y(b)s(eginning,)i(then)i (BuDDy)h(do)s(es)f(not)h(ha)m(v)m(e)g(to)g(w)m(aste)g(time)f(trying)g (to)h(allo)s(cate)f(more)h(whenev)m(er)f(it)236 2548 y(is)26 b(needed.)39 b(So)26 b(if)g(y)m(ou)h(really)f(w)m(an)m(t)h(sp)s (eed)f(then)g Fm(bdd)p 2096 2548 29 4 v 34 w(init)f Fn(should)g(b)s(e)h (called)f(with)h(as)h(man)m(y)f(no)s(des)236 2661 y(as)j(p)s(ossible.) 38 b(This)26 b(do)s(es)i(unfortunately)f(ha)m(v)m(e)j(the)f(side)e (e\013ect)j(that)f(v)-5 b(ariable)27 b(reordering)g(b)s(ecomes)236 2774 y(extremely)37 b(slo)m(w)e(since)h(it)g(has)g(to)h(reorder)e(an)i (enormous)e(amoun)m(t)i(of)f(no)s(des)g(the)g(\014rst)g(time)g(it)f(is) 236 2887 y(triggered.)377 3000 y(Third)18 b(|)i(the)h(op)s(erator)f (cac)m(hes)i(should)c(b)s(e)i(as)g(big)g(as)g(p)s(ossible.)35 b(Use)21 b(the)f(function)f Fm(bdd)p 3427 3000 V 34 w(setcacheratio)236 3113 y Fn(to)28 b(mak)m(e)f(sure)f(the)h(size)f(of)h(these)g(is)e (increased)h(whenev)m(er)h(more)f(no)s(des)g(are)h(allo)s(cated.)39 b Ff(Ple)-5 b(ase)30 b(note)236 3226 y(that)39 b(BuDDy)e(uses)g(a)h (\014xe)-5 b(d)38 b(numb)-5 b(er)38 b(of)g(elements)g(for)g(these)g(c) -5 b(aches)39 b(as)f(default)p Fn(.)57 b(Y)-8 b(ou)37 b(m)m(ust)e(call)236 3339 y Fm(bdd)p 386 3339 V 34 w(setcacheratio)c Fn(to)36 b(c)m(hange)h(this.)54 b(I)35 b(ha)m(v)m(e)i(found)d(a)h(cac)m (he)i(ratio)e(of)h(1:64)h(\014tting)d(for)h(BDDs)236 3452 y(of)d(more)g(than)f(one)h(million)c(no)s(des)j(\(the)h(solitare)f (example\).)44 b(This)30 b(ma)m(y)i(b)s(e)f(a)g(bit)g(o)m(v)m(erkill,)g (but)g(it)236 3565 y(w)m(orks.)377 3677 y(F)-8 b(ourth)30 b(|)g(BuDDy)g(allo)s(cates)g(b)m(y)f(default)g(a)h(maxim)m(um)f(of)g (50000)j(no)s(des)d(\(1Mb)h(RAM\))h(ev)m(ery)236 3790 y(time)j(it)g(resizes)g(the)g(no)s(de)g(table.)52 b(If)33 b(y)m(our)h(problem)f(needs)h(millions)c(of)35 b(no)s(des,)f(then)g (this)f(is)g(w)m(a)m(y)236 3903 y(to)s(o)k(small)e(a)i(n)m(um)m(b)s (er.)57 b(Use)37 b Fm(bdd)p 1442 3903 V 33 w(setmaxincrease)c Fn(to)k(increase)f(this)f(n)m(um)m(b)s(er.)58 b(In)35 b(the)i(solitare)236 4016 y(example)30 b(something)g(lik)m(e)g(5000000) j(no)s(des)d(seems)g(more)h(reasonable.)377 4129 y(Fifth)g(|)g(b)m(y)f (default,)h(BuDDy)h(increases)f(the)g(no)s(de)f(table)h(whenev)m(er)g (there)h(is)e(less)g(than)h(20\045)236 4242 y(no)s(des)25 b(free.)40 b(By)26 b(increasing)e(this)h(v)-5 b(alue)26 b(y)m(ou)g(can)g(mak)m(e)h(BuDDy)g(go)f(faster)h(and)e(use)h(more)g (memory)236 4355 y(or)31 b(vice)f(v)m(ersa.)41 b(Y)-8 b(ou)31 b(can)g(c)m(hange)g(the)g(v)-5 b(alue)30 b(with)f Fm(bdd)p 2203 4355 V 33 w(setminfreenodes)p Fn(.)377 4468 y(So,)f(to)f(sum)e(it)h(up:)38 b(if)25 b(y)m(ou)h(w)m(an)m(t)i(sp) s(eed,)e(then)g(allo)s(cate)h(as)g(man)m(y)f(no)s(des)f(as)i(p)s (ossible,)e(use)h(small)236 4581 y(cac)m(he)34 b(ratios)e(and)g(set)h Fm(maxincrease)p Fn(.)43 b(If)32 b(y)m(ou)h(need)f(memory)-8 b(,)33 b(then)f(allo)s(cate)h(a)g(small)d(n)m(um)m(b)s(er)h(of)236 4694 y(no)s(des)i(from)h(the)g(b)s(eginning,)e(use)i(a)g(\014xed)g (size)f(cac)m(he,)k(do)d(not)g(c)m(hange)h Fm(maxincrease)c Fn(and)i(lo)m(w)m(er)236 4807 y Fm(minfreenodes)p Fn(.)1962 5989 y(11)p eop %%Page: 12 20 12 19 bop 1962 5989 a Fn(12)p eop %%Page: 13 21 13 20 bop 236 785 a Fl(Chapter)65 b(4)236 1200 y Fp(Some)78 b(Implemen)-6 b(tation)76 b(details)373 1645 y Fc(\017)45 b Fn(Negated)33 b(p)s(oin)m(ters)c(are)i(not)f(used.)373 1833 y Fc(\017)45 b Fn(All)27 b(no)s(des)f(are)i(stored)f(in)f(one)i (big)f(con)m(tiguous)g(arra)m(y)h(whic)m(h)e(is)h(also)g(used)g(as)g (the)h(hash)f(table)463 1946 y(for)k(\014nding)d(iden)m(tical)h(no)s (des.)373 2133 y Fc(\017)45 b Fn(The)g(hash)f(function)g(used)g(to)h (\014nd)f(iden)m(tical)f(no)s(des)h(from)h(the)g(triple)e(\()p Fj(l)r(ev)s(el)r(;)15 b(l)r(ow)r(;)g(hig)s(h)p Fn(\))463 2246 y(spreads)27 b(all)f(no)s(des)h(ev)m(enly)g(in)f(the)i(table.)39 b(This)26 b(means)h(the)g(a)m(v)m(erage)j(length)d(of)h(a)f(hash)g(c)m (hain)463 2359 y(is)j(at)h(most)g(1.)373 2547 y Fc(\017)45 b Fn(Eac)m(h)37 b(no)s(de)e(in)f(the)i(no)s(de)f(table)g(con)m(tains)h (a)g(reference)g(coun)m(t,)i(the)e Fm(level)e Fn(of)i(the)g(v)-5 b(ariable)463 2660 y(\(this)37 b(is)f(its)g(p)s(osition)f(in)h(the)h (curren)m(t)g(v)-5 b(ariable)36 b(order\),)j(the)e Fm(high)f Fn(and)g Fm(low)g Fn(part,)j(a)f Fm(hash)463 2772 y Fn(index)31 b(used)g(to)i(\014nd)d(the)j(\014rst)e(no)s(de)g(in)g(a)h(hash)g(c)m (hain)f(and)h(a)g Fm(next)f Fn(index)f(used)i(to)g(link)e(the)463 2885 y(hash)j(c)m(hains.)48 b(Eac)m(h)34 b(no)s(de)e(\014ts)h(in)m(to)g (20)h(b)m(ytes)f(of)g(memory)-8 b(.)49 b(Other)33 b(pac)m(k)-5 b(ages)35 b(uses)d(only)h(16)463 2998 y(b)m(ytes)28 b(for)e(eac)m(h)i (no)s(de)e(but)h(in)e(addition)g(to)j(this)d(they)i(m)m(ust)g(k)m(eep)g (separate)h(tables)f(with)e(hash)463 3111 y(table)36 b(en)m(tries.)57 b(The)35 b(e\013ect)i(of)f(this)e(is)h(that)i(the)e (total)i(memory)e(consumption)g(is)f(20)j(b)m(ytes)463 3224 y(for)31 b(eac)m(h)g(no)s(de)f(on)g(a)m(v)m(erage.)373 3412 y Fc(\017)45 b Fn(Reference)32 b(coun)m(ting)e(are)h(done)f(on)g (the)h(externally)e(referenced)h(no)s(des)g(only)-8 b(.)373 3599 y Fc(\017)45 b Fn(The)30 b(ANSI-C)h Fm(bdd)e Fn(t)m(yp)s(e)i(is)e (an)i(in)m(teger)g(n)m(um)m(b)s(er)e(referring)g(to)i(an)g(index)e(in)g (the)h(no)s(de)g(table.)463 3712 y(In)g(C++)g(it)f(is)h(a)h(class.)373 3900 y Fc(\017)45 b Fn(New)25 b(no)s(des)f(are)i(created)f(b)m(y)g (doubling)d(\(or)j(just)g(extending\))f(the)h(no)s(de)f(table,)i(not)f (b)m(y)g(adding)463 4013 y(new)30 b(blo)s(c)m(ks)g(of)h(no)s(des.)373 4200 y Fc(\017)45 b Fn(Garbage)35 b(collection)f(recursiv)m(ely)e (marks)i(all)e(no)s(des)h(reac)m(hable)h(from)g(the)g(externally)e (refer-)463 4313 y(enced)f(no)s(des)f(b)s(efore)g(dead)g(no)s(des)f (are)i(remo)m(v)m(ed.)373 4501 y Fc(\017)45 b Fn(Reordering)30 b(in)m(terrupts)f(the)h(curren)m(t)g(BDD)i(op)s(eration)e(and)g (restarts)g(it)g(again)h(afterw)m(ards.)373 4689 y Fc(\017)45 b Fn(Reordering)37 b(c)m(hanges)i(the)f(hash)f(function)f(to)i(one)g (where)f(all)g(no)s(des)g(of)h(a)g(sp)s(eci\014c)e(lev)m(el)h(is)463 4802 y(placed)d(in)e(one)i(con)m(tin)m(uous)f(blo)s(c)m(k)g(and)g(up)s (dates)g(the)g(reference)h(coun)m(t)h(\014eld)d(to)i(include)e(all)463 4914 y(recursiv)m(e)40 b(dep)s(endencies.)67 b(After)40 b(reordering)e(the)i(pac)m(k)-5 b(age)42 b(returns)c(to)j(the)f(normal) e(hash)463 5027 y(function.)1962 5989 y(13)p eop %%Page: 14 22 14 21 bop 1962 5989 a Fn(14)p eop %%Page: 15 23 15 22 bop 236 785 a Fl(Chapter)65 b(5)236 1200 y Fp(Reference)p 327 1544 3192 4 v 325 1657 4 113 v 412 1623 a Fo(Bo)s(olean)35 b(v)m(ectors)p 3517 1657 V 327 1660 3192 4 v 325 1773 4 113 v 377 1739 a Fm(bvec)p 1080 1773 V 562 w Fn(a)c(b)s(o)s(olean)f (v)m(ector)p 3517 1773 V 327 1776 3192 4 v 325 1889 4 113 v 377 1855 a Fm(bvec)p 575 1855 29 4 v 33 w(add)p 1080 1889 4 113 v 385 w Fn(builds)e(a)i(b)s(o)s(olean)g(v)m(ector)i (for)e(addition)p 3517 1889 V 327 1892 3192 4 v 325 2005 4 113 v 377 1971 a Fm(bvec)p 575 1971 29 4 v 33 w(addref)p 1080 2005 4 113 v 241 w Fn(increase)h(reference)f(coun)m(t)h(of)g(a)g (b)s(o)s(olean)e(v)m(ector)p 3517 2005 V 327 2009 3192 4 v 325 2122 4 113 v 377 2088 a Fm(bvec)p 575 2088 29 4 v 33 w(coerce)p 1080 2122 4 113 v 241 w Fn(adjust)h(the)h(size)f(of)g (a)h(b)s(o)s(olean)f(v)m(ector)p 3517 2122 V 327 2125 3192 4 v 325 2238 4 113 v 377 2204 a Fm(bvec)p 575 2204 29 4 v 33 w(con)p 1080 2238 4 113 v 385 w Fn(build)e(a)i(b)s(o)s(olean) g(v)m(ector)i(represen)m(ting)d(an)i(in)m(teger)f(v)-5 b(alue)p 3517 2238 V 327 2241 3192 4 v 325 2354 4 113 v 377 2320 a Fm(bvec)p 575 2320 29 4 v 33 w(copy)p 1080 2354 4 113 v 337 w Fn(create)32 b(a)f(cop)m(y)g(of)g(a)f(b)m(v)m(ec)p 3517 2354 V 327 2357 3192 4 v 325 2470 4 113 v 377 2436 a Fm(bvec)p 575 2436 29 4 v 33 w(delref)p 1080 2470 4 113 v 241 w Fn(decrease)i(the)e(reference)h(coun)m(t)g(of)g(a)f(b)s(o)s (olean)g(v)m(ector)p 3517 2470 V 327 2474 3192 4 v 325 2587 4 113 v 377 2553 a Fm(bvec)p 575 2553 29 4 v 33 w(div)p 1080 2587 4 113 v 385 w Fn(builds)e(a)i(b)s(o)s(olean)g(v)m (ector)i(for)e(division)p 3517 2587 V 327 2590 3192 4 v 325 2703 4 113 v 377 2669 a Fm(bvec)p 575 2669 29 4 v 33 w(divfixed)p 1080 2703 4 113 v 145 w Fn(builds)e(a)i(b)s(o)s (olean)g(v)m(ector)i(for)e(division)d(b)m(y)j(a)h(constan)m(t)p 3517 2703 V 327 2706 3192 4 v 325 2819 4 113 v 377 2785 a Fm(bvec)p 575 2785 29 4 v 33 w(equ)p 1080 2819 4 113 v 385 w Fn(calculates)g(the)g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b Fn(=)g Fj(y)p 3517 2819 V 327 2822 3192 4 v 325 2935 4 113 v 377 2901 a Fm(bvec)p 575 2901 29 4 v 33 w(false)p 1080 2935 4 113 v 289 w Fn(build)j(a)i(v)m(ector)i(of) f(constan)m(t)h(false)e(BDDs)p 3517 2935 V 327 2939 3192 4 v 325 3051 4 113 v 377 3018 a Fm(bvec)p 575 3018 29 4 v 33 w(free)p 1080 3051 4 113 v 337 w Fn(frees)h(all)e(memory)h(used) g(b)m(y)g(a)h(b)s(o)s(olean)e(v)m(ector)p 3517 3051 V 327 3055 3192 4 v 325 3168 4 113 v 377 3134 a Fm(bvec)p 575 3134 29 4 v 33 w(gte)p 1080 3168 4 113 v 385 w Fn(calculates)i(the) g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b Fc(\025)g Fj(y)p 3517 3168 V 327 3171 3192 4 v 325 3284 4 113 v 377 3250 a Fm(bvec)p 575 3250 29 4 v 33 w(gth)p 1080 3284 4 113 v 385 w Fn(calculates)31 b(the)g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b(>)g(y)p 3517 3284 V 327 3287 3192 4 v 325 3400 4 113 v 377 3366 a Fm(bvec)p 575 3366 29 4 v 33 w(isconst)p 1080 3400 4 113 v 193 w Fn(test)32 b(a)e(v)m(ector)i (for)f(constan)m(t)g(true/false)g(BDDs)p 3517 3400 V 327 3403 3192 4 v 325 3516 4 113 v 377 3482 a Fm(bvec)p 575 3482 29 4 v 33 w(ite)p 1080 3516 4 113 v 385 w Fn(calculates)g(the) g(if-then-else)e(op)s(erator)i(for)f(a)h(b)s(o)s(olean)e(v)m(ector)p 3517 3516 V 327 3520 3192 4 v 325 3633 4 113 v 377 3599 a Fm(bvec)p 575 3599 29 4 v 33 w(lte)p 1080 3633 4 113 v 385 w Fn(calculates)i(the)g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b Fc(\024)g Fj(y)p 3517 3633 V 327 3636 3192 4 v 325 3749 4 113 v 377 3715 a Fm(bvec)p 575 3715 29 4 v 33 w(lth)p 1080 3749 4 113 v 385 w Fn(calculates)31 b(the)g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b(<)g(y)p 3517 3749 V 327 3752 3192 4 v 325 3865 4 113 v 377 3831 a Fm(bvec)p 575 3831 29 4 v 33 w(map1)p 1080 3865 4 113 v 337 w Fn(map)30 b(a)h(function)e(on)m(to)j(a)f(b)s(o)s(olean)e(v)m (ector)p 3517 3865 V 327 3868 3192 4 v 325 3981 4 113 v 377 3947 a Fm(bvec)p 575 3947 29 4 v 33 w(map2)p 1080 3981 4 113 v 337 w Fn(map)h(a)h(function)e(on)m(to)j(a)f(b)s(o)s(olean) e(v)m(ector)p 3517 3981 V 327 3985 3192 4 v 325 4098 4 113 v 377 4064 a Fm(bvec)p 575 4064 29 4 v 33 w(map3)p 1080 4098 4 113 v 337 w Fn(map)h(a)h(function)e(on)m(to)j(a)f(b)s(o)s (olean)e(v)m(ector)p 3517 4098 V 327 4101 3192 4 v 325 4214 4 113 v 377 4180 a Fm(bvec)p 575 4180 29 4 v 33 w(mul)p 1080 4214 4 113 v 385 w Fn(builds)f(a)i(b)s(o)s(olean)g(v)m (ector)i(for)e(m)m(ultiplication)p 3517 4214 V 327 4217 3192 4 v 325 4330 4 113 v 377 4296 a Fm(bvec)p 575 4296 29 4 v 33 w(mulfixed)p 1080 4330 4 113 v 145 w Fn(builds)e(a)i(b)s(o)s (olean)g(v)m(ector)i(for)e(m)m(ultiplication)d(with)i(a)i(constan)m(t)p 3517 4330 V 327 4333 3192 4 v 325 4446 4 113 v 377 4412 a Fm(bvec)p 575 4412 29 4 v 33 w(neq)p 1080 4446 4 113 v 385 w Fn(calculates)g(the)g(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b Fc(6)p Fn(=)g Fj(y)p 3517 4446 V 327 4450 3192 4 v 325 4562 4 113 v 377 4529 a Fm(bvec)p 575 4529 29 4 v 33 w(shl)p 1080 4562 4 113 v 385 w Fn(shift)k(left)i(op)s (eration)e(\(sym)m(b)s(olic\))p 3517 4562 V 327 4566 3192 4 v 325 4679 4 113 v 377 4645 a Fm(bvec)p 575 4645 29 4 v 33 w(shlfixed)p 1080 4679 4 113 v 145 w Fn(shift)g(left)i(op)s (eration)e(\(\014xed)h(n)m(um)m(b)s(er)f(of)i(bits\))p 3517 4679 V 327 4682 3192 4 v 325 4795 4 113 v 377 4761 a Fm(bvec)p 575 4761 29 4 v 33 w(shr)p 1080 4795 4 113 v 385 w Fn(shift)e(righ)m(t)h(op)s(eration)g(\(sym)m(b)s(olic\))p 3517 4795 V 327 4798 3192 4 v 325 4911 4 113 v 377 4877 a Fm(bvec)p 575 4877 29 4 v 33 w(shrfixed)p 1080 4911 4 113 v 145 w Fn(shift)f(righ)m(t)h(op)s(eration)p 3517 4911 V 327 4914 3192 4 v 325 5027 4 113 v 377 4993 a Fm(bvec)p 575 4993 29 4 v 33 w(sub)p 1080 5027 4 113 v 385 w Fn(builds)e(a)i(b)s(o)s(olean)g(v)m(ector)i(for)e(subtraction)p 3517 5027 V 327 5031 3192 4 v 325 5144 4 113 v 377 5110 a Fm(bvec)p 575 5110 29 4 v 33 w(true)p 1080 5144 4 113 v 337 w Fn(build)e(a)i(v)m(ector)i(of)f(constan)m(t)h(true)e(BDDs)p 3517 5144 V 327 5147 3192 4 v 325 5260 4 113 v 377 5226 a Fm(bvec)p 575 5226 29 4 v 33 w(val)p 1080 5260 4 113 v 385 w Fn(calculate)h(the)g(in)m(teger)f(v)-5 b(alue)30 b(represen)m(ted)h(b)m(y)f(a)h(b)s(o)s(olean)e(v)m(ector)p 3517 5260 V 327 5263 3192 4 v 325 5376 4 113 v 377 5342 a Fm(bvec)p 575 5342 29 4 v 33 w(var)p 1080 5376 4 113 v 385 w Fn(build)f(a)i(b)s(o)s(olean)g(v)m(ector)i(with)d(BDD)i(v)-5 b(ariables)p 3517 5376 V 327 5379 3192 4 v 1962 5989 a(15)p eop %%Page: 16 24 16 23 bop 236 74 3482 4 v 234 187 4 113 v 286 153 a Fm(bvec)p 484 153 29 4 v 33 w(varfdd)p 1228 187 4 113 v 480 w Fn(build)27 b(a)k(b)s(o)s(olean)f(v)m(ector)i(from)d(a)i(FDD)h(v)-5 b(ariable)29 b(blo)s(c)m(k)p 3716 187 V 236 191 3482 4 v 234 303 4 113 v 286 270 a Fm(bvec)p 484 270 29 4 v 33 w(varvec)p 1228 303 4 113 v 480 w Fn(build)e(a)k(b)s(o)s(olean)f (v)m(ector)i(with)d(the)h(v)-5 b(ariables)29 b(passed)h(in)f(an)h(arra) m(y)p 3716 303 V 236 307 3482 4 v 234 420 4 113 v 321 386 a Fo(Finite)k(domain)h(v)-6 b(ariable)34 b(blo)s(c)m(ks)p 3716 420 V 236 423 3482 4 v 234 536 4 113 v 286 502 a Fm(fdd)p 436 502 29 4 v 34 w(clearall)p 1228 536 4 113 v 431 w Fn(clear)d(all)e(allo)s(cated)h(FDD)i(blo)s(c)m(ks)p 3716 536 V 236 539 3482 4 v 234 652 4 113 v 286 618 a Fm(fdd)p 436 618 29 4 v 34 w(domain)p 1228 652 4 113 v 527 w Fn(bDD)f(enco)s(ding)e(of)i(the)f(domain)f(of)i(a)g(FDD)g(v)-5 b(ariable)p 3716 652 V 236 655 3482 4 v 234 768 4 113 v 286 734 a Fm(fdd)p 436 734 29 4 v 34 w(domainnum)p 1228 768 4 113 v 383 w Fn(n)m(um)m(b)s(er)29 b(of)i(de\014ned)e (\014nite)g(domain)g(blo)s(c)m(ks)p 3716 768 V 236 772 3482 4 v 234 885 4 113 v 286 851 a Fm(fdd)p 436 851 29 4 v 34 w(domainsize)p 1228 885 4 113 v 335 w Fn(real)h(size)g(of)h(a)g (\014nite)e(domain)g(blo)s(c)m(k)p 3716 885 V 236 888 3482 4 v 234 1001 4 113 v 286 967 a Fm(fdd)p 436 967 29 4 v 34 w(equals)p 1228 1001 4 113 v 527 w Fn(returns)g(a)i(BDD)h (setting)e(t)m(w)m(o)i(FD.)f(blo)s(c)m(ks)f(equal)p 3716 1001 V 236 1004 3482 4 v 234 1117 4 113 v 286 1083 a Fm(fdd)p 436 1083 29 4 v 34 w(extdomain)p 1228 1117 4 113 v 383 w Fn(adds)g(another)g(set)h(of)g(\014nite)e(domain)g(blo)s(c) m(ks)p 3716 1117 V 236 1120 3482 4 v 234 1233 4 113 v 286 1199 a Fm(fdd)p 436 1199 29 4 v 34 w(file)p 662 1199 V 33 w(hook)p 1228 1233 4 113 v 398 w Fn(sp)s(eci\014es)g(a)i(prin)m (ting)d(callbac)m(k)j(handler)p 3716 1233 V 236 1237 3482 4 v 234 1349 4 113 v 286 1316 a Fm(fdd)p 436 1316 29 4 v 34 w(intaddvarblock)p 1228 1349 4 113 v 143 w Fn(adds)f(a)g(new)g(v)-5 b(ariable)30 b(blo)s(c)m(k)f(for)i(reordering) p 3716 1349 V 236 1353 3482 4 v 234 1466 4 113 v 286 1432 a Fm(fdd)p 436 1432 29 4 v 34 w(ithset)p 1228 1466 4 113 v 527 w Fn(the)g(v)-5 b(ariable)29 b(set)i(for)f(the)g(i'th)g (\014nite)f(domain)h(blo)s(c)m(k)p 3716 1466 V 236 1469 3482 4 v 234 1582 4 113 v 286 1548 a Fm(fdd)p 436 1548 29 4 v 34 w(ithvar)p 1228 1582 4 113 v 527 w Fn(the)h(BDD)g(for)f(the)h (i'th)f(FDD)h(set)g(to)g(a)g(sp)s(eci\014c)e(v)-5 b(alue)p 3716 1582 V 236 1585 3482 4 v 234 1698 4 113 v 286 1664 a Fm(fdd)p 436 1664 29 4 v 34 w(makeset)p 1228 1698 4 113 v 479 w Fn(creates)32 b(a)f(v)-5 b(ariable)29 b(set)i(for)f(N)g (\014nite)g(domain)f(blo)s(c)m(ks)p 3716 1698 V 236 1702 3482 4 v 234 1814 4 113 v 286 1781 a Fm(fdd)p 436 1781 29 4 v 34 w(overlapdomain)p 1228 1814 4 113 v 191 w Fn(com)m(bine)h(t)m (w)m(o)i(FDD)f(blo)s(c)m(ks)f(in)m(to)h(one)p 3716 1814 V 236 1818 3482 4 v 234 1931 4 113 v 286 1897 a Fm(fdd)p 436 1897 29 4 v 34 w(printset)p 1228 1931 4 113 v 431 w Fn(prin)m(ts)e(a)i(BDD)g(for)f(a)h(\014nite)f(domain)f(blo)s(c)m(k)p 3716 1931 V 234 2044 V 286 2010 a Fm(fdd)p 436 2010 29 4 v 34 w(fprintset)p 1228 2044 4 113 v 3716 2044 V 236 2047 3482 4 v 234 2160 4 113 v 286 2126 a(fdd)p 436 2126 29 4 v 34 w(scanallvar)p 1228 2160 4 113 v 335 w Fn(\014nds)g(one)h (satisfying)f(v)-5 b(alue)30 b(of)h(all)e(FDD)j(v)-5 b(ariables)p 3716 2160 V 236 2163 3482 4 v 234 2276 4 113 v 286 2242 a Fm(fdd)p 436 2242 29 4 v 34 w(scanset)p 1228 2276 4 113 v 479 w Fn(scans)30 b(a)h(v)-5 b(ariable)29 b(set)p 3716 2276 V 236 2279 3482 4 v 234 2392 4 113 v 286 2358 a Fm(fdd)p 436 2358 29 4 v 34 w(scanvar)p 1228 2392 4 113 v 479 w Fn(\014nds)g(one)h(satisfying)f(v)-5 b(alue)30 b(of)h(a)g(FDD)g(v)-5 b(ariable)p 3716 2392 V 236 2396 3482 4 v 234 2508 4 113 v 286 2475 a Fm(fdd)p 436 2475 29 4 v 34 w(setpair)p 1228 2508 4 113 v 479 w Fn(de\014nes)30 b(a)g(pair)f(for)i(t)m(w)m(o)g(\014nite)f(domain)f (blo)s(c)m(ks)p 3716 2508 V 236 2512 3482 4 v 234 2625 4 113 v 286 2591 a Fm(fdd)p 436 2591 29 4 v 34 w(setpairs)p 1228 2625 4 113 v 431 w Fn(de\014nes)h(N)g(pairs)f(for)h(\014nite)g (domain)f(blo)s(c)m(ks)p 3716 2625 V 236 2628 3482 4 v 234 2741 4 113 v 286 2707 a Fm(fdd)p 436 2707 29 4 v 34 w(strm)p 662 2707 V 33 w(hook)p 1228 2741 4 113 v 398 w Fn(sp)s(eci\014es)g(a)i(prin)m(ting)d(callbac)m(k)j(handler)p 3716 2741 V 236 2744 3482 4 v 234 2857 4 113 v 286 2823 a Fm(fdd)p 436 2823 29 4 v 34 w(varnum)p 1228 2857 4 113 v 527 w Fn(binary)e(size)h(of)g(a)h(\014nite)f(domain)f(blo)s(c)m (k)p 3716 2857 V 236 2860 3482 4 v 234 2973 4 113 v 286 2940 a Fm(fdd)p 436 2940 29 4 v 34 w(vars)p 1228 2973 4 113 v 623 w Fn(all)g(BDD)j(v)-5 b(ariables)29 b(asso)s(ciated)i(with) e(a)i(\014nite)e(domain)g(blo)s(c)m(k)p 3716 2973 V 236 2977 3482 4 v 234 3090 4 113 v 321 3056 a Fo(File)35 b(input/output)p 3716 3090 V 236 3093 3482 4 v 234 3206 4 113 v 286 3172 a Fm(bdd)p 436 3172 29 4 v 34 w(load)p 1228 3206 4 113 v 623 w Fn(loads)30 b(a)h(BDD)g(from)f(a)h(\014le)p 3716 3206 V 234 3319 V 286 3285 a Fm(bdd)p 436 3285 29 4 v 34 w(fnload)p 1228 3319 4 113 v 3716 3319 V 236 3322 3482 4 v 234 3435 4 113 v 286 3401 a(bdd)p 436 3401 29 4 v 34 w(printall)p 1228 3435 4 113 v 431 w Fn(prin)m(ts)e(all)g(used)h (en)m(tries)g(in)f(the)i(no)s(de)e(table)p 3716 3435 V 234 3548 V 286 3514 a Fm(bdd)p 436 3514 29 4 v 34 w(fprintall)p 1228 3548 4 113 v 3716 3548 V 236 3551 3482 4 v 234 3664 4 113 v 286 3630 a(bdd)p 436 3630 29 4 v 34 w(printdot)p 1228 3664 4 113 v 431 w Fn(prin)m(ts)g(a)i(description)d(of)j(a)f(BDD)i (in)d(DOT)h(format)p 3716 3664 V 234 3777 V 286 3743 a Fm(bdd)p 436 3743 29 4 v 34 w(fprintdot)p 1228 3777 4 113 v 3716 3777 V 236 3780 3482 4 v 234 3893 4 113 v 286 3859 a(bdd)p 436 3859 29 4 v 34 w(printset)p 1228 3893 4 113 v 431 w Fn(prin)m(ts)f(the)i(set)f(of)h(truth)f(assignmen)m (ts)g(sp)s(eci\014ed)e(b)m(y)j(a)f(BDD)p 3716 3893 V 234 4006 V 286 3972 a Fm(bdd)p 436 3972 29 4 v 34 w(fprintset)p 1228 4006 4 113 v 3716 4006 V 236 4010 3482 4 v 234 4122 4 113 v 286 4089 a(bdd)p 436 4089 29 4 v 34 w(printtable)p 1228 4122 4 113 v 335 w Fn(prin)m(ts)f(the)i(no)s(de)e(table)h(en)m (tries)h(used)e(b)m(y)i(a)f(BDD)p 3716 4122 V 234 4235 V 286 4201 a Fm(bdd)p 436 4201 29 4 v 34 w(fprinttable)p 1228 4235 4 113 v 3716 4235 V 236 4239 3482 4 v 234 4352 4 113 v 286 4318 a(bdd)p 436 4318 29 4 v 34 w(save)p 1228 4352 4 113 v 623 w Fn(sa)m(v)m(es)i(a)f(BDD)g(to)g(a)g(\014le)p 3716 4352 V 234 4464 V 286 4431 a Fm(bdd)p 436 4431 29 4 v 34 w(fnsave)p 1228 4464 4 113 v 3716 4464 V 236 4468 3482 4 v 234 4581 4 113 v 286 4547 a(operator<<)p 1228 4581 V 513 w Fn(c++)f(output)g(op)s(erator)h(for)f(BDDs)p 3716 4581 V 236 4584 3482 4 v 234 4697 4 113 v 321 4663 a Fo(Information)k(on)h(BDDs)p 3716 4697 V 236 4700 3482 4 v 234 4813 4 113 v 286 4779 a Fm(bdd)p 436 4779 29 4 v 34 w(anodecount)p 1228 4813 4 113 v 335 w Fn(coun)m(ts)c(the)g(n)m (um)m(b)s(er)e(of)h(shared)g(no)s(des)f(in)g(an)i(arra)m(y)g(of)f(BDDs) p 3716 4813 V 236 4816 3482 4 v 234 4929 4 113 v 286 4896 a Fm(bdd)p 436 4896 29 4 v 34 w(high)p 1228 4929 4 113 v 623 w Fn(gets)h(the)g(true)f(branc)m(h)g(of)h(a)f(b)s(dd)p 3716 4929 V 236 4933 3482 4 v 234 5046 4 113 v 286 5012 a Fm(bdd)p 436 5012 29 4 v 34 w(low)p 1228 5046 4 113 v 671 w Fn(gets)h(the)g(false)f(branc)m(h)g(of)g(a)h(b)s(dd)p 3716 5046 V 236 5049 3482 4 v 234 5162 4 113 v 286 5128 a Fm(bdd)p 436 5128 29 4 v 34 w(nodecount)p 1228 5162 4 113 v 383 w Fn(coun)m(ts)g(the)g(n)m(um)m(b)s(er)e(of)h(no)s(des)g (used)f(for)h(a)h(BDD)p 3716 5162 V 236 5165 3482 4 v 234 5278 4 113 v 286 5244 a Fm(bdd)p 436 5244 29 4 v 34 w(pathcount)p 1228 5278 4 113 v 383 w Fn(coun)m(t)g(the)g(n)m(um)m (b)s(er)e(of)h(paths)g(leading)f(to)i(the)g(true)f(terminal)p 3716 5278 V 236 5281 3482 4 v 1962 5989 a(16)p eop %%Page: 17 25 17 24 bop 236 74 3549 4 v 234 187 4 113 v 286 153 a Fm(bdd)p 436 153 29 4 v 34 w(satcount)p 1275 187 4 113 v 479 w Fn(calculates)30 b(the)h(n)m(um)m(b)s(er)e(of)i(satisfying)e(v)-5 b(ariable)29 b(assignmen)m(ts)p 3783 187 V 234 300 V 286 266 a Fm(bdd)p 436 266 29 4 v 34 w(setcountset)p 1275 300 4 113 v 3783 300 V 236 303 3549 4 v 234 416 4 113 v 286 382 a(bdd)p 436 382 29 4 v 34 w(satcountln)p 1275 416 4 113 v 383 w Fn(calculates)h(the)h(log.)41 b(n)m(um)m(b)s(er)29 b(of)h(satisfying)g(v)-5 b(ariable)29 b(assignmen)m(ts)p 3783 416 V 234 529 V 286 495 a Fm(bdd)p 436 495 29 4 v 34 w(setcountlnset)p 1275 529 4 113 v 3783 529 V 236 533 3549 4 v 234 645 4 113 v 286 612 a(bdd)p 436 612 29 4 v 34 w(support)p 1275 645 4 113 v 527 w Fn(returns)g(the)i(v)-5 b(ariable)29 b(supp)s(ort)f(of)j(a)g(BDD)p 3783 645 V 236 649 3549 4 v 234 762 4 113 v 286 728 a Fm(bdd)p 436 728 29 4 v 34 w(var)p 1275 762 4 113 v 719 w Fn(gets)g(the)g(v)-5 b(ariable)29 b(lab)s(eling)f(the)i(b)s(dd)p 3783 762 V 236 765 3549 4 v 234 878 4 113 v 286 844 a Fm(bdd)p 436 844 29 4 v 34 w(varprofile)p 1275 878 4 113 v 383 w Fn(returns)f(a)i(v)-5 b(ariable)29 b(pro\014le)p 3783 878 V 236 881 3549 4 v 234 994 4 113 v 321 960 a Fo(Kernel)35 b(BDD)g(op)s(erations)g(and)g(data)f(structures)p 3783 994 V 236 997 3549 4 v 234 1110 4 113 v 286 1077 a Fm(bddCacheStat)p 1275 1110 V 465 w Fn(status)d(information)d(ab)s (out)i(cac)m(he)i(usage)p 3783 1110 V 236 1114 3549 4 v 234 1227 4 113 v 286 1193 a Fm(bddGbcStat)p 1275 1227 V 561 w Fn(status)f(information)d(ab)s(out)i(garbage)i(collections)p 3783 1227 V 236 1230 3549 4 v 234 1343 4 113 v 286 1309 a Fm(bddStat)p 1275 1343 V 705 w Fn(status)f(information)d(ab)s(out)i (the)h(b)s(dd)d(pac)m(k)-5 b(age)p 3783 1343 V 236 1346 3549 4 v 234 1459 4 113 v 286 1425 a Fm(bdd)p 436 1425 29 4 v 34 w(addref)p 1275 1459 4 113 v 575 w Fn(increases)30 b(the)g(reference)h(coun)m(t)g(on)g(a)f(no)s(de)p 3783 1459 V 236 1462 3549 4 v 234 1575 4 113 v 286 1541 a Fm(bdd)p 436 1541 29 4 v 34 w(cachestats)p 1275 1575 4 113 v 383 w Fn(fetc)m(h)h(cac)m(he)h(access)g(usage)p 3783 1575 V 236 1579 3549 4 v 234 1692 4 113 v 286 1658 a Fm(bdd)p 436 1658 29 4 v 34 w(clear)p 710 1658 V 33 w(error)p 1275 1692 4 113 v 350 w Fn(clears)e(an)g(error)g(condition)f (in)g(the)i(k)m(ernel)p 3783 1692 V 236 1695 3549 4 v 234 1808 4 113 v 286 1774 a Fm(bdd)p 436 1774 29 4 v 34 w(delref)p 1275 1808 4 113 v 575 w Fn(decreases)g(the)g(reference)f (coun)m(t)h(on)g(a)f(no)s(de)p 3783 1808 V 236 1811 3549 4 v 234 1924 4 113 v 286 1890 a Fm(bdd)p 436 1890 29 4 v 34 w(done)p 1275 1924 4 113 v 671 w Fn(resets)h(the)f(b)s(dd)f(pac) m(k)-5 b(age)p 3783 1924 V 236 1927 3549 4 v 234 2040 4 113 v 286 2006 a Fm(bdd)p 436 2006 29 4 v 34 w(error)p 710 2006 V 33 w(hook)p 1275 2040 4 113 v 398 w Fn(set)31 b(a)g(handler)d(for)i(error)g(conditions)p 3783 2040 V 236 2044 3549 4 v 234 2156 4 113 v 286 2123 a Fm(bdd)p 436 2123 29 4 v 34 w(errstring)p 1275 2156 4 113 v 431 w Fn(con)m(v)m(erts)i(an)e(error)g(co)s(de)g(to)i(a)e(string)p 3783 2156 V 236 2160 3549 4 v 234 2273 4 113 v 286 2239 a Fm(bdd)p 436 2239 29 4 v 34 w(extvarnum)p 1275 2273 4 113 v 431 w Fn(add)g(extra)h(BDD)g(v)-5 b(ariables)p 3783 2273 V 236 2276 3549 4 v 234 2389 4 113 v 286 2355 a Fm(bdd)p 436 2355 29 4 v 34 w(false)p 1275 2389 4 113 v 623 w Fn(returns)29 b(the)i(constan)m(t)g(false)f(b)s(dd)p 3783 2389 V 236 2392 3549 4 v 234 2505 4 113 v 286 2471 a Fm(bdd)p 436 2471 29 4 v 34 w(file)p 662 2471 V 33 w(hook)p 1275 2505 4 113 v 446 w Fn(sp)s(eci\014es)f(a)i(prin)m(ting)d (callbac)m(k)i(handler)p 3783 2505 V 236 2508 3549 4 v 234 2621 4 113 v 286 2588 a Fm(bdd)p 436 2588 29 4 v 34 w(freepair)p 1275 2621 4 113 v 479 w Fn(frees)g(a)h(table)f(of)h (pairs)p 3783 2621 V 236 2625 3549 4 v 234 2738 4 113 v 286 2704 a Fm(bdd)p 436 2704 29 4 v 34 w(gbc)p 614 2704 V 33 w(hook)p 1275 2738 4 113 v 494 w Fn(set)g(a)g(handler)d(for)i (garbage)i(collections)p 3783 2738 V 236 2741 3549 4 v 234 2854 4 113 v 286 2820 a Fm(bdd)p 436 2820 29 4 v 34 w(getallocnum)p 1275 2854 4 113 v 335 w Fn(get)f(the)g(n)m(um)m(b) s(er)e(of)i(allo)s(cated)f(no)s(des)p 3783 2854 V 236 2857 3549 4 v 234 2970 4 113 v 286 2936 a Fm(bdd)p 436 2936 29 4 v 34 w(getnodenum)p 1275 2970 4 113 v 383 w Fn(get)h(the)g(n)m(um)m(b)s(er)e(of)i(activ)m(e)g(no)s(des)f(in)f(use)p 3783 2970 V 236 2973 3549 4 v 234 3086 4 113 v 286 3052 a Fm(bdd)p 436 3052 29 4 v 34 w(init)p 1275 3086 4 113 v 671 w Fn(initializes)e(the)k(BDD)h(pac)m(k)-5 b(age)p 3783 3086 V 236 3090 3549 4 v 234 3203 4 113 v 286 3169 a Fm(bdd)p 436 3169 29 4 v 34 w(isrunning)p 1275 3203 4 113 v 431 w Fn(test)31 b(whether)f(the)g(pac)m(k)-5 b(age)33 b(is)c(started)i(or)f(not)p 3783 3203 V 236 3206 3549 4 v 234 3319 4 113 v 286 3285 a Fm(bdd)p 436 3285 29 4 v 34 w(ithvar)p 1275 3319 4 113 v 575 w Fn(returns)f(a)i(b)s (dd)d(represen)m(ting)i(the)g(I'th)h(v)-5 b(ariable)p 3783 3319 V 236 3322 3549 4 v 234 3435 4 113 v 286 3401 a Fm(bdd)p 436 3401 29 4 v 34 w(makeset)p 1275 3435 4 113 v 527 w Fn(builds)27 b(a)k(BDD)g(v)-5 b(ariable)30 b(set)g(from)g(an)h(in)m(teger)f(arra)m(y)p 3783 3435 V 236 3438 3549 4 v 234 3551 4 113 v 286 3517 a Fm(bdd)p 436 3517 29 4 v 34 w(newpair)p 1275 3551 4 113 v 527 w Fn(creates)i(an)e(empt)m(y)h(v)-5 b(ariable)29 b(pair)g(table)p 3783 3551 V 236 3555 3549 4 v 234 3667 4 113 v 286 3634 a Fm(bdd)p 436 3634 29 4 v 34 w(nithvar)p 1275 3667 4 113 v 527 w Fn(returns)g(a)i(b)s(dd)d(represen)m(ting)i(the)g(negation) h(of)g(the)f(I'th)g(v)-5 b(ariable)p 3783 3667 V 236 3671 3549 4 v 234 3784 4 113 v 286 3750 a Fm(bdd)p 436 3750 29 4 v 34 w(printstat)p 1275 3784 4 113 v 431 w Fn(prin)m(t)29 b(cac)m(he)j(statistics)p 3783 3784 V 234 3897 V 286 3863 a Fm(bdd)p 436 3863 29 4 v 34 w(fprintstat)p 1275 3897 4 113 v 3783 3897 V 236 3900 3549 4 v 234 4013 4 113 v 286 3979 a(bdd)p 436 3979 29 4 v 34 w(resetpair)p 1275 4013 4 113 v 431 w Fn(clear)e(all)g(v)-5 b(ariable)29 b(pairs)p 3783 4013 V 236 4016 3549 4 v 234 4129 4 113 v 286 4095 a Fm(bdd)p 436 4095 29 4 v 34 w(resize)p 758 4095 V 32 w(hook)p 1275 4129 4 113 v 351 w Fn(set)i(a)g(handler)d(for)i (no)s(detable)g(resizes)p 3783 4129 V 236 4132 3549 4 v 234 4245 4 113 v 286 4211 a Fm(bdd)p 436 4211 29 4 v 34 w(scanset)p 1275 4245 4 113 v 527 w Fn(returns)f(an)h(in)m(teger)h (represen)m(tation)f(of)h(a)g(v)-5 b(ariable)29 b(set)p 3783 4245 V 236 4249 3549 4 v 234 4362 4 113 v 286 4328 a Fm(bdd)p 436 4328 29 4 v 34 w(setcacheratio)p 1275 4362 4 113 v 239 w Fn(sets)i(the)f(cac)m(he)i(ratio)f(for)f(the)g(op)s (erator)h(cac)m(hes)p 3783 4362 V 236 4365 3549 4 v 234 4478 4 113 v 286 4444 a Fm(bdd)p 436 4444 29 4 v 34 w(setmaxincrease)p 1275 4478 4 113 v 191 w Fn(set)g(max.)41 b(n)m(um)m(b)s(er)29 b(of)h(no)s(des)g(used)f(to)i(increase)g(no)s(de)e(table)p 3783 4478 V 236 4481 3549 4 v 234 4594 4 113 v 286 4560 a Fm(bdd)p 436 4560 29 4 v 34 w(setmaxnodenum)p 1275 4594 4 113 v 239 w Fn(set)i(the)f(maxim)m(um)g(a)m(v)-5 b(ailable)29 b(n)m(um)m(b)s(er)g(of)i(b)s(dd)d(no)s(des)p 3783 4594 V 236 4597 3549 4 v 234 4710 4 113 v 286 4676 a Fm(bdd)p 436 4676 29 4 v 34 w(setminfreenodes)p 1275 4710 4 113 v 143 w Fn(set)j(min.)39 b(no.)i(of)30 b(no)s(des)g(to)h(b)s (e)e(reclaimed)h(after)h(GBC.)p 3783 4710 V 236 4714 3549 4 v 234 4826 4 113 v 286 4793 a Fm(bdd)p 436 4793 29 4 v 34 w(setpair)p 1275 4826 4 113 v 527 w Fn(set)g(one)f(v)-5 b(ariable)30 b(pair)p 3783 4826 V 234 4939 V 286 4905 a Fm(bdd)p 436 4905 29 4 v 34 w(setbddpair)p 1275 4939 4 113 v 3783 4939 V 236 4943 3549 4 v 234 5056 4 113 v 286 5022 a(bdd)p 436 5022 29 4 v 34 w(setpairs)p 1275 5056 4 113 v 479 w Fn(de\014nes)f(a)i(whole)f(set)h(of)f(pairs)p 3783 5056 V 234 5169 V 286 5135 a Fm(bdd)p 436 5135 29 4 v 34 w(setbddpairs)p 1275 5169 4 113 v 3783 5169 V 236 5172 3549 4 v 234 5285 4 113 v 286 5251 a(bdd)p 436 5251 29 4 v 34 w(setvarnum)p 1275 5285 4 113 v 431 w Fn(set)h(the)f(n)m(um)m(b)s(er)f(of)i(used)e(b)s(dd)g(v)-5 b(ariables)p 3783 5285 V 236 5288 3549 4 v 1962 5989 a(17)p eop %%Page: 18 26 18 25 bop 236 74 3435 4 v 234 187 4 113 v 286 153 a Fm(bdd)p 436 153 29 4 v 34 w(stats)p 1357 187 4 113 v 705 w Fn(returns)29 b(some)i(status)g(information)d(ab)s(out)i(the)h(b)s(dd)d(pac)m(k)-5 b(age)p 3669 187 V 236 191 3435 4 v 234 303 4 113 v 286 270 a Fm(bdd)p 436 270 29 4 v 34 w(strm)p 662 270 V 33 w(hook)p 1357 303 4 113 v 528 w Fn(sp)s(eci\014es)29 b(a)i(prin)m(ting)d(callbac)m(k)i(handler)p 3669 303 V 236 307 3435 4 v 234 420 4 113 v 286 386 a Fm(bdd)p 436 386 29 4 v 34 w(true)p 1357 420 4 113 v 753 w Fn(returns)f(the)i (constan)m(t)g(true)f(b)s(dd)p 3669 420 V 236 423 3435 4 v 234 536 4 113 v 286 502 a Fm(bdd)p 436 502 29 4 v 34 w(varnum)p 1357 536 4 113 v 657 w Fn(returns)f(the)i(n)m(um)m(b)s (er)e(of)h(de\014ned)f(v)-5 b(ariables)p 3669 536 V 236 539 3435 4 v 234 652 4 113 v 286 618 a Fm(bdd)p 436 618 29 4 v 34 w(versionnum)p 1357 652 4 113 v 465 w Fn(returns)29 b(the)i(v)m(ersion)e(n)m(um)m(b)s(er)h(of)g(the)h(b)s(dd)d(pac)m(k)-5 b(age)p 3669 652 V 236 655 3435 4 v 234 768 4 113 v 286 734 a Fm(bdd)p 436 734 29 4 v 34 w(versionstr)p 1357 768 4 113 v 465 w Fn(returns)29 b(a)i(text)g(string)f(with)f(v)m (ersion)g(information)p 3669 768 V 236 772 3435 4 v 234 885 4 113 v 286 851 a Fm(bddfalse)p 1357 885 V 739 w Fn(the)h(constan)m(t)i(false)e(b)s(dd)p 3669 885 V 236 888 3435 4 v 234 1001 4 113 v 286 967 a Fm(bddtrue)p 1357 1001 V 787 w Fn(the)g(constan)m(t)i(true)e(b)s(dd)p 3669 1001 V 236 1004 3435 4 v 234 1117 4 113 v 321 1083 a Fo(BDD)35 b(op)s(erators)p 3669 1117 V 236 1120 3435 4 v 234 1233 4 113 v 286 1199 a Fm(bdd)p 436 1199 29 4 v 34 w(allsat)p 1357 1233 4 113 v 657 w Fn(\014nds)29 b(all)g(satisfying)g(v)-5 b(ariable)29 b(assignmen)m(ts)p 3669 1233 V 236 1237 3435 4 v 234 1349 4 113 v 286 1316 a Fm(bdd)p 436 1316 29 4 v 34 w(and)p 1357 1349 4 113 v 801 w Fn(the)h(logical)g('and')h(of)f(t)m(w)m(o)i(BDDs)p 3669 1349 V 236 1353 3435 4 v 234 1466 4 113 v 286 1432 a Fm(bdd)p 436 1432 29 4 v 34 w(appall)p 1357 1466 4 113 v 657 w Fn(apply)d(op)s(eration)h(and)g(univ)m(ersal)e(quan)m (ti\014cation)p 3669 1466 V 236 1469 3435 4 v 234 1582 4 113 v 286 1548 a Fm(bdd)p 436 1548 29 4 v 34 w(appex)p 1357 1582 4 113 v 705 w Fn(apply)h(op)s(eration)h(and)g(existen)m(tial) f(quan)m(ti\014cation)p 3669 1582 V 236 1585 3435 4 v 234 1698 4 113 v 286 1664 a Fm(bdd)p 436 1664 29 4 v 34 w(apply)p 1357 1698 4 113 v 705 w Fn(basic)h(b)s(dd)e(op)s(erations) p 3669 1698 V 236 1702 3435 4 v 234 1814 4 113 v 286 1781 a Fm(bdd)p 436 1781 29 4 v 34 w(appuni)p 1357 1814 4 113 v 657 w Fn(apply)h(op)s(eration)h(and)g(unique)e(quan)m (ti\014cation)p 3669 1814 V 236 1818 3435 4 v 234 1931 4 113 v 286 1897 a Fm(bdd)p 436 1897 29 4 v 34 w(biimp)p 1357 1931 4 113 v 705 w Fn(the)i(logical)g('bi-implication')e(b)s(et)m (w)m(een)j(t)m(w)m(o)g(BDDs)p 3669 1931 V 236 1934 3435 4 v 234 2047 4 113 v 286 2013 a Fm(bdd)p 436 2013 29 4 v 34 w(buildcube)p 1357 2047 4 113 v 513 w Fn(build)c(a)k(cub)s(e)f (from)g(an)g(arra)m(y)h(of)f(v)-5 b(ariables)p 3669 2047 V 234 2160 V 286 2126 a Fm(bdd)p 436 2126 29 4 v 34 w(ibuildcube)p 1357 2160 4 113 v 3669 2160 V 236 2163 3435 4 v 234 2276 4 113 v 286 2242 a(bdd)p 436 2242 29 4 v 34 w(compose)p 1357 2276 4 113 v 609 w Fn(functional)29 b(comp)s(osition)p 3669 2276 V 236 2279 3435 4 v 234 2392 4 113 v 286 2358 a Fm(bdd)p 436 2358 29 4 v 34 w(constrain)p 1357 2392 4 113 v 513 w Fn(generalized)h(cofactor)p 3669 2392 V 236 2396 3435 4 v 234 2508 4 113 v 286 2475 a Fm(bdd)p 436 2475 29 4 v 34 w(exist)p 1357 2508 4 113 v 705 w Fn(existen)m(tial)g(quan)m(ti\014cation)g(of)g(v)-5 b(ariables)p 3669 2508 V 236 2512 3435 4 v 234 2625 4 113 v 286 2591 a Fm(bdd)p 436 2591 29 4 v 34 w(forall)p 1357 2625 4 113 v 657 w Fn(univ)m(ersal)29 b(quan)m(ti\014cation)g(of)i(v)-5 b(ariables)p 3669 2625 V 236 2628 3435 4 v 234 2741 4 113 v 286 2707 a Fm(bdd)p 436 2707 29 4 v 34 w(fullsatone)p 1357 2741 4 113 v 465 w Fn(\014nds)29 b(one)h(satisfying)f(v)-5 b(ariable)29 b(assignmen)m(t)p 3669 2741 V 236 2744 3435 4 v 234 2857 4 113 v 286 2823 a Fm(bdd)p 436 2823 29 4 v 34 w(imp)p 1357 2857 4 113 v 801 w Fn(the)h(logical)g ('implication')f(b)s(et)m(w)m(een)i(t)m(w)m(o)g(BDDs)p 3669 2857 V 236 2860 3435 4 v 234 2973 4 113 v 286 2940 a Fm(bdd)p 436 2940 29 4 v 34 w(ite)p 1357 2973 4 113 v 801 w Fn(if-then-else)f(op)s(erator)p 3669 2973 V 236 2977 3435 4 v 234 3090 4 113 v 286 3056 a Fm(bdd)p 436 3056 29 4 v 34 w(not)p 1357 3090 4 113 v 801 w Fn(negates)i(a)e(b)s(dd) p 3669 3090 V 236 3093 3435 4 v 234 3206 4 113 v 286 3172 a Fm(bdd)p 436 3172 29 4 v 34 w(or)p 1357 3206 4 113 v 849 w Fn(the)g(logical)g('or')h(of)g(t)m(w)m(o)g(BDDs)p 3669 3206 V 236 3209 3435 4 v 234 3322 4 113 v 286 3288 a Fm(bdd)p 436 3288 29 4 v 34 w(relprod)p 1357 3322 4 113 v 609 w Fn(relational)e(pro)s(duct)p 3669 3322 V 236 3325 3435 4 v 234 3438 4 113 v 286 3404 a Fm(bdd)p 436 3404 29 4 v 34 w(replace)p 1357 3438 4 113 v 609 w Fn(replaces)h(v)-5 b(ariables)29 b(with)g(other)i(v)-5 b(ariables)p 3669 3438 V 236 3442 3435 4 v 234 3555 4 113 v 286 3521 a Fm(bdd)p 436 3521 29 4 v 34 w(restrict)p 1357 3555 4 113 v 561 w Fn(restric)30 b(a)g(set)h(of)g(v)-5 b(ariables)29 b(to)i(constan)m(t)h(v)-5 b(alues)p 3669 3555 V 236 3558 3435 4 v 234 3671 4 113 v 286 3637 a Fm(bdd)p 436 3637 29 4 v 34 w(satone)p 1357 3671 4 113 v 657 w Fn(\014nds)29 b(one)h(satisfying)f(v)-5 b(ariable)29 b(assignmen)m(t)p 3669 3671 V 236 3674 3435 4 v 234 3787 4 113 v 286 3753 a Fm(bdd)p 436 3753 29 4 v 34 w(satoneset)p 1357 3787 4 113 v 513 w Fn(\014nds)g(one)h(satisfying)f(v)-5 b(ariable)29 b(assignmen)m(t)p 3669 3787 V 236 3790 3435 4 v 234 3903 4 113 v 286 3869 a Fm(bdd)p 436 3869 29 4 v 34 w(simplify)p 1357 3903 4 113 v 561 w Fn(coudert)h(and)g(Madre's) h(restrict)f(function)p 3669 3903 V 236 3907 3435 4 v 234 4019 4 113 v 286 3986 a Fm(bdd)p 436 3986 29 4 v 34 w(unique)p 1357 4019 4 113 v 657 w Fn(unique)e(quan)m(ti\014cation)i (of)h(v)-5 b(ariables)p 3669 4019 V 236 4023 3435 4 v 234 4136 4 113 v 286 4102 a Fm(bdd)p 436 4102 29 4 v 34 w(veccompose)p 1357 4136 4 113 v 465 w Fn(sim)m(ultaneous)29 b(functional)g(comp)s(osition)p 3669 4136 V 236 4139 3435 4 v 234 4252 4 113 v 286 4218 a Fm(bdd)p 436 4218 29 4 v 34 w(xor)p 1357 4252 4 113 v 801 w Fn(the)h(logical)g('xor')h (of)g(t)m(w)m(o)g(BDDs)p 3669 4252 V 236 4255 3435 4 v 234 4368 4 113 v 321 4334 a Fo(V)-9 b(ariable)35 b(reordering)p 3669 4368 V 236 4371 3435 4 v 234 4484 4 113 v 286 4451 a Fm(bdd)p 436 4451 29 4 v 34 w(addvarblock)p 1357 4484 4 113 v 417 w Fn(adds)30 b(a)g(new)g(v)-5 b(ariable)29 b(blo)s(c)m(k)h(for)g(reordering)p 3669 4484 V 234 4597 V 286 4563 a Fm(bdd)p 436 4563 29 4 v 34 w(intaddvarblock)p 1357 4597 4 113 v 3669 4597 V 236 4601 3435 4 v 234 4714 4 113 v 286 4680 a(bdd)p 436 4680 29 4 v 34 w(autoreorder)p 1357 4714 4 113 v 417 w Fn(enables)g(automatic)h(reordering)p 3669 4714 V 234 4826 V 286 4793 a Fm(bdd)p 436 4793 29 4 v 34 w(autoreorder)p 998 4793 V 31 w(times)p 1357 4826 4 113 v 3669 4826 V 236 4830 3435 4 v 234 4943 4 113 v 286 4909 a(bdd)p 436 4909 29 4 v 34 w(blockfile)p 902 4909 V 31 w(hook)p 1357 4943 4 113 v 290 w Fn(sp)s(eci\014es)e(a)i (prin)m(ting)d(callbac)m(k)i(handler)p 3669 4943 V 236 4946 3435 4 v 234 5059 4 113 v 286 5025 a Fm(bdd)p 436 5025 29 4 v 34 w(clrvarblocks)p 1357 5059 4 113 v 369 w Fn(clears)g(all)f(v)-5 b(ariable)30 b(blo)s(c)m(ks)p 3669 5059 V 236 5062 3435 4 v 234 5175 4 113 v 286 5141 a Fm(bdd)p 436 5141 29 4 v 34 w(disable)p 806 5141 V 32 w(reorder)p 1357 5175 4 113 v 241 w Fn(disable)e(automatic)k (reordering)p 3669 5175 V 236 5178 3435 4 v 234 5291 4 113 v 286 5258 a Fm(bdd)p 436 5258 29 4 v 34 w(enable)p 758 5258 V 32 w(reorder)p 1357 5291 4 113 v 289 w Fn(enables)e (automatic)h(reordering)p 3669 5291 V 236 5295 3435 4 v 1962 5989 a(18)p eop %%Page: 19 27 19 26 bop 236 74 3116 4 v 234 187 4 113 v 286 153 a Fm(bdd)p 436 153 29 4 v 34 w(getreorder)p 950 153 V 31 w(method)p 1357 187 4 113 v 146 w Fn(fetc)m(h)31 b(the)g(curren)m(t)f(reorder)g (metho)s(d)p 3351 187 V 236 191 3116 4 v 234 303 4 113 v 286 270 a Fm(bdd)p 436 270 29 4 v 34 w(getreorder)p 950 270 V 31 w(times)p 1357 303 4 113 v 194 w Fn(fetc)m(h)h(the)g (curren)m(t)f(n)m(um)m(b)s(er)f(of)h(allo)m(w)m(ed)h(reorderings)p 3351 303 V 236 307 3116 4 v 234 420 4 113 v 286 386 a Fm(bdd)p 436 386 29 4 v 34 w(level2var)p 1357 420 4 113 v 513 w Fn(fetc)m(h)g(the)g(v)-5 b(ariable)29 b(n)m(um)m(b)s(er)g(of)h (a)h(sp)s(eci\014c)e(lev)m(el)p 3351 420 V 236 423 3116 4 v 234 536 4 113 v 286 502 a Fm(bdd)p 436 502 29 4 v 34 w(printorder)p 1357 536 4 113 v 465 w Fn(prin)m(ts)g(the)h(curren)m (t)h(order)p 3351 536 V 236 539 3116 4 v 234 652 4 113 v 286 618 a Fm(bdd)p 436 618 29 4 v 34 w(reorder)p 1357 652 4 113 v 609 w Fn(start)g(dynamic)e(reordering)p 3351 652 V 236 655 3116 4 v 234 768 4 113 v 286 734 a Fm(bdd)p 436 734 29 4 v 34 w(reorder)p 806 734 V 32 w(gain)p 1357 768 4 113 v 385 w Fn(calculate)i(the)f(gain)g(in)f(size)i(after)f(a)h (reordering)p 3351 768 V 236 772 3116 4 v 234 885 4 113 v 286 851 a Fm(bdd)p 436 851 29 4 v 34 w(reorder)p 806 851 V 32 w(hook)p 1357 885 4 113 v 385 w Fn(sets)g(a)f(handler)f(for)h (automatic)h(reorderings)p 3351 885 V 236 888 3116 4 v 234 1001 4 113 v 286 967 a Fm(bdd)p 436 967 29 4 v 34 w(reorder)p 806 967 V 32 w(probe)p 1357 1001 4 113 v 337 w Fn(de\014ne)f(a)g(handler)f(for)h(minimization)d(of)k(BDDs)p 3351 1001 V 236 1004 3116 4 v 234 1117 4 113 v 286 1083 a Fm(bdd)p 436 1083 29 4 v 34 w(reorder)p 806 1083 V 32 w(verbose)p 1357 1117 4 113 v 241 w Fn(enables)f(v)m(erb)s(ose)g (information)f(ab)s(out)h(reorderings)p 3351 1117 V 236 1120 3116 4 v 234 1233 4 113 v 286 1199 a Fm(bdd)p 436 1199 29 4 v 34 w(setvarorder)p 1357 1233 4 113 v 417 w Fn(set)h(a)g(sp)s(eci\014c)e(v)-5 b(ariable)29 b(order)p 3351 1233 V 236 1237 3116 4 v 234 1349 4 113 v 286 1316 a Fm(bdd)p 436 1316 29 4 v 34 w(swapvar)p 1357 1349 4 113 v 609 w Fn(sw)m(ap)h(t)m(w)m(o)i(BDD)f(v)-5 b(ariables)p 3351 1349 V 236 1353 3116 4 v 234 1466 4 113 v 286 1432 a Fm(bdd)p 436 1432 29 4 v 34 w(var2level)p 1357 1466 4 113 v 513 w Fn(fetc)m(h)31 b(the)g(lev)m(el)f(of)g(a)h(sp)s(eci\014c) e(BDD)j(v)-5 b(ariable)p 3351 1466 V 236 1469 3116 4 v 234 1582 4 113 v 286 1548 a Fm(bdd)p 436 1548 29 4 v 34 w(varblockall)p 1357 1582 4 113 v 417 w Fn(add)30 b(a)g(v)-5 b(ariable)30 b(blo)s(c)m(k)g(for)g(all)f(v)-5 b(ariables)p 3351 1582 V 236 1585 3116 4 v 1962 5989 a(19)p eop %%Page: 20 28 20 27 bop 236 83 3544 12 v 236 196 a Fo(b)s(ddCac)m(heStat)95 b Fn({)31 b(Status)f(information)f(ab)s(out)h(cac)m(he)i(usage)p 236 250 V 236 447 a Fm(typedef)46 b(struct)g(s_bddCacheStat)236 560 y({)379 673 y(long)h(unsigned)f(int)g(uniqueAccess;)379 786 y(long)h(unsigned)f(int)g(uniqueChain;)379 899 y(long)h(unsigned)f (int)g(uniqueHit;)379 1012 y(long)h(unsigned)f(int)g(uniqueMiss;)379 1125 y(long)h(unsigned)f(int)g(opHit;)379 1238 y(long)h(unsigned)f(int) g(opMiss;)379 1350 y(long)h(unsigned)f(int)g(swapCount;)236 1463 y(})i(bddCacheStat;)236 1688 y Fo(Description)p 236 1743 3544 5 v 236 1855 a Fn(The)30 b(\014elds)f(are)286 2056 y Fo(Name)357 b(Num)m(b)s(er)34 b(of)286 2169 y Fn(uniqueAccess)99 b(accesses)32 b(to)f(the)g(unique)d(no)s(de)i(table) 286 2282 y(uniqueChain)120 b(iterations)30 b(through)f(the)i(cac)m(he)h (c)m(hains)e(in)f(the)h(unique)f(no)s(de)g(table)286 2394 y(uniqueHit)230 b(en)m(tries)30 b(actually)g(found)f(in)g(the)i (the)f(unique)f(no)s(de)g(table)286 2507 y(uniqueMiss)178 b(en)m(tries)30 b(not)h(found)e(in)g(the)h(the)h(unique)d(no)s(de)i (table)286 2620 y(opHit)401 b(en)m(tries)30 b(found)f(in)g(the)i(op)s (erator)f(cac)m(hes)286 2733 y(opMiss)349 b(en)m(tries)30 b(not)h(found)e(in)g(the)h(op)s(erator)h(cac)m(hes)286 2846 y(sw)m(apCoun)m(t)186 b(n)m(um)m(b)s(er)29 b(of)i(v)-5 b(ariable)29 b(sw)m(aps)h(in)f(reordering)236 3102 y Fo(See)35 b(also)p 236 3156 V 236 3269 a Fn(b)s(dd)p 397 3269 28 4 v 31 w(cac)m(hestats)1962 5989 y(20)p eop %%Page: 21 29 21 28 bop 236 83 3544 12 v 236 196 a Fo(b)s(ddGb)s(cStat)96 b Fn({)30 b(Status)h(information)d(ab)s(out)j(garbage)g(collections)p 236 250 V 236 447 a Fm(typedef)46 b(struct)g(s_bddGbcStat)236 560 y({)379 673 y(int)h(nodes;)379 786 y(int)g(freenodes;)379 899 y(long)g(time;)379 1012 y(long)g(sumtime;)379 1125 y(int)g(num;)236 1238 y(})h(bddGbcStat;)236 1463 y Fo(Description)p 236 1517 3544 5 v 236 1630 a Fn(The)30 b(\014elds)f(are)286 1830 y Fm(nodes)289 b Fn(T)-8 b(otal)31 b(n)m(um)m(b)s(er)e(of)i(allo)s (cated)f(no)s(des)g(in)f(the)h(no)s(detable)286 1943 y Fm(freenodes)97 b Fn(Num)m(b)s(er)29 b(of)i(free)f(no)s(des)g(in)f (the)i(no)s(detable)286 2056 y Fm(time)337 b Fn(Time)30 b(used)f(for)h(garbage)i(collection)e(this)f(time)286 2169 y Fm(sumtime)193 b Fn(T)-8 b(otal)31 b(time)f(used)g(for)g (garbage)i(collection)286 2282 y Fm(num)385 b Fn(n)m(um)m(b)s(er)29 b(of)i(garbage)g(collections)f(done)h(un)m(til)d(no)m(w)236 2537 y Fo(See)35 b(also)p 236 2591 V 236 2704 a Fn(b)s(dd)p 397 2704 28 4 v 31 w(gb)s(c)p 567 2704 V 33 w(ho)s(ok)1962 5989 y(21)p eop %%Page: 22 30 22 29 bop 236 83 3544 12 v 236 196 a Fo(b)s(ddStat)95 b Fn({)31 b(Status)f(information)f(ab)s(out)h(the)g(b)s(dd)f(pac)m(k)-5 b(age)p 236 250 V 236 447 a Fm(typedef)46 b(struct)g(s_bddStat)236 560 y({)379 673 y(long)h(int)g(produced;)379 786 y(int)g(nodenum;)379 899 y(int)g(maxnodenum;)379 1012 y(int)g(freenodes;)379 1125 y(int)g(minfreenodes;)379 1238 y(int)g(varnum;)379 1350 y(int)g(cachesize;)379 1463 y(int)g(gbcnum;)236 1576 y(})h(bddStat;)236 1801 y Fo(Description)p 236 1855 3544 5 v 236 1968 a Fn(The)30 b(\014elds)f(are)286 2169 y Fm(produced)288 b Fn(total)32 b(n)m(um)m(b)s(er)d(of)h(new)g(no)s (des)g(ev)m(er)h(pro)s(duced)286 2282 y Fm(nodenum)336 b Fn(curren)m(tly)30 b(allo)s(cated)g(n)m(um)m(b)s(er)f(of)i(b)s(dd)d (no)s(des)286 2394 y Fm(maxnodenum)192 b Fn(user)30 b(de\014ned)f (maxim)m(um)g(n)m(um)m(b)s(er)g(of)i(b)s(dd)d(no)s(des)286 2507 y Fm(freenodes)240 b Fn(n)m(um)m(b)s(er)29 b(of)i(curren)m(tly)e (free)i(no)s(des)286 2620 y Fm(minfreenodes)96 b Fn(minim)m(um)54 b(n)m(um)m(b)s(er)i(of)h(no)s(des)e(that)j(should)c(b)s(e)i(left)h (after)g(a)958 2733 y(garbage)32 b(collection.)286 2846 y Fm(varnum)384 b Fn(n)m(um)m(b)s(er)29 b(of)i(de\014ned)e(b)s(dd)f(v) -5 b(ariables)286 2959 y Fm(cachesize)240 b Fn(n)m(um)m(b)s(er)29 b(of)i(en)m(tries)f(in)f(the)i(in)m(ternal)e(cac)m(hes)286 3072 y Fm(gbcnum)384 b Fn(n)m(um)m(b)s(er)29 b(of)i(garbage)h (collections)e(done)g(un)m(til)e(no)m(w)236 3327 y Fo(See)35 b(also)p 236 3382 V 236 3495 a Fn(b)s(dd)p 397 3495 28 4 v 31 w(stats)p 236 3828 3544 12 v 236 3941 a Fo(b)s(dd)p 419 3941 32 4 v 38 w(addref)95 b Fn({)31 b(increases)f(the)h(reference) g(coun)m(t)g(on)f(a)h(no)s(de)p 236 3995 3544 12 v 236 4200 a Fm(BDD)47 b(bdd_addref\(BDD)d(r\))236 4425 y Fo(Description)p 236 4479 3544 5 v 236 4592 a Fn(Reference)28 b(coun)m(ting)f(is)f(done) h(on)g(externaly)g(referenced)g(no)s(des)f(only)g(and)h(the)g(coun)m(t) g(for)g(a)h(sp)s(eci\014c)236 4705 y(no)s(de)d Fm(r)g Fn(can)h(and)f(m)m(ust)g(b)s(e)g(increased)g(using)f(this)g(function)g (to)j(a)m(v)m(oid)f(lo)s(osing)e(the)i(no)s(de)e(in)h(the)g(next)236 4818 y(garbage)32 b(collection.)236 5081 y Fo(Return)j(v)-6 b(alue)p 236 5135 V 236 5248 a Fn(The)30 b(BDD)i(no)s(de)d Fm(r)p Fn(.)236 5511 y Fo(See)35 b(also)p 236 5565 V 236 5678 a Fn(b)s(dd)p 397 5678 28 4 v 31 w(delref)1962 5989 y(22)p eop %%Page: 23 31 23 30 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(addv)-6 b(arblo)s(c)m(k)97 b Fn({)30 b(adds)g(a)h(new)f(v)-5 b(ariable)29 b(blo)s(c)m(k)h(for)g(reordering)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_addvarblock\(BDD)c(var,)j (int)h(fixed\))236 568 y(int)g(bdd_intaddvarblock\(int)42 b(first,)k(int)h(last,)f(int)h(fixed\))236 793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Creates)40 b(a)g(new)e(v)-5 b(ariable)38 b(blo)s(c)m(k)h(with)f(the)i(v)-5 b(ariables)38 b(in)f(the)j(v)-5 b(ariable)38 b(set)i Fm(var)p Fn(.)66 b(The)39 b(v)-5 b(ariables)236 1073 y(in)33 b Fm(var)h Fn(m)m(ust)g(b)s(e)g(con)m(tiguous.)53 b(In)34 b(the)h(second)f(form)g (the)h(argumen)m(t)g Fm(first)e Fn(is)g(the)i(\014rst)f(v)-5 b(ariable)236 1186 y(included)28 b(in)g(the)j(blo)s(c)m(k)e(and)h Fm(last)f Fn(is)g(the)h(last)g(v)-5 b(ariable)29 b(included)f(in)g(the) j(blo)s(c)m(k.)40 b(This)28 b(order)i(do)s(es)236 1298 y(not)h(dep)s(end)d(on)j(curren)m(t)f(v)-5 b(ariable)29 b(order.)327 1411 y(The)24 b(v)-5 b(ariable)23 b(blo)s(c)m(ks)h(are)h (ordered)f(as)h(a)g(tree,)h(with)e(the)g(largest)h(ranges)g(at)g(top)g (and)f(the)g(smallest)236 1524 y(at)34 b(the)g(b)s(ottom.)50 b(Example:)c(Assume)33 b(the)g(blo)s(c)m(k)g(0-9)i(is)d(added)h(as)g (the)h(\014rst)f(blo)s(c)m(k)f(and)h(then)g(the)236 1637 y(blo)s(c)m(k)f(0-6.)48 b(This)31 b(yields)f(the)j(0-9)g(blo)s(c)m(k)f (at)h(the)g(top,)g(with)e(the)i(0-6)h(blo)s(c)m(k)d(as)i(a)g(c)m(hild.) 45 b(If)32 b(no)m(w)g(the)236 1750 y(blo)s(c)m(k)e(2-4)h(w)m(as)f (added,)g(it)f(w)m(ould)g(b)s(ecome)h(a)h(c)m(hild)d(of)i(the)g(0-6)h (blo)s(c)m(k.)40 b(A)30 b(blo)s(c)m(k)g(of)g(0-8)h(w)m(ould)e(b)s(e)g (a)236 1863 y(c)m(hild)i(of)h(the)h(0-9)g(blo)s(c)m(k)f(and)g(ha)m(v)m (e)h(the)g(0-6)g(blo)s(c)m(k)f(as)h(a)g(c)m(hild.)45 b(P)m(artially)31 b(o)m(v)m(erlapping)g(blo)s(c)m(ks)h(are)236 1976 y(not)f(allo)m(w)m(ed.)327 2089 y(The)g Fm(fixed)f Fn(parameter)i(sets)g(the)g(blo)s(c)m(k)f(to)h(b)s(e)f(\014xed)g(\(no)g (reordering)g(of)g(its)g(c)m(hild)f(blo)s(c)m(ks)h(is)g(al-)236 2202 y(lo)m(w)m(ed\))23 b(or)f(free,)i(using)d(the)h(constan)m(ts)h Fm(BDD)p 1734 2202 29 4 v 34 w(REORDER)p 2104 2202 V 32 w(FIXED)e Fn(and)g Fm(BDD)p 2709 2202 V 34 w(REORDER)p 3079 2202 V 32 w(FREE)p Fn(.)g(Reordering)236 2315 y(is)30 b(alw)m(a)m(ys)h(done)f(on)g(the)h(top)f(most)h(blo)s(c)m(ks)f(\014rst) f(and)h(then)g(recursiv)m(ely)f(do)m(wn)m(w)m(ards.)327 2428 y(The)g(return)g(v)-5 b(alue)29 b(is)f(an)i(in)m(teger)g(that)g (can)g(b)s(e)f(used)f(to)j(iden)m(tify)d(the)i(blo)s(c)m(k)f(later)g (on)h(-)f(with)g(for)236 2540 y(example)h Fm(bdd)p 742 2540 V 34 w(blockfile)p 1208 2540 V 32 w(hook)p Fn(.)39 b(The)30 b(v)-5 b(alues)30 b(returned)f(will)f(b)s(e)i(in)f(the)h (sequence)h(0)p Fj(;)15 b Fn(1)p Fj(;)g Fn(2)p Fj(;)g Fn(3)p Fj(;)g(:)g(:)g(:)t Fn(.)236 2804 y Fo(Return)35 b(v)-6 b(alue)p 236 2858 3544 5 v 236 2971 a Fn(A)31 b(non-negativ)m(e)g(iden)m(ti\014er)e(on)h(success,)h(otherwise)f(a)g (negativ)m(e)i(error)e(co)s(de.)236 3234 y Fo(See)35 b(also)p 236 3288 V 236 3401 a Fn(b)s(dd)p 397 3401 28 4 v 31 w(v)-5 b(arblo)s(c)m(k)g(all,)29 b(fdd)p 1038 3401 V 32 w(in)m(taddv)-5 b(arblo)s(c)m(k,)29 b(b)s(dd)p 1870 3401 V 31 w(clrv)-5 b(arblo)s(c)m(ks)1962 5989 y(23)p eop %%Page: 24 32 24 31 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(allsat)95 b Fn({)31 b(\014nds)e(all)g(satisfying)g(v)-5 b(ariable)29 b(assignmen)m(ts)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_satone\(BDD)d(r,)j(bddallsathandler)d(handler\)) 236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Iterates)33 b(through)e(all)g(legal)g(v)-5 b(ariable)31 b(assignmen)m(ts)g(\(those)i(that)f(mak)m(e)h(the)f(BDD)h(come)g (true\))f(for)236 960 y(the)h(b)s(dd)d Fm(r)i Fn(and)g(calls)g(the)h (callbac)m(k)f(handler)f Fm(handler)f Fn(for)j(eac)m(h)g(of)g(them.)47 b(The)32 b(arra)m(y)h(passed)f(to)236 1073 y Fm(handler)c Fn(con)m(tains)i(one)g(en)m(try)g(for)f(eac)m(h)i(of)f(the)g(globaly)f (de\014ned)f(v)-5 b(ariables.)39 b(Eac)m(h)30 b(en)m(try)g(is)f(either) 236 1186 y(0)i(if)e(the)i(v)-5 b(ariable)29 b(is)g(false,)i(1)g(if)e (it)h(is)f(true,)i(and)e(-1)i(if)f(it)g(is)f(a)i(don't)f(care.)327 1298 y(The)f(follo)m(wing)e(is)h(an)h(example)g(of)g(a)h(callbac)m(k)f (handler)e(that)j(prin)m(ts)e('X')h(for)g(don't)g(cares,)i('0')f(for) 236 1411 y(zero,)i(and)d('1')j(for)e(one:)236 1599 y Fm(void)47 b(allsatPrintHandler\(char*)41 b(varset,)46 b(int)h(size\))236 1712 y({)332 1825 y(for)g(\(int)f(v=0;)h(v>)377 2063 y(bddop)p 623 2063 V 33 w(biimp)146 b Fn(bi-implication)27 b(\()p Fj(A)f Fc(,)f Fj(B)5 b Fn(\))297 b([1,0,0,1])377 2176 y Fm(bddop)p 623 2176 V 33 w(diff)194 b Fn(set)31 b(di\013erence)f(\()p Fj(A)20 b Fc(n)h Fj(B)5 b Fn(\))385 b([0,0,1,0])524 b Fm(-)377 2289 y(bddop)p 623 2289 V 33 w(less)194 b Fn(less)30 b(than)g(\()p Fj(A)c(<)e(B)5 b Fn(\))519 b([0,1,0,0])524 b Fm(<)377 2402 y(bddop)p 623 2402 V 33 w(invimp)98 b Fn(rev)m(erse)31 b(implication)d(\()p Fj(A)e Fc(\()f Fj(B)5 b Fn(\))99 b([1,0,1,1])500 b Fm(<<)236 2658 y Fo(Return)35 b(v)-6 b(alue)p 236 2712 3544 5 v 236 2825 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration.)236 3088 y Fo(See)35 b(also)p 236 3142 V 236 3255 a Fn(b)s(dd)p 397 3255 28 4 v 31 w(ite)p 236 3588 3544 12 v 236 3701 a Fo(b)s(dd)p 419 3701 32 4 v 38 w(appuni)96 b Fn({)30 b(apply)f(op)s(eration)h(and)g(unique)e(quan)m(ti\014cation)p 236 3755 3544 12 v 236 3960 a Fm(BDD)47 b(bdd_appuni\(BDD)d(left,)i (BDD)h(right,)f(int)h(opr,)g(BDD)g(var\))236 4185 y Fo(Description)p 236 4239 3544 5 v 236 4352 a Fn(Applies)32 b(the)i(binary)e(op)s (erator)i Fm(opr)f Fn(to)i(the)f(argumen)m(ts)g Fm(left)e Fn(and)i Fm(right)e Fn(and)h(then)h(p)s(erforms)e(a)236 4465 y(unique)c(quan)m(ti\014cation)g(of)h(the)h(v)-5 b(ariables)28 b(from)g(the)i(v)-5 b(ariable)28 b(set)i Fm(var)p Fn(.)39 b(This)27 b(is)i(done)g(in)f(a)h(b)s(ottom)236 4578 y(up)f(manner)g(suc)m(h)h(that)h(b)s(oth)e(the)h(apply)f(and)h (quan)m(ti\014cation)f(is)g(done)h(on)g(the)g(lo)m(w)m(er)h(no)s(des)e (b)s(efore)236 4691 y(stepping)d(up)g(to)i(the)g(higher)d(no)s(des.)39 b(This)24 b(mak)m(es)j(the)g Fm(bdd)p 2321 4691 29 4 v 33 w(appuni)e Fn(function)f(m)m(uc)m(h)j(more)f(e\016cien)m(t)236 4804 y(than)k(an)h(apply)e(op)s(eration)g(follo)m(w)m(ed)h(b)m(y)h(a)f (quan)m(ti\014cation.)236 5067 y Fo(Return)35 b(v)-6 b(alue)p 236 5121 3544 5 v 236 5234 a Fn(The)30 b(result)f(of)i(the)f (op)s(eration.)236 5497 y Fo(See)35 b(also)p 236 5552 V 236 5665 a Fn(b)s(dd)p 397 5665 28 4 v 31 w(app)s(ex,)30 b(b)s(dd)p 877 5665 V 31 w(appall,)f(b)s(dd)p 1362 5665 V 30 w(apply)-8 b(,)30 b(b)s(dd)p 1816 5665 V 31 w(exist,)g(b)s(dd)p 2243 5665 V 31 w(unique,)f(b)s(dd)p 2751 5665 V 31 w(forall,)g(b)s(dd)p 3198 5665 V 31 w(mak)m(eset)1962 5989 y(27)p eop %%Page: 28 36 28 35 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(autoreorder)96 b Fn({)30 b(enables)g(automatic)h (reordering)p 236 250 3544 12 v 236 455 a Fm(int)47 b (bdd_autoreorder\(int)c(method\))236 568 y(int)k (bdd_autoreorder_times\(int)41 b(method,)46 b(int)h(num\))236 793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Enables)h (automatic)j(reordering)d(using)f Fm(method)h Fn(as)i(the)f(reordering) f(metho)s(d.)97 b(If)49 b Fm(method)e Fn(is)236 1073 y Fm(BDD)p 386 1073 29 4 v 34 w(REORDER)p 756 1073 V 32 w(NONE)35 b Fn(then)g(automatic)i(reordering)d(is)h(disabled.)54 b(Automatic)37 b(reordering)d(is)h(done)236 1186 y(ev)m(ery)42 b(time)e(the)g(n)m(um)m(b)s(er)g(of)g(activ)m(e)i(no)s(des)e(in)f(the)i (no)s(de)f(table)g(has)g(b)s(een)g(doubled)f(and)g(w)m(orks)236 1298 y(b)m(y)i(in)m(terrupting)d(the)j(curren)m(t)f(BDD)i(op)s (eration,)h(doing)d(the)g(reordering)g(and)g(the)h(retrying)e(the)236 1411 y(op)s(eration.)327 1524 y(In)34 b(the)h(second)g(form)g(the)g (argumen)m(t)g Fm(num)f Fn(sp)s(eci\014es)g(the)h(allo)m(w)m(ed)g(n)m (um)m(b)s(er)f(of)h(reorderings.)53 b(So)236 1637 y(if)31 b(for)h(example)f(a)h("one)h(shot")f(reordering)f(is)g(needed,)h(then)f (the)h Fm(num)f Fn(argumen)m(t)i(w)m(ould)d(b)s(e)h(set)i(to)236 1750 y(one.)327 1863 y(V)-8 b(alues)31 b(for)f Fm(method)e Fn(can)j(b)s(e)f(found)f(under)g Fm(bdd)p 2025 1863 V 33 w(reorder)p Fn(.)236 2126 y Fo(Return)35 b(v)-6 b(alue)p 236 2180 3544 5 v 236 2293 a Fn(Returns)30 b(the)g(old)g(v)-5 b(alue)30 b(of)g Fm(method)236 2557 y Fo(See)35 b(also)p 236 2611 V 236 2724 a Fn(b)s(dd)p 397 2724 28 4 v 31 w(reorder)p 236 3057 3544 12 v 236 3170 a Fo(b)s(dd)p 419 3170 32 4 v 38 w(biimp)95 b Fn({)31 b(The)e(logical)h ('bi-implication')e(b)s(et)m(w)m(een)j(t)m(w)m(o)g(BDDs)p 236 3224 3544 12 v 236 3429 a Fm(BDD)47 b(bdd_biimp\(BDD)d(l,)j(BDD)g (r\))236 3654 y Fo(Description)p 236 3708 3544 5 v 236 3821 a Fn(This)29 b(a)i(wrapp)s(er)d(that)j(calls)f Fm(bdd)p 1426 3821 29 4 v 33 w(apply\(l,r,bddop)p 2179 3821 V 30 w(biimp\))p Fn(.)236 4084 y Fo(Return)35 b(v)-6 b(alue)p 236 4138 3544 5 v 236 4251 a Fn(The)30 b(logical)g('bi-implication')d (of)k Fm(l)f Fn(and)g Fm(r)g Fn(\()p Fj(l)d Fc(,)e Fj(r)s Fn(\).)236 4514 y Fo(See)35 b(also)p 236 4569 V 236 4681 a Fn(b)s(dd)p 397 4681 28 4 v 31 w(apply)-8 b(,)30 b(b)s(dd)p 852 4681 V 30 w(imp)1962 5989 y(28)p eop %%Page: 29 37 29 36 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(blo)s(c)m(k\014le)p 832 196 V 39 w(ho)s(ok)96 b Fn({)31 b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p 236 250 3544 12 v 236 455 a Fm(bddfilehandler)44 b (bdd_blockfile_hook\(bddfil)o(eha)o(ndle)o(r)e(handler\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)27 b(prin)m(ting)d(callbac)m(k)i(handler)f(is)g(used)g(to)i(con)m(v)m(ert) h(the)f(v)-5 b(ariable)25 b(blo)s(c)m(k)g(iden)m(ti\014ers)g(in)m(to)h (something)236 960 y(readable)d(b)m(y)g(the)g(end)g(user.)38 b(Use)23 b Fm(bdd)p 1569 960 29 4 v 34 w(blockfile)p 2035 960 V 32 w(hook)f Fn(to)h(pass)g(a)h(handler)d(to)j(BuDDy)-8 b(.)40 b(A)23 b(t)m(ypical)236 1073 y(handler)29 b(could)g(lo)s(ok)h (lik)m(e)g(this:)236 1260 y Fm(void)47 b(printhandler\(FILE)c(*o,)k (int)g(block\))236 1373 y({)379 1486 y(extern)f(char)h(**blocknames;) 379 1599 y(fprintf\(o,)e("\045s",)i(blocknames[block]\);)236 1712 y(})236 1900 y Fn(The)42 b(handler)e(is)h(then)h(called)f(from)h Fm(bdd)p 1743 1900 V 33 w(printorder)d Fn(and)j Fm(bdd)p 2628 1900 V 33 w(reorder)e Fn(\(dep)s(ending)g(on)i(the)236 2012 y(v)m(erb)s(ose)36 b(lev)m(el\))g(with)f(the)h(blo)s(c)m(k)g(n)m (um)m(b)s(ers)e(returned)h(b)m(y)h Fm(bdd)p 2466 2012 V 33 w(addvarblock)d Fn(as)j(argumen)m(ts.)58 b(No)236 2125 y(default)25 b(handler)f(is)g(supplied.)36 b(The)25 b(argumen)m(t)i Fm(handler)c Fn(ma)m(y)j(b)s(e)f(NULL)h(if)f(no)g (handler)f(is)h(needed.)236 2389 y Fo(Return)35 b(v)-6 b(alue)p 236 2443 3544 5 v 236 2556 a Fn(The)30 b(old)g(handler)236 2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p 397 2986 28 4 v 31 w(prin)m(torder)p 236 3337 3544 12 v 236 3450 a Fo(b)s(dd)p 419 3450 32 4 v 38 w(buildcub)s(e)96 b Fn({)31 b(build)c(a)k(cub)s(e)f(from)g(an)g(arra)m(y)h(of)f(v)-5 b(ariables)p 236 3504 3544 12 v 236 3709 a Fm(BDD)47 b(bdd_buildcube\(int)c(value,)j(int)h(width,)f(BDD)h(*var\))236 3822 y(BDD)g(bdd_ibuildcube\(int)c(value,)j(int)h(width,)f(int)h (*var\))236 4047 y Fo(Description)p 236 4101 3544 5 v 236 4214 a Fn(This)24 b(function)g(builds)e(a)k(cub)s(e)e(from)h(the)h (v)-5 b(ariables)24 b(in)g Fm(var)p Fn(.)38 b(It)25 b(do)s(es)h(so)f(b) m(y)g(in)m(terpreting)f(the)i Fm(width)236 4327 y Fn(lo)m(w)g(order)g (bits)f(of)i Fm(value)d Fn(as)j(a)f(bit)g(mask{a)h(set)g(bit)e (indicates)g(that)i(the)f(v)-5 b(ariable)25 b(should)g(b)s(e)g(added) 236 4440 y(in)i(it's)g(p)s(ositiv)m(e)f(form,)i(and)f(a)h(cleared)g (bit)f(the)h(opp)s(osite.)39 b(The)27 b(most)h(signi\014can)m(t)e(bits) h(are)h(enco)s(ded)236 4553 y(with)i(the)i(\014rst)f(v)-5 b(ariables)30 b(in)g Fm(var)p Fn(.)43 b(Consider)29 b(as)j(an)f (example)g(the)h(call)f Fm(bdd)p 2941 4553 29 4 v 33 w(buildcube\(0xB,)44 b(4,)236 4665 y(var\))p Fn(.)62 b(This)36 b(corresp)s(onds)g(to)j(the)f(expression:)54 b Fj(v)s(ar)s Fn([0])26 b Fc(^)f(:)p Fj(v)s(ar)s Fn([1])h Fc(^)e Fj(v)s(ar)s Fn([2])i Fc(^)f Fj(v)s(ar)s Fn([3].)64 b(The)37 b(\014rst)236 4778 y(v)m(ersion)j(of)h(the)g(function)f(tak)m (es)i(an)f(arra)m(y)g(of)g(BDDs,)k(whereas)40 b(the)h(second)g(tak)m (es)h(an)f(arra)m(y)g(of)236 4891 y(v)-5 b(ariable)29 b(n)m(um)m(b)s(ers)g(as)i(used)e(in)h Fm(bdd)p 1520 4891 V 33 w(ithvar)p Fn(.)236 5154 y Fo(Return)35 b(v)-6 b(alue)p 236 5209 3544 5 v 236 5322 a Fn(The)30 b(resulting)f(cub)s(e)236 5585 y Fo(See)35 b(also)p 236 5639 V 236 5752 a Fn(b)s(dd)p 397 5752 28 4 v 31 w(ith)m(v)-5 b(ar,)30 b(fdd)p 846 5752 V 32 w(ith)m(v)-5 b(ar)1962 5989 y(29)p eop %%Page: 30 38 30 37 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(cac)m(hestats)96 b Fn({)31 b(F)-8 b(etc)m(h)32 b(cac)m(he)g(access)g(usage)p 236 250 3544 12 v 236 455 a Fm(void)47 b(bdd_cachestats\(bddCacheS)o(tat)41 b(*s\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(F)-8 b(etc)m(hes)38 b(cac)m(he)g(usage)f(information)e(and)g(stores)i(it)e (in)g Fm(s)p Fn(.)58 b(The)36 b(\014elds)e(of)j Fm(s)f Fn(can)g(b)s(e)g(found)e(in)h(the)236 960 y(do)s(cumen)m(taion)k(for)h Fm(bddCacheStat)p Fn(.)65 b(This)38 b(function)h(ma)m(y)h(or)g(ma)m(y)g (not)g(b)s(e)f(compiled)g(in)m(to)g(the)236 1073 y(BuDDy)31 b(pac)m(k)-5 b(age)33 b(-)d(dep)s(ending)e(on)i(the)h(setup)f(at)h (compile)e(time)h(of)h(BuDDy)-8 b(.)236 1336 y Fo(See)35 b(also)p 236 1390 V 236 1503 a Fn(b)s(ddCac)m(heStat,)30 b(b)s(dd)p 1013 1503 28 4 v 31 w(prin)m(tstat)p 236 1854 3544 12 v 236 1967 a Fo(b)s(dd)p 419 1967 32 4 v 38 w(clear)p 674 1967 V 38 w(error)96 b Fn({)31 b(clears)f(an)g(error)g(condition)f (in)g(the)i(k)m(ernel)p 236 2021 3544 12 v 236 2226 a Fm(void)47 b(bdd_clear_error\(void\))236 2451 y Fo(Description)p 236 2505 3544 5 v 236 2618 a Fn(The)28 b(BuDDy)h(k)m(ernel)f(ma)m(y)i (at)f(some)g(p)s(oin)m(t)e(run)g(out)i(of)g(new)f(R)m(OBDD)h(no)s(des)f (if)f(a)i(maxim)m(um)f(limit)236 2731 y(is)37 b(set)g(with)f Fm(bdd)p 847 2731 29 4 v 34 w(setmaxnodenum)p Fn(.)58 b(In)36 b(this)g(case)i(the)g(curren)m(t)f(error)g(handler)e(is)h (called)h(and)g(an)236 2844 y(in)m(ternal)27 b(error)h(\015ag)h(is)e (set.)41 b(F)-8 b(urther)28 b(calls)f(to)i(BuDDy)g(will)d(alw)m(a)m(ys) j(return)e Fm(bddfalse)p Fn(.)38 b(F)-8 b(rom)29 b(here)236 2957 y(BuDDy)j(m)m(ust)g(either)f(b)s(e)f(restarted)i(or)g Fm(bdd)p 1828 2957 V 33 w(clear)p 2101 2957 V 33 w(error)e Fn(ma)m(y)j(b)s(e)d(called)h(after)h(action)g(is)e(tak)m(en)236 3070 y(to)g(let)e(BuDDy)i(con)m(tin)m(ue.)40 b(This)27 b(ma)m(y)j(not)f(b)s(e)f(esp)s(ecially)f(usefull)f(since)i(the)h (default)f(error)g(handler)236 3182 y(exits)i(the)h(program)f(-)h (other)f(needs)g(ma)m(y)h(of)g(course)f(exist.)236 3446 y Fo(See)35 b(also)p 236 3500 3544 5 v 236 3613 a Fn(b)s(dd)p 397 3613 28 4 v 31 w(error)p 621 3613 V 32 w(ho)s(ok,)c(b)s(dd)p 1057 3613 V 31 w(setmaxno)s(den)m(um)p 236 3964 3544 12 v 236 4077 a Fo(b)s(dd)p 419 4077 32 4 v 38 w(clrv)-6 b(arblo)s(c)m(ks)98 b Fn({)30 b(clears)h(all)e(v)-5 b(ariable)29 b(blo)s(c)m(ks)p 236 4131 3544 12 v 236 4336 a Fm(void)47 b(bdd_clrvarblocks\(void\))236 4561 y Fo(Description)p 236 4615 3544 5 v 236 4728 a Fn(Clears)30 b(all)f(the)i(v)-5 b(ariable)29 b(blo)s(c)m(ks)h(that)g(has)h(b)s(een)e(de\014ned)g(b)m(y) i(calls)e(to)i(b)s(dd)p 2902 4728 28 4 v 31 w(addv)-5 b(arblo)s(c)m(k.)236 4991 y Fo(See)35 b(also)p 236 5045 3544 5 v 236 5158 a Fn(b)s(dd)p 397 5158 28 4 v 31 w(addv)-5 b(arblo)s(c)m(k)1962 5989 y(30)p eop %%Page: 31 39 31 38 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(comp)s(ose)96 b Fn({)30 b(functional)f(comp)s(osition)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_compose\(BDD)d(f,)j(BDD)g (g,)g(int)g(var\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Substitutes)29 b(the)i(v)-5 b(ariable)29 b Fm(var)g Fn(with)g(the)i(BDD)g Fm(g)f Fn(in)g(the)g(BDD)i Fm(f)p Fn(:)40 b(result)29 b(=)c Fj(f)10 b Fn([)p Fj(g)s(=v)s(ar)s Fn(].)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(comp)s(osed)g(BDD)236 1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(v)m(eccomp)s(ose,)d(b)s(dd)p 1102 1707 V 31 w(replace,)f(b)s(dd)p 1623 1707 V 30 w(restrict)p 236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 4 v 38 w(constrain)96 b Fn({)31 b(generalized)f(cofactor)p 236 2225 3544 12 v 236 2430 a Fm(BDD)47 b(bdd_constrain\(BDD)c(f,)k (BDD)g(c\))236 2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a Fn(Computes)30 b(the)h(generalized)f(cofactor)i(of)e Fm(f)g Fn(with)f(resp)s(ect)i(to)g Fm(c)p Fn(.)236 3086 y Fo(Return)k(v)-6 b(alue)p 236 3140 V 236 3253 a Fn(The)30 b(constrained)g(BDD)236 3516 y Fo(See)35 b(also)p 236 3570 V 236 3683 a Fn(b)s(dd)p 397 3683 28 4 v 31 w(restrict,)30 b(b)s(dd)p 923 3683 V 31 w(simplify)1962 5989 y(31)p eop %%Page: 32 40 32 39 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(delref)95 b Fn({)31 b(decreases)g(the)g(reference)g (coun)m(t)g(on)f(a)h(no)s(de)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_delref\(BDD)d(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Reference)28 b(coun)m(ting)f(is)f(done)h (on)g(externaly)g(referenced)g(no)s(des)f(only)g(and)h(the)g(coun)m(t)g (for)g(a)h(sp)s(eci\014c)236 960 y(no)s(de)k Fm(r)g Fn(can)h(and)f(m)m (ust)h(b)s(e)e(decreased)j(using)d(this)g(function)g(to)j(mak)m(e)f(it) f(p)s(ossible)e(to)k(reclaim)d(the)236 1073 y(no)s(de)f(in)f(the)i (next)f(garbage)i(collection.)236 1336 y Fo(Return)j(v)-6 b(alue)p 236 1390 V 236 1503 a Fn(The)30 b(BDD)i(no)s(de)d Fm(r)p Fn(.)236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(addref)p 236 2266 3544 12 v 236 2379 a Fo(b)s(dd)p 419 2379 32 4 v 38 w(disable)p 771 2379 V 38 w(reorder)96 b Fn({)30 b(Disable)g(automatic)h(reordering)p 236 2434 3544 12 v 236 2638 a Fm(void)47 b(bdd_disable_reorder\(void)o(\))236 2863 y Fo(Description)p 236 2918 3544 5 v 236 3031 a Fn(Disables)29 b(automatic)i(reordering)e(un)m(til)g Fm(bdd)p 1823 3031 29 4 v 33 w(enable)p 2144 3031 V 33 w(reorder)f Fn(is)h(called.)40 b(Reordering)29 b(is)g(enabled)236 3143 y(b)m(y)h(default)g(as)h(so)s(on)f(as)g(an)m(y)h(v)-5 b(ariable)29 b(blo)s(c)m(ks)h(ha)m(v)m(e)i(b)s(een)d(de\014ned.)236 3407 y Fo(See)35 b(also)p 236 3461 3544 5 v 236 3574 a Fn(b)s(dd)p 397 3574 28 4 v 31 w(enable)p 681 3574 V 32 w(reorder)p 236 3907 3544 12 v 236 4020 a Fo(b)s(dd)p 419 4020 32 4 v 38 w(done)61 b Fn({)31 b(resets)g(the)f(b)s(dd)e(pac)m (k)-5 b(age)p 236 4074 3544 12 v 236 4279 a Fm(void)47 b(bdd_done\(void\))236 4504 y Fo(Description)p 236 4558 3544 5 v 236 4671 a Fn(This)37 b(function)g(frees)h(all)g(memory)g (used)f(b)m(y)i(the)f(b)s(dd)f(pac)m(k)-5 b(age)40 b(and)e(resets)h (the)f(pac)m(k)-5 b(age)41 b(to)e(it's)236 4784 y(initial)28 b(state.)236 5047 y Fo(See)35 b(also)p 236 5101 V 236 5214 a Fn(b)s(dd)p 397 5214 28 4 v 31 w(init)1962 5989 y(32)p eop %%Page: 33 41 33 40 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(enable)p 749 196 V 37 w(reorder)96 b Fn({)31 b(Enables)e(automatic)j(reordering)p 236 250 3544 12 v 236 455 a Fm(void)47 b(bdd_enable_reorder\(void\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Re-enables)31 b(reordering)e(after)i(a)f(call)g(to)h Fm(bdd)p 1846 847 29 4 v 34 w(disable)p 2216 847 V 32 w(reorder)p Fn(.)236 1110 y Fo(See)k(also)p 236 1164 3544 5 v 236 1277 a Fn(b)s(dd)p 397 1277 28 4 v 31 w(disable)p 703 1277 V 31 w(reorder)p 236 1610 3544 12 v 236 1723 a Fo(b)s(dd)p 419 1723 32 4 v 38 w(error)p 686 1723 V 38 w(ho)s(ok)96 b Fn({)31 b(set)g(a)g(handler)d(for)i(error)g(conditions)p 236 1777 3544 12 v 236 1982 a Fm(bddinthandler)44 b (bdd_error_hook\(bddinthandl)o(er)d(handler\))236 2207 y Fo(Description)p 236 2262 3544 5 v 236 2374 a Fn(Whenev)m(er)35 b(an)e(error)g(o)s(ccurs)h(in)e(the)i(b)s(dd)d(pac)m(k)-5 b(age)36 b(a)e(test)h(is)d(done)i(to)g(see)g(if)f(an)g(error)h(handler) d(is)236 2487 y(supplied)k(b)m(y)j(the)h(user)f(and)f(if)h(suc)m(h)g (exists)g(then)g(it)g(will)d(b)s(e)j(called)f(with)h(an)g(error)g(co)s (de)g(in)f(the)236 2600 y(v)-5 b(ariable)29 b Fm(errcode)p Fn(.)38 b(The)30 b(handler)d(ma)m(y)k(then)e(prin)m(t)g(an)m(y)h (usefull)d(information)h(and)h(return)g(or)h(exit)236 2713 y(afterw)m(ards.)327 2826 y(This)h(function)h(sets)h(the)g (handler)e(to)j(b)s(e)e Fm(handler)p Fn(.)47 b(If)32 b(a)h Fm(NULL)f Fn(argumen)m(t)h(is)f(supplied)e(then)j(no)236 2939 y(calls)26 b(are)h(made)f(when)g(an)g(error)h(o)s(ccurs.)39 b(P)m(ossible)25 b(error)h(co)s(des)h(are)g(found)e(in)g Fm(bdd.h)p Fn(.)38 b(The)26 b(default)236 3052 y(handler)j(is)g Fm(bdd)p 806 3052 29 4 v 34 w(default)p 1176 3052 V 32 w(errhandler)f Fn(whic)m(h)h(will)f(use)i Fm(exit\(\))e Fn(to)j(terminate)g(the)f(program.)327 3165 y(An)m(y)h(handler)d (should)g(b)s(e)i(de\014ned)f(lik)m(e)h(this:)236 3352 y Fm(void)47 b(my_error_handler\(int)42 b(errcode\))236 3465 y({)379 3578 y(...)236 3691 y(})236 4029 y Fo(Return)35 b(v)-6 b(alue)p 236 4083 3544 5 v 236 4196 a Fn(The)30 b(previous)f(handler)236 4459 y Fo(See)35 b(also)p 236 4514 V 236 4626 a Fn(b)s(dd)p 397 4626 28 4 v 31 w(errstring)1962 5989 y(33)p eop %%Page: 34 42 34 41 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(errstring)96 b Fn({)31 b(con)m(v)m(erts)g(an)g(error)f (co)s(de)g(to)h(a)g(string)p 236 250 3544 12 v 236 455 a Fm(const)47 b(char)f(*bdd_errstring\(int)d(errorcode\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Con)m(v)m(erts)25 b(a)g(negativ)m(e)g(error)f(co)s(de)g Fm(errorcode)e Fn(to)j(a)f(descriptiv)m(e)g(string)f(that)h(can)h(b)s(e)f(used)f(for)h (error)236 960 y(handling.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(An)30 b(error)g(description)f(string) g(if)g Fm(e)h Fn(is)g(kno)m(wn,)g(otherwise)g Fm(NULL)p Fn(.)236 1653 y Fo(See)35 b(also)p 236 1707 V 236 1820 a Fn(b)s(dd)p 397 1820 28 4 v 31 w(err)p 540 1820 V 32 w(ho)s(ok)p 236 2154 3544 12 v 236 2266 a Fo(b)s(dd)p 419 2266 32 4 v 38 w(exist)95 b Fn({)31 b(existen)m(tial)f(quan)m (ti\014cation)g(of)g(v)-5 b(ariables)p 236 2321 3544 12 v 236 2526 a Fm(BDD)47 b(bdd_exist\(BDD)d(r,)j(BDD)g(var\))236 2751 y Fo(Description)p 236 2805 3544 5 v 236 2918 a Fn(Remo)m(v)m(es)32 b(all)e(o)s(ccurences)g(in)f Fm(r)h Fn(of)h(v)-5 b(ariables)29 b(in)g(the)i(set)f Fm(var)g Fn(b)m(y)g(existen)m(tial)g(quan)m(ti\014cation.)236 3181 y Fo(Return)35 b(v)-6 b(alue)p 236 3235 V 236 3348 a Fn(The)30 b(quan)m(ti\014ed)f(BDD.)236 3611 y Fo(See)35 b(also)p 236 3665 V 236 3778 a Fn(b)s(dd)p 397 3778 28 4 v 31 w(forall,)29 b(b)s(dd)p 844 3778 V 31 w(unique,)g(b)s(dd)p 1352 3778 V 31 w(mak)m(eset)p 236 4129 3544 12 v 236 4242 a Fo(b)s(dd)p 419 4242 32 4 v 38 w(extv)-6 b(arn)m(um)95 b Fn({)31 b(add)e(extra)i(BDD)h(v)-5 b(ariables)p 236 4296 3544 12 v 236 4501 a Fm(int)47 b(bdd_extvarnum\(int)c(num\))236 4726 y Fo(Description)p 236 4780 3544 5 v 236 4893 a Fn(Extends)30 b(the)h(curren)m(t)f(n)m(um)m(b)s(er)f(of)h(allo)s(cated) h(BDD)g(v)-5 b(ariables)29 b(with)g Fm(num)h Fn(extra)h(v)-5 b(ariables.)236 5156 y Fo(Return)35 b(v)-6 b(alue)p 236 5211 V 236 5323 a Fn(The)30 b(old)g(n)m(um)m(b)s(er)f(of)h(allo)s (cated)h(v)-5 b(ariables)29 b(or)h(a)h(negativ)m(e)g(error)f(co)s(de.) 236 5587 y Fo(See)35 b(also)p 236 5641 V 236 5754 a Fn(b)s(dd)p 397 5754 28 4 v 31 w(setv)-5 b(arn)m(um,)30 b(b)s(dd)p 1049 5754 V 31 w(ith)m(v)-5 b(ar,)30 b(b)s(dd)p 1524 5754 V 31 w(nith)m(v)-5 b(ar)1962 5989 y(34)p eop %%Page: 35 43 35 42 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(false)95 b Fn({)31 b(returns)e(the)i(constan)m(t)h (false)e(b)s(dd)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_false\(void\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(This)39 b(function)g(returns)g(the)h(constan)m(t) i(false)e(b)s(dd)e(and)h(can)i(freely)f(b)s(e)f(used)h(together)h(with) e(the)236 960 y Fm(bddtrue)29 b Fn(and)g Fm(bddfalse)f Fn(constan)m(ts.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(constan)m(t)i(false)e(b)s(dd)236 1653 y Fo(See)35 b(also)p 236 1707 V 236 1820 a Fn(b)s(dd)p 397 1820 28 4 v 31 w(true,)30 b(b)s(ddtrue,)f(b)s(ddfalse)p 236 2171 3544 12 v 236 2284 a Fo(b)s(dd)p 419 2284 32 4 v 38 w(\014le)p 592 2284 V 38 w(ho)s(ok)96 b Fn({)31 b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p 236 2338 3544 12 v 236 2543 a Fm(bddfilehandler)44 b (bdd_file_hook\(bddfilehand)o(ler)d(handler\))236 2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(A)23 b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(BDDs)i(is)e (used)f(to)j(con)m(v)m(ert)g(the)f(BDD)h(v)-5 b(ariable)22 b(n)m(um)m(b)s(er)236 3048 y(in)m(to)34 b(something)e(readable)h(b)m(y) h(the)f(end)g(user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin) m(t)i(a)i(string)e(name)236 3161 y(instead)e(of)g(the)h(n)m(um)m(b)s (er.)39 b(A)31 b(handler)d(could)i(lo)s(ok)g(lik)m(e)f(this:)236 3349 y Fm(void)47 b(printhandler\(FILE)c(*o,)k(int)g(var\))236 3462 y({)379 3575 y(extern)f(char)h(**names;)379 3687 y(fprintf\(o,)e("\045s",)i(names[var]\);)236 3800 y(})236 3988 y Fn(The)30 b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g (lik)m(e)f(this:)39 b Fm(bdd)p 2510 3988 29 4 v 34 w(file)p 2736 3988 V 33 w(hook\(printhandler\))p Fn(.)327 4101 y(No)33 b(default)e(handler)g(is)g(supplied.)43 b(The)32 b(argumen)m(t)h Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h (handler)e(is)236 4214 y(needed.)236 4477 y Fo(Return)35 b(v)-6 b(alue)p 236 4531 3544 5 v 236 4644 a Fn(The)30 b(old)g(handler)236 4907 y Fo(See)35 b(also)p 236 4962 V 236 5074 a Fn(b)s(dd)p 397 5074 28 4 v 31 w(prin)m(tset,)30 b(b)s(dd)p 946 5074 V 31 w(strm)p 1160 5074 V 32 w(ho)s(ok,)g(fdd)p 1569 5074 V 32 w(\014le)p 1718 5074 V 32 w(ho)s(ok)1962 5989 y(35)p eop %%Page: 36 44 36 43 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(forall)96 b Fn({)30 b(univ)m(ersal)f(quan)m (ti\014cation)h(of)g(v)-5 b(ariables)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_forall\(BDD)d(r,)j(BDD)g(var\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Remo)m(v)m(es)32 b(all)e(o)s(ccurences)g(in)f Fm(r)h Fn(of)h(v)-5 b(ariables)29 b(in)g(the)i(set)f Fm(var)g Fn(b)m(y)g(univ)m(ersal)f(quan)m (ti\014cation.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(quan)m(ti\014ed)f(BDD.)236 1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(exist,)30 b(b)s(dd)p 824 1707 V 31 w(unique,)f(b)s(dd)p 1332 1707 V 31 w(mak)m(eset)p 236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 4 v 38 w(freepair)95 b Fn({)31 b(frees)f(a)h(table)f(of)h(pairs)p 236 2225 3544 12 v 236 2430 a Fm(void)47 b(bdd_freepair\(bddPair)42 b(*pair\))236 2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a Fn(F)-8 b(rees)32 b(the)e(table)g(of)h(pairs)e Fm(pair)g Fn(that)i(has)f(b)s(een)g(allo)s(cated)g(b)m(y)g(a)h(call)f (to)h Fm(bdd)p 2992 2822 29 4 v 34 w(newpair)p Fn(.)236 3086 y Fo(See)k(also)p 236 3140 3544 5 v 236 3253 a Fn(b)s(dd)p 397 3253 28 4 v 31 w(replace,)c(b)s(dd)p 918 3253 V 30 w(newpair,)e(b)s(dd)p 1473 3253 V 31 w(setpair,)h(b)s(dd)p 1984 3253 V 31 w(resetpair)p 236 3604 3544 12 v 236 3717 a Fo(b)s(dd)p 419 3717 32 4 v 38 w(fullsatone)96 b Fn({)30 b(\014nds)f(one)i(satisfying)e(v)-5 b(ariable)29 b(assignmen)m(t)p 236 3771 3544 12 v 236 3976 a Fm(BDD)47 b(bdd_fullsatone\(BDD)c(r\))236 4201 y Fo(Description)p 236 4255 3544 5 v 236 4368 a Fn(Finds)29 b(a)i(BDD)h(with)e(exactly)h(one)g(v)-5 b(ariable)30 b(at)h(all)f(lev)m(els.)41 b(This)29 b(BDD)j(implies)c Fm(r)i Fn(and)g(is)g(not)h(false)236 4481 y(unless)e Fm(r)h Fn(is)f(false.)236 4744 y Fo(Return)35 b(v)-6 b(alue)p 236 4798 V 236 4911 a Fn(The)30 b(result)f(of)i(the)f(op)s (eration.)236 5174 y Fo(See)35 b(also)p 236 5228 V 236 5341 a Fn(b)s(dd)p 397 5341 28 4 v 31 w(allsat)30 b(b)s(dd)p 827 5341 V 31 w(satone,)h(b)s(dd)p 1322 5341 V 31 w(satoneset,)h(b)s (dd)p 1929 5341 V 31 w(satcoun)m(t,)g(b)s(dd)p 2508 5341 V 31 w(satcoun)m(tln)1962 5989 y(36)p eop %%Page: 37 45 37 44 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(gb)s(c)p 616 196 V 38 w(ho)s(ok)97 b Fn({)30 b(set)h(a)g(handler)d(for)j(garbage)g(collections)p 236 250 3544 12 v 236 455 a Fm(bddgbchandler)44 b (bdd_gbc_hook\(bddgbchandler)d(handler\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Whenev)m(er)26 b(a)f(garbage)h (collection)e(is)g(required,)g(a)h(test)h(is)e(done)g(to)i(see)f(if)f (a)h(handler)e(for)h(this)g(ev)m(en)m(t)i(is)236 960 y(supplied)g(b)m(y)j(the)g(user)f(and)g(if)g(suc)m(h)h(exists)g(then)f (it)h(is)f(called,)g(b)s(oth)h(b)s(efore)f(and)h(after)g(the)g(garbage) 236 1073 y(collection)38 b(tak)m(es)j(places.)65 b(This)36 b(is)i(indicated)f(b)m(y)i(an)f(in)m(teger)h(\015ag)g Fm(pre)f Fn(passed)g(to)h(the)g(handler,)236 1186 y(whic)m(h)29 b(will)f(b)s(e)i(one)g(b)s(efore)g(garbage)i(collection)e(and)g(zero)h (after)g(garbage)h(collection.)327 1298 y(This)f(function)h(sets)h(the) g(handler)e(to)j(b)s(e)e Fm(handler)p Fn(.)47 b(If)32 b(a)h Fm(NULL)f Fn(argumen)m(t)h(is)f(supplied)e(then)j(no)236 1411 y(calls)28 b(are)h(made)g(when)f(a)h(garbage)h(collection)e(tak)m (es)i(place.)40 b(The)29 b(argumen)m(t)g Fm(pre)f Fn(indicates)f(pre)h (vs.)236 1524 y(p)s(ost)36 b(garbage)i(collection)e(and)f(the)i (argumen)m(t)g Fm(stat)e Fn(con)m(tains)h(information)f(ab)s(out)h(the) g(garbage)236 1637 y(collection.)41 b(The)29 b(default)h(handler)f(is)g Fm(bdd)p 1738 1637 29 4 v 34 w(default)p 2108 1637 V 32 w(gbchandler)p Fn(.)327 1750 y(An)m(y)i(handler)d(should)g(b)s(e)i (de\014ned)f(lik)m(e)h(this:)236 1938 y Fm(void)47 b (my_gbc_handler\(int)c(pre,)j(bddGbcStat)f(*stat\))236 2051 y({)379 2164 y(...)236 2276 y(})236 2614 y Fo(Return)35 b(v)-6 b(alue)p 236 2669 3544 5 v 236 2781 a Fn(The)30 b(previous)f(handler)236 3045 y Fo(See)35 b(also)p 236 3099 V 236 3212 a Fn(b)s(dd)p 397 3212 28 4 v 31 w(resize)p 646 3212 V 33 w(ho)s(ok,)30 b(b)s(dd)p 1082 3212 V 31 w(reorder)p 1397 3212 V 32 w(ho)s(ok)p 236 3563 3544 12 v 236 3676 a Fo(b)s(dd)p 419 3676 32 4 v 38 w(getallo)s(cn)m(um)95 b Fn({)31 b(get)g(the)g(n)m(um)m(b)s(er)e(of)i(allo)s(cated)f(no)s(des) p 236 3730 3544 12 v 236 3935 a Fm(int)47 b(bdd_getallocnum\(void\))236 4160 y Fo(Description)p 236 4214 3544 5 v 236 4327 a Fn(Returns)40 b(the)h(n)m(um)m(b)s(er)e(of)i(no)s(des)e(curren)m(tly)h (allo)s(cated.)71 b(This)39 b(includes)f(b)s(oth)i(dead)g(and)g(activ)m (e)236 4440 y(no)s(des.)236 4703 y Fo(Return)35 b(v)-6 b(alue)p 236 4757 V 236 4870 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(no)s (des.)236 5133 y Fo(See)k(also)p 236 5187 V 236 5300 a Fn(b)s(dd)p 397 5300 28 4 v 31 w(getno)s(den)m(um,)30 b(b)s(dd)p 1124 5300 V 31 w(setmaxno)s(den)m(um)1962 5989 y(37)p eop %%Page: 38 46 38 45 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(getno)s(den)m(um)95 b Fn({)31 b(get)g(the)g(n)m(um)m(b) s(er)e(of)h(activ)m(e)i(no)s(des)e(in)f(use)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_getnodenum\(void\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)32 b(the)g(n)m(um)m(b)s(er)f(of)h(no)s(des)g(in)f(the)h(no)s(detable)g (that)g(are)h(curren)m(tly)e(in)g(use.)46 b(Note)34 b(that)f(dead)236 960 y(no)s(des)d(that)h(ha)m(v)m(e)g(not)g(b)s(een)f(reclaimed)f(y)m (et)i(b)m(y)g(a)f(garbage)i(collection)e(are)h(coun)m(ted)g(as)f(activ) m(e.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(no)s(des.)236 1653 y Fo(See)k(also)p 236 1707 V 236 1820 a Fn(b)s(dd)p 397 1820 28 4 v 31 w(getallo)s(cn)m(um,)30 b(b)s(dd)p 1119 1820 V 31 w(setmaxno)s(den)m(um)p 236 2171 3544 12 v 236 2284 a Fo(b)s(dd)p 419 2284 32 4 v 38 w(getreorder)p 933 2284 V 38 w(metho)s(d)94 b Fn({)31 b(F)-8 b(etc)m(h)32 b(the)f(curren)m(t)f(reorder)g(metho)s(d)p 236 2338 3544 12 v 236 2543 a Fm(int)47 b(bdd_getreorder_method\(voi)o(d\))236 2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(Returns)30 b(the)g(curren)m(t)g(reorder)g(metho)s(d)g(as)h (de\014ned)e(b)m(y)h Fm(bdd)p 2400 2935 29 4 v 34 w(autoreorder)p Fn(.)236 3198 y Fo(See)35 b(also)p 236 3253 3544 5 v 236 3366 a Fn(b)s(dd)p 397 3366 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 3366 V 31 w(getreorder)p 1358 3366 V 33 w(times)p 236 3717 3544 12 v 236 3829 a Fo(b)s(dd)p 419 3829 32 4 v 38 w(getreorder)p 933 3829 V 38 w(times)94 b Fn({)31 b(F)-8 b(etc)m(h)32 b(the)f(curren)m(t)f(n)m(um)m(b)s(er)f (of)i(allo)m(w)m(ed)f(reorderings)p 236 3884 3544 12 v 236 4089 a Fm(int)47 b(bdd_getreorder_times\(void)o(\))236 4313 y Fo(Description)p 236 4368 3544 5 v 236 4481 a Fn(Returns)40 b(the)i(curren)m(t)e(n)m(um)m(b)s(er)g(of)h(allo)m(w)m (ed)g(reorderings)f(left.)72 b(This)40 b(v)-5 b(alue)40 b(can)h(b)s(e)g(de\014ned)f(b)m(y)236 4594 y Fm(bdd)p 386 4594 29 4 v 34 w(autoreorder)p 948 4594 V 31 w(times)p Fn(.)236 4857 y Fo(See)35 b(also)p 236 4911 3544 5 v 236 5024 a Fn(b)s(dd)p 397 5024 28 4 v 31 w(reorder)p 712 5024 V 32 w(times,)30 b(b)s(dd)p 1168 5024 V 31 w(getreorder)p 1603 5024 V 34 w(metho)s(d)1962 5989 y(38)p eop %%Page: 39 47 39 46 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(high)96 b Fn({)31 b(gets)g(the)g(true)f(branc)m(h)g(of) g(a)h(b)s(dd)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_high\(BDD)e(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Gets)31 b(the)g(true)f(branc)m(h)g(of)h(the)f (b)s(dd)e Fm(r)p Fn(.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(b)s(dd)e(of)j(the)g(true)f (branc)m(h)236 1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(lo)m(w)p 236 2041 3544 12 v 236 2154 a Fo(b)s(dd)p 419 2154 32 4 v 38 w(imp)95 b Fn({)30 b(The)g(logical)g('implication')e(b)s(et)m(w)m (een)j(t)m(w)m(o)h(BDDs)p 236 2208 3544 12 v 236 2413 a Fm(BDD)47 b(bdd_imp\(BDD)e(l,)i(BDD)g(r\))236 2638 y Fo(Description)p 236 2692 3544 5 v 236 2805 a Fn(This)29 b(a)i(wrapp)s(er)d(that)j(calls)f Fm(bdd)p 1426 2805 29 4 v 33 w(apply\(l,r,bddop)p 2179 2805 V 30 w(imp\))p Fn(.)236 3068 y Fo(Return)35 b(v)-6 b(alue)p 236 3122 3544 5 v 236 3235 a Fn(The)30 b(logical)g('implication')e(of)j Fm(l)f Fn(and)g Fm(r)g Fn(\()p Fj(l)d Fc(\))e Fj(r)s Fn(\).)236 3498 y Fo(See)35 b(also)p 236 3552 V 236 3665 a Fn(b)s(dd)p 397 3665 28 4 v 31 w(apply)-8 b(,)30 b(b)s(dd)p 852 3665 V 30 w(biimp)1962 5989 y(39)p eop %%Page: 40 48 40 47 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(init)95 b Fn({)31 b(initializes)d(the)i(BDD)i(pac)m(k) -5 b(age)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_init\(int)e (nodesize,)g(int)i(cachesize\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(This)39 b(function)g(initiates)g(the)i(b) s(dd)d(pac)m(k)-5 b(age)43 b(and)c Ff(must)i Fn(b)s(e)f(called)g(b)s (efore)g(an)m(y)h(b)s(dd)d(op)s(erations)236 960 y(are)g(done.)60 b(The)37 b(argumen)m(t)g Fm(nodesize)e Fn(is)h(the)h(initial)e(n)m(um)m (b)s(er)g(of)j(no)s(des)e(in)f(the)j(no)s(detable)e(and)236 1073 y Fm(cachesize)28 b Fn(is)i(the)g(\014xed)g(size)h(of)f(the)h(in)m (ternal)e(cac)m(hes.)43 b(T)m(ypical)29 b(v)-5 b(alues)30 b(for)g Fm(nodesize)e Fn(are)j(10000)236 1186 y(no)s(des)h(for)h(small) f(test)h(examples)g(and)f(up)g(to)i(1000000)i(no)s(des)c(for)h(large)g (examples.)48 b(A)33 b(cac)m(he)i(size)236 1298 y(of)h(10000)i(seems)e (to)g(w)m(ork)g(go)s(o)s(d)g(ev)m(en)g(for)g(large)f(examples,)i(but)e (lesser)g(v)-5 b(alues)35 b(should)f(do)h(it)h(for)236 1411 y(smaller)29 b(examples.)327 1524 y(The)c(n)m(um)m(b)s(er)f(of)h (cac)m(he)i(en)m(tries)e(can)h(also)f(b)s(e)g(set)h(to)g(dep)s(end)d (on)j(the)f(size)g(of)h(the)f(no)s(detable)g(using)236 1637 y(a)31 b(call)f(to)h Fm(bdd)p 740 1637 29 4 v 33 w(setcacheratio)p Fn(.)327 1750 y(The)36 b(initial)d(n)m(um)m(b)s(er)i (of)i(no)s(des)e(is)g(not)i(critical)e(for)h(an)m(y)h(b)s(dd)d(op)s (eration)h(as)i(the)f(table)h(will)c(b)s(e)236 1863 y(resized)g(whenev) m(er)g(there)g(are)h(to)f(few)g(no)s(des)g(left)f(after)i(a)g(garbage)g (collection.)48 b(But)34 b(it)e(do)s(es)h(ha)m(v)m(e)236 1976 y(some)e(impact)f(on)g(the)h(e\016cency)g(of)g(the)f(op)s (erations.)236 2239 y Fo(Return)35 b(v)-6 b(alue)p 236 2293 3544 5 v 236 2406 a Fn(If)30 b(no)g(errors)g(o)s(ccur)g(then)h(0)f (is)g(returned,)f(otherwise)h(a)h(negativ)m(e)g(error)f(co)s(de.)236 2669 y Fo(See)35 b(also)p 236 2724 V 236 2837 a Fn(b)s(dd)p 397 2837 28 4 v 31 w(done,)30 b(b)s(dd)p 826 2837 V 31 w(resize)p 1075 2837 V 33 w(ho)s(ok)p 236 3187 3544 12 v 236 3300 a Fo(b)s(dd)p 419 3300 32 4 v 38 w(isrunning)96 b Fn({)31 b(test)g(whether)f(the)h(pac)m(k)-5 b(age)32 b(is)e(started)g(or)h(not)p 236 3355 3544 12 v 236 3559 a Fm(void)47 b(bdd_isrunning\(void\))236 3784 y Fo(Description)p 236 3839 3544 5 v 236 3952 a Fn(This)29 b(function)g(tests)i(the)g(in)m (ternal)e(state)i(of)g(the)f(pac)m(k)-5 b(age)33 b(and)d(returns)f(a)i (status.)236 4215 y Fo(Return)k(v)-6 b(alue)p 236 4269 V 236 4382 a Fn(1)31 b(\(true\))g(if)e(the)i(pac)m(k)-5 b(age)32 b(has)e(b)s(een)g(started,)h(otherwise)f(0.)236 4645 y Fo(See)35 b(also)p 236 4699 V 236 4812 a Fn(b)s(dd)p 397 4812 28 4 v 31 w(init,)29 b(b)s(dd)p 776 4812 V 31 w(done)1962 5989 y(40)p eop %%Page: 41 49 41 48 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(ite)95 b Fn({)31 b(if-then-else)e(op)s(erator)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_ite\(BDD)e(f,)i(BDD)g(g,)g (BDD)g(h\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Calculates)31 b(the)h(BDD)g(for)f(the)h(expression)e(\() p Fj(f)g Fc(^)21 b Fj(g)s Fn(\))g Fc(_)g Fn(\()p Fc(:)p Fj(f)30 b Fc(^)20 b Fj(h)p Fn(\))32 b(more)g(e\016cien)m(tly)f(than)g (doing)f(the)236 960 y(three)39 b(op)s(erations)e(separately)-8 b(.)66 b Fm(bdd)p 1562 960 29 4 v 33 w(ite)38 b Fn(can)g(also)g(b)s(e)g (used)g(for)g(conjunction,)h(disjunction)d(and)236 1073 y(an)m(y)31 b(other)g(b)s(o)s(olean)e(op)s(erator,)i(but)f(is)f(not)i (as)f(e\016cien)m(t)h(for)f(the)h(binary)d(and)i(unary)f(op)s (erations.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 3544 5 v 236 1503 a Fn(The)30 b(BDD)i(for)e(\()p Fj(f)g Fc(^)19 b Fj(g)s Fn(\))j Fc(_)d Fn(\()p Fc(:)p Fj(f)30 b Fc(^)20 b Fj(h)p Fn(\))236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(apply)p 236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 4 v 38 w(ith)m(v)-6 b(ar)96 b Fn({)30 b(returns)f(a)i(b)s (dd)e(represen)m(ting)g(the)i(I'th)f(v)-5 b(ariable)p 236 2451 3544 12 v 236 2656 a Fm(BDD)47 b(bdd_ithvar\(int)d(var\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(This)26 b(function)h(is)g(used)g(to)i(get)g(a)f(b)s(dd)e(represen)m (ting)i(the)g(I'th)g(v)-5 b(ariable)26 b(\(one)j(no)s(de)e(with)g(the)h (c)m(hilds)236 3161 y(true)38 b(and)f(false\).)62 b(The)37 b(requested)g(v)-5 b(ariable)37 b(m)m(ust)g(b)s(e)g(in)f(the)i(range)g (de\014ne)f(b)m(y)g Fm(bdd)p 3322 3161 29 4 v 34 w(setvarnum)236 3274 y Fn(starting)e(with)f(0)i(b)s(eing)e(the)i(\014rst.)55 b(F)-8 b(or)36 b(ease)g(of)g(use)f(then)g(the)g(b)s(dd)f(returned)g (from)h Fm(bdd)p 3466 3274 V 33 w(ithvar)236 3387 y Fn(do)s(es)i(not)g (ha)m(v)m(e)i(to)f(b)s(e)e(referenced)h(coun)m(ted)h(with)e(a)h(call)g (to)h Fm(bdd)p 2606 3387 V 33 w(addref)p Fn(.)60 b(The)36 b(initial)f(v)-5 b(ariable)236 3500 y(order)29 b(is)f(de\014ned)f(b)m (y)i(the)g(the)g(index)f Fm(var)g Fn(that)h(also)g(de\014nes)f(the)h(p) s(osition)e(in)h(the)h(v)-5 b(ariable)28 b(order)g({)236 3613 y(v)-5 b(ariables)29 b(with)g(lo)m(w)m(er)i(indecies)e(are)i(b)s (efore)f(those)g(with)g(higher)f(indecies.)236 3876 y Fo(Return)35 b(v)-6 b(alue)p 236 3930 3544 5 v 236 4043 a Fn(The)30 b(I'th)g(v)-5 b(ariable)29 b(on)i(succes,)g(otherwise)f (the)g(constan)m(t)i(false)e(b)s(dd)236 4306 y Fo(See)35 b(also)p 236 4360 V 236 4473 a Fn(b)s(dd)p 397 4473 28 4 v 31 w(setv)-5 b(arn)m(um,)30 b(b)s(dd)p 1049 4473 V 31 w(nith)m(v)-5 b(ar,)30 b(b)s(ddtrue,)e(b)s(ddfalse)1962 5989 y(41)p eop %%Page: 42 50 42 49 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(lev)m(el2v)-6 b(ar)96 b Fn({)31 b(F)-8 b(etc)m(h)32 b(the)f(v)-5 b(ariable)29 b(n)m(um)m(b)s(er)g(of)h(a)h(sp) s(eci\014c)e(lev)m(el)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_level2var\(int)c(level\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)30 b(the)g(v)-5 b(ariable)29 b(placed)h(at)h(p)s(osition)e Fm(level)g Fn(in)g(the)h(curren)m(t)h(v)-5 b(ariable)29 b(order.)236 1110 y Fo(See)35 b(also)p 236 1164 V 236 1277 a Fn(b)s(dd)p 397 1277 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 1277 V 31 w(v)-5 b(ar2lev)m(el)p 236 1628 3544 12 v 236 1741 a Fo(b)s(dd)p 419 1741 32 4 v 38 w(load)96 b Fn({)30 b(loads)g(a)h(BDD)h(from)d(a)i(\014le)p 236 1795 3544 12 v 236 2000 a Fm(int)47 b(bdd_fnload\(char)d(*fname,)i(BDD)g(*r\))236 2113 y(int)h(bdd_load\(FILE)d(*ifile,)i(BDD)h(*r\))236 2338 y Fo(Description)p 236 2392 3544 5 v 236 2505 a Fn(Loads)37 b(a)f(BDD)i(from)e(a)g(\014le)g(in)m(to)g(the)g(BDD)i(p)s (oin)m(ted)d(to)i(b)m(y)f Fm(r)p Fn(.)59 b(The)35 b(\014le)h(can)g (either)g(b)s(e)g(the)g(\014le)236 2618 y Fm(ifile)e Fn(whic)m(h)h(m)m(ust)g(b)s(e)h(op)s(ened)e(for)i(reading)f(or)g(the)h (\014le)f(named)g Fm(fname)g Fn(whic)m(h)f(will)f(b)s(e)i(op)s(ened)236 2731 y(automatically)30 b(for)h(reading.)327 2844 y(The)k(input)e (\014le)h(format)h(consists)f(of)h(in)m(tegers)g(arranged)g(in)f(the)h (follo)m(wing)e(manner.)54 b(First)34 b(the)236 2957 y(n)m(um)m(b)s(er)d(of)h(no)s(des)g Fj(N)42 b Fn(used)31 b(b)m(y)h(the)g(BDD)h(and)f(then)g(the)g(n)m(um)m(b)s(er)f(of)h(v)-5 b(ariables)31 b Fj(V)52 b Fn(allo)s(cated)32 b(and)236 3070 y(the)j(v)-5 b(ariable)34 b(ordering)g(in)f(use)i(at)g(the)g(time) g(the)g(BDD)h(w)m(as)f(sa)m(v)m(ed.)56 b(If)34 b Fj(N)45 b Fn(and)34 b Fj(V)55 b Fn(are)36 b(b)s(oth)e(zero)236 3182 y(then)27 b(the)g(BDD)h(is)e(either)g(the)h(constan)m(t)h(true)f (or)g(false)f(BDD,)i(indicated)e(b)m(y)h(a)g(1)g(or)g(a)g(0)g(as)g(the) g(next)236 3295 y(in)m(teger.)327 3408 y(In)e(an)m(y)h(other)g(case)h (the)e(next)h Fj(N)36 b Fn(sets)26 b(of)f(4)h(in)m(tegers)g(will)d (describ)s(e)h(the)i(no)s(des)f(used)g(b)m(y)g(the)h(BDD.)236 3521 y(Eac)m(h)h(set)f(consists)g(of)g(\014rst)f(the)h(no)s(de)f(n)m (um)m(b)s(er,)h(then)g(the)g(v)-5 b(ariable)25 b(n)m(um)m(b)s(er)f(and) i(then)f(the)h(lo)m(w)g(and)236 3634 y(high)j(no)s(des.)327 3747 y(The)36 b(no)s(des)f Ff(must)i Fn(b)s(e)e(sa)m(v)m(ed)i(in)e(a)i (order)e(suc)m(h)h(that)h(an)m(y)f(lo)m(w)g(or)g(high)f(no)s(de)g(m)m (ust)h(b)s(e)g(de\014ned)236 3860 y(b)s(efore)30 b(it)g(is)g(men)m (tioned.)236 4123 y Fo(Return)35 b(v)-6 b(alue)p 236 4177 V 236 4290 a Fn(Zero)31 b(on)f(succes,)h(otherwise)f(an)g(error)g (co)s(de)g(from)g Fm(bdd.h)p Fn(.)236 4553 y Fo(See)35 b(also)p 236 4608 V 236 4721 a Fn(b)s(dd)p 397 4721 28 4 v 31 w(sa)m(v)m(e)1962 5989 y(42)p eop %%Page: 43 51 43 50 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(lo)m(w)95 b Fn({)31 b(gets)h(the)e(false)g(branc)m(h)g (of)g(a)h(b)s(dd)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_low\(BDD)e(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Gets)31 b(the)g(false)f(branc)m(h)g(of)g(the)h(b) s(dd)d Fm(r)p Fn(.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(b)s(dd)e(of)j(the)g(false)f(branc)m (h)236 1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(high)p 236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 4 v 38 w(mak)m(eset)94 b Fn({)31 b(builds)c(a)k(BDD)h(v)-5 b(ariable)29 b(set)i(from)f(an)g (in)m(teger)h(arra)m(y)p 236 2225 3544 12 v 236 2430 a Fm(BDD)47 b(bdd_makeset\(int)d(*v,)j(int)g(n\))236 2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a Fn(Reads)23 b(a)f(set)h(of)g(v)-5 b(ariable)21 b(n)m(um)m(b)s(ers)g (from)h(the)g(in)m(teger)h(arra)m(y)g Fm(v)f Fn(whic)m(h)f(m)m(ust)h (hold)f(exactly)i Fm(n)f Fn(in)m(tegers)236 2935 y(and)30 b(then)g(builds)d(a)k(BDD)h(represen)m(ting)d(the)i(v)-5 b(ariable)29 b(set.)327 3048 y(The)41 b(BDD)i(v)-5 b(ariable)40 b(set)i(is)f(represen)m(ted)h(as)f(the)h(conjunction)f(of)h(all)e(the)i (v)-5 b(ariables)40 b(in)g(their)236 3161 y(p)s(ositiv)m(e)32 b(form)g(and)f(ma)m(y)j(just)d(as)i(w)m(ell)f(b)s(e)f(made)i(that)g(w)m (a)m(y)g(b)m(y)g(the)f(user.)47 b(The)32 b(user)f(should)g(k)m(eep)236 3274 y(a)g(reference)g(to)g(the)f(returned)g(BDD)h(instead)f(of)g (building)d(it)j(ev)m(ery)h(time)f(the)h(set)g(is)e(needed.)236 3537 y Fo(Return)35 b(v)-6 b(alue)p 236 3591 V 236 3704 a Fn(A)31 b(BDD)g(v)-5 b(ariable)29 b(set.)236 3968 y Fo(See)35 b(also)p 236 4022 V 236 4135 a Fn(b)s(dd)p 397 4135 28 4 v 31 w(scanset)1962 5989 y(43)p eop %%Page: 44 52 44 51 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(newpair)95 b Fn({)31 b(creates)g(an)g(empt)m(y)g(v)-5 b(ariable)29 b(pair)g(table)p 236 250 3544 12 v 236 455 a Fm(bddPair)46 b(*bdd_newpair\(void\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(V)-8 b(ariable)32 b(pairs)g(of)h(the)g(t) m(yp)s(e)g Fm(bddPair)d Fn(are)k(used)e(in)f Fm(bdd)p 2284 847 29 4 v 34 w(replace)f Fn(to)k(de\014ne)e(whic)m(h)f(v)-5 b(ariables)32 b(to)236 960 y(replace)g(with)e(other)i(v)-5 b(ariables.)43 b(This)30 b(function)g(allo)s(cates)i(suc)m(h)f(an)g (empt)m(y)h(table.)45 b(The)31 b(table)g(can)236 1073 y(b)s(e)f(freed)g(b)m(y)g(a)h(call)f(to)h Ff(b)-5 b(dd)p 1200 1073 28 4 v 34 w(fr)g(e)g(ep)g(air)p Fn(.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 3544 5 v 236 1503 a Fn(Returns)30 b(a)g(new)g(table)h(of)f(pairs.)236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(freepair,)30 b(b)s(dd)p 941 1933 V 30 w(replace,)h(b)s(dd)p 1461 1933 V 31 w(setpair,)f(b)s(dd)p 1972 1933 V 30 w(setpairs)p 236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 4 v 38 w(nith)m(v)-6 b(ar)96 b Fn({)30 b(returns)g(a)g(b)s(dd)f(represen)m(ting)g(the)i(negation)g (of)f(the)h(I'th)f(v)-5 b(ariable)p 236 2451 3544 12 v 236 2656 a Fm(BDD)47 b(bdd_nithvar\(int)d(var\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(This)26 b(function)g(is)g(used)h(to)h(get)h(a)e(b)s(dd)f(represen)m (ting)g(the)i(negation)g(of)f(the)h(I'th)f(v)-5 b(ariable)26 b(\(one)i(no)s(de)236 3161 y(with)37 b(the)h(c)m(hilds)e(false)h(and)g (true\).)63 b(The)38 b(requested)f(v)-5 b(ariable)37 b(m)m(ust)h(b)s(e)f(in)f(the)i(range)h(de\014ne)e(b)m(y)236 3274 y Fm(bdd)p 386 3274 29 4 v 34 w(setvarnum)24 b Fn(starting)i(with) f(0)h(b)s(eing)f(the)i(\014rst.)38 b(F)-8 b(or)27 b(ease)h(of)e(use)g (then)g(the)h(b)s(dd)d(returned)h(from)236 3387 y Fm(bdd)p 386 3387 V 34 w(nithvar)j Fn(do)s(es)i(not)h(ha)m(v)m(e)g(to)h(b)s(e)d (referenced)i(coun)m(ted)f(with)g(a)g(call)g(to)h Fm(bdd)p 3073 3387 V 34 w(addref)p Fn(.)236 3650 y Fo(Return)k(v)-6 b(alue)p 236 3704 3544 5 v 236 3817 a Fn(The)30 b(negated)h(I'th)g(v)-5 b(ariable)29 b(on)h(succes,)h(otherwise)f(the)g(constan)m(t)i(false)e (b)s(dd)236 4080 y Fo(See)35 b(also)p 236 4135 V 236 4248 a Fn(b)s(dd)p 397 4248 28 4 v 31 w(setv)-5 b(arn)m(um,)30 b(b)s(dd)p 1049 4248 V 31 w(ith)m(v)-5 b(ar,)30 b(b)s(ddtrue,)f(b)s (ddfalse)1962 5989 y(44)p eop %%Page: 45 53 45 52 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(no)s(decoun)m(t)96 b Fn({)31 b(coun)m(ts)g(the)g(n)m (um)m(b)s(er)e(of)h(no)s(des)g(used)f(for)h(a)h(BDD)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_nodecount\(BDD)c(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(T)-8 b(ra)m(v)m(erses)32 b(the)e(BDD)i(and)e(coun)m(ts)h(all)e(distinct)g (no)s(des)g(that)i(are)g(used)e(for)i(the)f(BDD.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(no)s(des.)236 1540 y Fo(See)k(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(pathcoun)m(t,)c(b)s(dd)p 1041 1707 V 31 w(satcoun)m(t,)h(b)s(dd)p 1620 1707 V 31 w(ano)s(decoun)m(t)p 236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 4 v 38 w(not)95 b Fn({)31 b(negates)h(a)f(b)s(dd)p 236 2225 3544 12 v 236 2430 a Fm(BDD)47 b(bdd_not\(BDD)e(r\))236 2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a Fn(Negates)38 b(the)d(BDD)i Fm(r)e Fn(b)m(y)g(exc)m(hanging)h(all)e (references)h(to)h(the)g(zero-terminal)f(with)f(references)i(to)236 2935 y(the)31 b(one-terminal)e(and)h(vice)g(v)m(ersa.)236 3198 y Fo(Return)35 b(v)-6 b(alue)p 236 3253 V 236 3366 a Fn(The)30 b(negated)h(b)s(dd.)p 236 3717 3544 12 v 236 3829 a Fo(b)s(dd)p 419 3829 32 4 v 38 w(or)96 b Fn({)31 b(The)e(logical)h('or')h(of)g(t)m(w)m(o)g(BDDs)p 236 3884 3544 12 v 236 4089 a Fm(BDD)47 b(bdd_or\(BDD)e(l,)i(BDD)g(r\))236 4313 y Fo(Description)p 236 4368 3544 5 v 236 4481 a Fn(This)29 b(a)i(wrapp)s(er)d(that)j(calls)f Fm(bdd)p 1426 4481 29 4 v 33 w(apply\(l,r,bddop)p 2179 4481 V 30 w(or\))p Fn(.)236 4744 y Fo(Return)35 b(v)-6 b(alue)p 236 4798 3544 5 v 236 4911 a Fn(The)30 b(logical)g('or')h(of)f Fm(l)g Fn(and)g Fm(r)p Fn(.)236 5174 y Fo(See)35 b(also)p 236 5228 V 236 5341 a Fn(b)s(dd)p 397 5341 28 4 v 31 w(apply)-8 b(,)30 b(b)s(dd)p 852 5341 V 30 w(xor,)h(b)s(dd)p 1223 5341 V 31 w(and)1962 5989 y(45)p eop %%Page: 46 54 46 53 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(pathcoun)m(t)96 b Fn({)31 b(coun)m(t)g(the)f(n)m(um)m (b)s(er)f(of)i(paths)f(leading)f(to)i(the)f(true)h(terminal)p 236 250 3544 12 v 236 455 a Fm(double)46 b(bdd_pathcount\(BDD)d(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Coun)m(ts)30 b(the)h(n)m(um)m(b)s(er)e(of)h(paths)g(from)g(the)h(ro)s(ot)g(no)s(de)e Fm(r)h Fn(leading)f(to)j(the)e(terminal)f(true)h(no)s(de.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(paths)236 1540 y Fo(See)k(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(no)s(decoun)m(t,)c(b)s(dd)p 1049 1707 V 30 w(satcoun)m(t)p 236 2058 3544 12 v 236 2171 a Fo(b)s(dd)p 419 2171 32 4 v 38 w(prin)m(tall)95 b Fn({)31 b(prin)m(ts)e(all)g(used) h(en)m(tries)g(in)f(the)i(no)s(de)e(table)p 236 2225 3544 12 v 236 2430 a Fm(void)47 b(bdd_printall\(void\))236 2543 y(void)g(bdd_fprintall\(FILE*)42 b(ofile\))236 2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(Prin)m(ts)31 b(to)h(either)f(stdout)h(or)g(the)g(\014le)e Fm(ofile)h Fn(all)f(the)i(used)f(en)m(tries)g(in)g(the)h(main)e(no)s(de)h(table.) 45 b(The)236 3048 y(format)31 b(is:)327 3251 y Fm([Nodenum])45 b(Var/level)h(Low)h(High)236 3457 y Fn(Where)34 b Fm(Nodenum)e Fn(is)h(the)i(p)s(osition)d(in)g(the)i(no)s(de)g(table)g(and)f(lev)m (el)h(is)f(the)h(p)s(osition)e(in)h(the)h(curren)m(t)236 3570 y(v)-5 b(ariable)29 b(order.)236 3833 y Fo(See)35 b(also)p 236 3887 V 236 4000 a Fn(b)s(dd)p 397 4000 28 4 v 31 w(prin)m(ttable,)29 b(b)s(dd)p 1031 4000 V 31 w(prin)m(tset,)h(b)s(dd)p 1580 4000 V 31 w(prin)m(tdot)1962 5989 y(46)p eop %%Page: 47 55 47 54 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(prin)m(tdot)95 b Fn({)31 b(prin)m(ts)e(a)i(description) d(of)j(a)g(BDD)g(in)e(DOT)h(format)p 236 250 3544 12 v 236 455 a Fm(void)47 b(bdd_printdot\(BDD)c(r\))236 568 y(int)k(bdd_fnprintdot\(char*)42 b(fname,)k(BDD)h(r\))236 681 y(void)g(bdd_fprintdot\(FILE*)42 b(ofile,)k(BDD)h(r\))236 906 y Fo(Description)p 236 960 3544 5 v 236 1073 a Fn(Prin)m(ts)26 b(a)h(BDD)h(in)d(a)j(format)f(suitable)e(for)i(use)f(with)g(the)h (graph)f(dra)m(wing)f(program)i(DOT)f(to)i(either)236 1186 y(stdout,)h(a)f(designated)f(\014le)g Fm(ofile)f Fn(or)h(the)h(\014le)f(named)g(b)m(y)g Fm(fname)p Fn(.)39 b(In)27 b(the)h(last)f(case)i(the)e(\014le)g(will)e(b)s(e)236 1298 y(op)s(ened)30 b(for)g(writing,)f(an)m(y)h(previous)f(con)m(ten)m (ts)j(destro)m(y)m(ed)g(and)d(then)h(closed)h(again.)236 1562 y Fo(See)k(also)p 236 1616 V 236 1729 a Fn(b)s(dd)p 397 1729 28 4 v 31 w(prin)m(tall,)28 b(b)s(dd)p 930 1729 V 31 w(prin)m(ttable,)h(b)s(dd)p 1564 1729 V 31 w(prin)m(tset)p 236 2080 3544 12 v 236 2193 a Fo(b)s(dd)p 419 2193 32 4 v 38 w(prin)m(torder)96 b Fn({)31 b(prin)m(ts)d(the)j(curren)m(t)f (order)p 236 2247 3544 12 v 236 2452 a Fm(void)47 b (bdd_printorder\(void\))236 2565 y(bdd_fprint_order\(FILE)42 b(*f\))236 2790 y Fo(Description)p 236 2844 3544 5 v 236 2957 a Fn(Prin)m(ts)28 b(an)i(inden)m(ted)e(list)g(of)h(the)h(v)-5 b(ariable)28 b(blo)s(c)m(ks,)h(sho)m(wing)f(the)i(top)f(most)h(blo)s(c) m(ks)f(to)h(the)f(left)g(and)236 3070 y(the)i(lo)m(w)m(er)f(blo)s(c)m (ks)g(to)h(the)g(righ)m(t.)40 b(Example:)332 3370 y Fm(2{)475 3483 y(0)475 3596 y(1)332 3709 y(2})332 3822 y(3)332 3935 y(4)236 4122 y Fn(This)d(sho)m(ws)i(5)h(v)-5 b(ariable)37 b(blo)s(c)m(ks.)66 b(The)39 b(\014rst)f(one)h(added)g(is)f(blo)s(c)m(k) g(zero,)k(whic)m(h)c(is)g(on)h(the)g(same)236 4235 y(lev)m(el)d(as)h (blo)s(c)m(k)e(one.)59 b(These)36 b(t)m(w)m(o)i(blo)s(c)m(ks)d(are)i (then)f(sub-blo)s(c)m(ks)f(of)h(blo)s(c)m(k)g(t)m(w)m(o)h(and)f(blo)s (c)m(k)g(t)m(w)m(o)h(is)236 4348 y(on)31 b(the)g(same)g(lev)m(el)f(as)h (blo)s(c)m(k)g(three)g(and)f(four.)41 b(The)30 b(n)m(um)m(b)s(ers)f (are)j(the)f(iden)m(ti\014ers)d(returned)i(from)236 4461 y Fm(bdd)p 386 4461 29 4 v 34 w(addvarblock)p Fn(.)37 b(The)30 b(blo)s(c)m(k)g(lev)m(els)g(dep)s(ends)f(on)h(the)g(v)-5 b(ariables)29 b(included)f(in)h(the)i(blo)s(c)m(ks.)236 4724 y Fo(See)k(also)p 236 4778 3544 5 v 236 4891 a Fn(b)s(dd)p 397 4891 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 4891 V 31 w(addv)-5 b(arblo)s(c)m(k)1962 5989 y(47)p eop %%Page: 48 56 48 55 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(prin)m(tset)95 b Fn({)31 b(prin)m(ts)e(the)h(set)h(of)g (truth)f(assignmen)m(ts)g(sp)s(eci\014ed)e(b)m(y)j(a)f(BDD)p 236 250 3544 12 v 236 455 a Fm(bdd_printset\(BDD)44 b(r\))236 568 y(bdd_fprintset\(FILE*)f(ofile,)j(BDD)h(r\))236 793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Prin)m(ts)29 b(all)h(the)g(truth)g(assignmen)m(ts)g(for)g Fm(r)g Fn(that)h(w)m(ould) e(yield)g(it)h(true.)40 b(The)30 b(format)h(is:)327 1128 y Fm(<)48 b Fj(x)475 1142 y Fh(1)p Fi(;)p Fh(1)594 1128 y Fn(:)26 b Fj(c)684 1142 y Fh(1)p Fi(;)p Fh(1)778 1128 y Fj(;)15 b(:)g(:)g(:)i(;)e(x)1032 1142 y Fh(1)p Fi(;n)1130 1151 y Fa(1)1194 1128 y Fn(:)25 b Fj(c)1283 1142 y Fh(1)p Fi(;n)1381 1151 y Fa(1)1468 1128 y Fm(>)327 1240 y(<)48 b Fj(x)475 1254 y Fh(2)p Fi(;)p Fh(1)594 1240 y Fn(:)26 b Fj(c)684 1254 y Fh(2)p Fi(;)p Fh(1)778 1240 y Fj(;)15 b(:)g(:)g(:)i(;)e(x)1032 1254 y Fh(2)p Fi(;n)1130 1263 y Fa(2)1194 1240 y Fn(:)25 b Fj(c)1283 1254 y Fh(2)p Fi(;n)1381 1263 y Fa(2)1468 1240 y Fm(>)327 1353 y Fj(:)15 b(:)g(:)327 1466 y Fm(<)48 b Fj(x)475 1480 y Fi(N)s(;)p Fh(1)618 1466 y Fn(:)26 b Fj(c)708 1480 y Fi(N)s(;)p Fh(1)826 1466 y Fj(;)15 b(:)g(:)g(:)i(;)e(x)1080 1480 y Fi(N)s(;n)1202 1489 y Fa(3)1266 1466 y Fn(:)25 b Fj(c)1355 1480 y Fi(N)s(;n)1477 1489 y Fa(3)1564 1466 y Fm(>)236 1661 y Fn(Where)i(the)g Fj(x)p Fn('s)g(are)g(v)-5 b(ariable)25 b(n)m(um)m(b)s(ers)g(\(and)i(the)f(p)s(osition)f(in)g(the)i(curren)m(t) g(order\))f(and)g(the)h Fj(c)p Fn('s)g(are)236 1774 y(the)f(p)s (ossible)e(assignmen)m(ts)i(to)h(these.)39 b(Eac)m(h)27 b(set)g(of)f(brac)m(k)m(ets)i(designates)e(one)g(p)s(ossible)e (assignmen)m(t)236 1887 y(to)31 b(the)e(set)i(of)e(v)-5 b(ariables)29 b(that)h(mak)m(e)h(up)d(the)i(BDD.)h(All)d(v)-5 b(ariables)29 b(not)h(sho)m(wn)f(are)h(don't)f(cares.)41 b(It)236 2000 y(is)29 b(p)s(ossible)e(to)k(sp)s(ecify)d(a)i(callbac)m (k)g(handler)e(for)h(prin)m(ting)f(of)h(the)h(v)-5 b(ariables)29 b(using)f Fm(bdd)p 3336 2000 29 4 v 33 w(file)p 3561 2000 V 34 w(hook)236 2113 y Fn(or)j Fm(bdd)p 498 2113 V 33 w(strm)p 723 2113 V 33 w(hook)p Fn(.)236 2376 y Fo(See)k(also)p 236 2430 3544 5 v 236 2543 a Fn(b)s(dd)p 397 2543 28 4 v 31 w(prin)m(tall,)28 b(b)s(dd)p 930 2543 V 31 w(prin)m(ttable,)h(b)s(dd)p 1564 2543 V 31 w(prin)m(tdot,)h(b)s (dd)p 2133 2543 V 30 w(\014le)p 2280 2543 V 32 w(ho)s(ok,)h(b)s(dd)p 2716 2543 V 30 w(strm)p 2929 2543 V 33 w(ho)s(ok)p 236 2894 3544 12 v 236 3007 a Fo(b)s(dd)p 419 3007 32 4 v 38 w(prin)m(tstat)95 b Fn({)31 b(prin)m(t)e(cac)m(he)j(statistics)p 236 3061 3544 12 v 236 3266 a Fm(void)47 b(bdd_printstat\(void\))236 3379 y(void)g(bdd_fprintstat\(FILE)42 b(*ofile\))236 3604 y Fo(Description)p 236 3658 3544 5 v 236 3771 a Fn(Prin)m(ts)26 b(information)e(ab)s(out)j(the)f(cac)m(he)i(p)s (erformance)e(on)g(standard)g(output)g(\(or)h(the)g(supplied)c (\014le\).)236 3884 y(The)28 b(information)f(con)m(tains)i(the)g(n)m (um)m(b)s(er)e(of)i(accesses)h(to)f(the)g(unique)d(no)s(de)i(table,)h (the)g(n)m(um)m(b)s(er)e(of)236 3997 y(times)33 b(a)h(no)s(de)f(w)m(as) h(\(not\))g(found)f(there)g(and)g(ho)m(w)h(man)m(y)f(times)g(a)h(hash)f (c)m(hain)g(had)g(to)h(tra)m(v)m(ersed.)236 4110 y(Hit)c(and)g(miss)f (coun)m(t)i(is)f(also)g(giv)m(en)g(for)g(the)h(op)s(erator)g(cac)m (hes.)236 4373 y Fo(See)k(also)p 236 4427 V 236 4540 a Fn(b)s(ddCac)m(heStat,)30 b(b)s(dd)p 1013 4540 28 4 v 31 w(cac)m(hestats)1962 5989 y(48)p eop %%Page: 49 57 49 56 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(prin)m(ttable)95 b Fn({)31 b(prin)m(ts)e(the)h(no)s(de) g(table)g(en)m(tries)g(used)g(b)m(y)g(a)h(BDD)p 236 250 3544 12 v 236 455 a Fm(void)47 b(bdd_printtable\(BDD)c(r\))236 568 y(void)k(bdd_fprinttable\(FILE*)42 b(ofile,)k(BDD)h(r\))236 793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Prin)m(ts)30 b(to)j(either)d(stdout)i(or)f(the)h(\014le)e Fm(ofile)g Fn(all)g(the)i(en)m(tries)f(in)f(the)i(main)e(no)s(de)g(table)i(used)e (b)m(y)i Fm(r)p Fn(.)236 1073 y(The)e(format)h(is:)327 1276 y Fm([Nodenum])45 b(Var/level)h(:)95 b(Low)47 b(High)236 1481 y Fn(Where)34 b Fm(Nodenum)e Fn(is)h(the)i(p)s(osition)d(in)g(the) i(no)s(de)g(table)g(and)f(lev)m(el)h(is)f(the)h(p)s(osition)e(in)h(the) h(curren)m(t)236 1594 y(v)-5 b(ariable)29 b(order.)236 1857 y Fo(See)35 b(also)p 236 1911 V 236 2024 a Fn(b)s(dd)p 397 2024 28 4 v 31 w(prin)m(tall,)28 b(b)s(dd)p 930 2024 V 31 w(prin)m(tset,)i(b)s(dd)p 1479 2024 V 31 w(prin)m(tdot)p 236 2375 3544 12 v 236 2488 a Fo(b)s(dd)p 419 2488 32 4 v 38 w(relpro)s(d)96 b Fn({)31 b(relational)e(pro)s(duct)p 236 2542 3544 12 v 236 2747 a Fm(#define)46 b(bdd_relprod\(a,b,var\))c (bdd_appex\(a,b,bddop_and,v)o(ar\))236 2972 y Fo(Description)p 236 3026 3544 5 v 236 3139 a Fn(Calculates)22 b(the)g(relational)f(pro) s(duct)g(of)h Fm(a)g Fn(and)f Fm(b)h Fn(as)g Fm(a)47 b(AND)g(b)22 b Fn(with)f(the)h(v)-5 b(ariables)21 b(in)f Fm(var)i Fn(quan)m(ti\014ed)236 3252 y(out)31 b(afterw)m(ards.)236 3515 y Fo(Return)k(v)-6 b(alue)p 236 3570 V 236 3683 a Fn(The)30 b(relational)f(pro)s(duct)h(or)g Fm(bddfalse)e Fn(on)i(errors.)236 3946 y Fo(See)35 b(also)p 236 4000 V 236 4113 a Fn(b)s(dd)p 397 4113 28 4 v 31 w(app)s(ex)1962 5989 y(49)p eop %%Page: 50 58 50 57 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(reorder)96 b Fn({)31 b(start)f(dynamic)g(reordering)p 236 250 3544 12 v 236 455 a Fm(void)47 b(bdd_reorder\(int)c(method\)) 236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(This)34 b(function)g(initiates)f(dynamic)h(reordering)g(using)g(the) h(heuristic)f(de\014ned)g(b)m(y)h Fm(method)p Fn(,)g(whic)m(h)236 960 y(ma)m(y)c(b)s(e)f(one)h(of)f(the)h(follo)m(wing)282 1147 y Fm(BDD)p 432 1147 29 4 v 33 w(REORDER)p 801 1147 V 33 w(WIN2)463 1260 y Fn(Reordering)40 b(using)f(a)i(sliding)c(windo)m (w)i(of)i(size)f(2.)72 b(This)39 b(algorithm)g(sw)m(aps)h(t)m(w)m(o)i (adjacen)m(t)463 1373 y(v)-5 b(ariable)35 b(blo)s(c)m(ks)h(and)g(if)f (this)g(results)g(in)g(more)h(no)s(des)g(then)f(the)i(t)m(w)m(o)g(blo)s (c)m(ks)f(are)h(sw)m(app)s(ed)463 1486 y(bac)m(k)29 b(again.)40 b(Otherwise)27 b(the)h(result)f(is)f(k)m(ept)j(in)e(the)h(v)-5 b(ariable)26 b(order.)40 b(This)26 b(is)h(then)g(rep)s(eated)463 1599 y(for)k(all)e(v)-5 b(ariable)29 b(blo)s(c)m(ks.)282 1787 y Fm(BDD)p 432 1787 V 33 w(REORDER)p 801 1787 V 33 w(WIN2ITE)463 1900 y Fn(The)39 b(same)h(as)f(ab)s(o)m(v)m(e)i(but)d (the)i(pro)s(cess)e(is)h(rep)s(eated)g(un)m(til)e(no)i(further)f (progress)h(is)f(done.)463 2012 y(Usually)29 b(a)i(fast)g(and)f (e\016cien)m(t)g(metho)s(d.)282 2200 y Fm(BDD)p 432 2200 V 33 w(REORDER)p 801 2200 V 33 w(WIN3)463 2313 y Fn(The)g(same)h(as)g (ab)s(o)m(v)m(e)g(but)f(with)f(a)i(windo)m(w)e(size)h(of)g(3.)282 2501 y Fm(BDD)p 432 2501 V 33 w(REORDER)p 801 2501 V 33 w(WIN2ITE)463 2614 y Fn(The)g(same)h(as)g(ab)s(o)m(v)m(e)g(but)f (with)f(a)i(windo)m(w)e(size)h(of)g(3.)282 2801 y Fm(BDD)p 432 2801 V 33 w(REORDER)p 801 2801 V 33 w(SIFT)463 2914 y Fn(Reordering)36 b(where)f(eac)m(h)j(blo)s(c)m(k)d(is)h(mo)m(v)m(ed)h (through)e(all)g(p)s(ossible)f(p)s(ositions.)56 b(The)36 b(b)s(est)f(of)463 3027 y(these)c(is)f(then)g(used)f(as)i(the)g(new)e (p)s(osition.)39 b(P)m(oten)m(tially)31 b(a)f(v)m(ery)h(slo)m(w)f(but)g (go)s(o)s(d)g(metho)s(d.)282 3215 y Fm(BDD)p 432 3215 V 33 w(REORDER)p 801 3215 V 33 w(SIFTITE)463 3328 y Fn(The)25 b(same)g(as)g(ab)s(o)m(v)m(e)h(but)f(the)g(pro)s(cess)f(is)g(rep)s (eated)h(un)m(til)e(no)i(further)f(progress)g(is)g(done.)39 b(Can)463 3440 y(b)s(e)30 b(extremely)h(slo)m(w.)282 3628 y Fm(BDD)p 432 3628 V 33 w(REORDER)p 801 3628 V 33 w(RANDOM)463 3741 y Fn(Mostly)d(used)f(for)g(debugging)g(purp)s (ose,)f(but)h(ma)m(y)h(b)s(e)f(usefull)e(for)j(others.)40 b(Selects)27 b(a)h(random)463 3854 y(p)s(osition)h(for)h(eac)m(h)i(v)-5 b(ariable.)236 4192 y Fo(See)35 b(also)p 236 4246 3544 5 v 236 4359 a Fn(b)s(dd)p 397 4359 28 4 v 31 w(autoreorder,)c(b)s(dd)p 1100 4359 V 31 w(reorder)p 1415 4359 V 32 w(v)m(erb)s(ose,)g(b)s(dd)p 1955 4359 V 31 w(addv)-5 b(arblo)s(c)m(k,)29 b(b)s(dd)p 2677 4359 V 31 w(clrv)-5 b(arblo)s(c)m(ks)1962 5989 y(50)p eop %%Page: 51 59 51 58 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(reorder)p 792 196 V 38 w(gain)96 b Fn({)30 b(Calculate)g(the)h(gain)f(in)f(size)h(after)h(a)g(reordering)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_reorder_gain\(void\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)30 b(the)g(gain)g(in)f(p)s(ercen)m(t)i(of)f(the)h(previous)e(n)m(um)m(b)s (er)g(of)h(used)g(no)s(des.)40 b(The)30 b(v)-5 b(alue)30 b(returned)f(is)463 1034 y(\(100)22 b Fc(\003)f Fn(\()p Fj(A)g Fc(\000)f Fj(B)5 b Fn(\)\))p Fj(=)-5 b(A)236 1222 y Fn(Where)31 b Fj(A)f Fn(is)g(previous)f(n)m(um)m(b)s(er)g(of)h(used)g (no)s(des)f(and)h Fj(B)35 b Fn(is)29 b(curren)m(t)i(n)m(um)m(b)s(er)e (of)h(used)g(no)s(des.)p 236 1573 3544 12 v 236 1686 a Fo(b)s(dd)p 419 1686 32 4 v 38 w(reorder)p 792 1686 V 38 w(ho)s(ok)96 b Fn({)31 b(sets)g(a)f(handler)f(for)h(automatic)h (reorderings)p 236 1740 3544 12 v 236 1945 a Fm(bddinthandler)44 b(bdd_reorder_hook\(bddinthan)o(dle)o(r)e(handler\))236 2170 y Fo(Description)p 236 2224 3544 5 v 236 2337 a Fn(Whenev)m(er)33 b(automatic)g(reordering)e(is)h(done,)h(a)f(c)m(hec)m (k)i(is)e(done)g(to)h(see)g(if)e(the)h(user)g(has)g(supplied)d(a)236 2450 y(handler)i(for)h(that)h(ev)m(en)m(t.)49 b(If)32 b(so)h(then)f(it)g(is)g(called)g(with)f(the)h(argumen)m(t)h Fm(prestate)e Fn(b)s(eing)g(1)i(if)e(the)236 2563 y(handler)21 b(is)i(called)f(immediately)f Ff(b)-5 b(efor)g(e)24 b Fn(reordering)e(and)g Fm(prestate)f Fn(b)s(eing)h(0)h(if)f(it)h(is)f (called)g(immedi-)236 2676 y(ately)29 b(after.)41 b(The)28 b(default)g(handler)e(is)i Fm(bdd)p 1764 2676 29 4 v 34 w(default)p 2134 2676 V 32 w(reohandler)e Fn(whic)m(h)h(will)f(prin) m(t)h(information)236 2789 y(ab)s(out)j(the)h(reordering.)327 2902 y(A)g(t)m(ypical)f(handler)e(could)i(lo)s(ok)g(lik)m(e)f(this:)236 3089 y Fm(void)47 b(reorderhandler\(int)c(prestate\))236 3202 y({)379 3315 y(if)48 b(\(prestate\))523 3428 y(printf\("Start)c (reordering"\);)379 3541 y(else)523 3654 y(printf\("End)g (reordering"\);)236 3767 y(})236 4105 y Fo(Return)35 b(v)-6 b(alue)p 236 4159 3544 5 v 236 4272 a Fn(The)30 b(previous)f(handler)236 4535 y Fo(See)35 b(also)p 236 4589 V 236 4702 a Fn(b)s(dd)p 397 4702 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 4702 V 31 w(autoreorder,)h(b)s(dd)p 1626 4702 V 31 w(resize)p 1875 4702 V 32 w(ho)s(ok)1962 5989 y(51)p eop %%Page: 52 60 52 59 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(reorder)p 792 196 V 38 w(prob)s(e)96 b Fn({)31 b(De\014ne)f(a)h(handler)d(for)j(minimization)c(of)k(BDDs)p 236 250 3544 12 v 236 455 a Fm(bddsizehandler)44 b (bdd_reorder_probe\(bddsize)o(han)o(dler)d(handler\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Reordering)d(is)h (t)m(ypically)e(done)i(to)h(minimize)d(the)i(global)g(n)m(um)m(b)s(er)e (of)j(BDD)g(no)s(des)e(in)g(use,)j(but)236 960 y(it)50 b(ma)m(y)h(in)e(some)i(cases)g(b)s(e)f(usefull)d(to)k(minimize)d(with)h (resp)s(ect)h(to)h(a)g(sp)s(eci\014c)e(BDD.)j(With)236 1073 y Fm(bdd)p 386 1073 29 4 v 34 w(reorder)p 756 1073 V 32 w(probe)41 b Fn(it)g(is)g(p)s(ossible)f(to)j(de\014ne)e(a)i (callbac)m(k)f(function)e(that)j(calculates)f(the)h(size)236 1186 y(of)35 b(a)f(sp)s(eci\014c)g(BDD)h(\(or)g(an)m(ything)e(else)i (in)e(fact\).)54 b(This)32 b(handler)h(will)e(then)j(b)s(e)g(called)f (b)m(y)i(the)f(re-)236 1298 y(ordering)h(functions)g(to)j(get)f(the)g (curren)m(t)f(size)h(information.)57 b(A)36 b(t)m(ypical)h(handle)e (could)g(lo)s(ok)h(lik)m(e)236 1411 y(this:)236 1599 y Fm(int)47 b(sizehandler\(void\))236 1712 y({)379 1825 y(extern)f(BDD)h(mybdd;)379 1938 y(return)f(bdd_nodecount\(mybdd\);)236 2051 y(})236 2238 y Fn(No)39 b(default)e(handler)f(is)h(supplied.)60 b(The)38 b(argumen)m(t)g Fm(handler)e Fn(ma)m(y)i(b)s(e)g(NULL)g(if)e (no)i(handler)e(is)236 2351 y(needed.)236 2614 y Fo(Return)f(v)-6 b(alue)p 236 2669 3544 5 v 236 2781 a Fn(The)30 b(old)g(handler)236 3045 y Fo(See)35 b(also)p 236 3099 V 236 3212 a Fn(b)s(dd)p 397 3212 28 4 v 31 w(reorder)p 236 3545 3544 12 v 236 3658 a Fo(b)s(dd)p 419 3658 32 4 v 38 w(reorder)p 792 3658 V 38 w(v)m(erb)s(ose)96 b Fn({)31 b(enables)f(v)m(erb)s(ose)g (information)f(ab)s(out)h(reorderings)p 236 3712 3544 12 v 236 3917 a Fm(int)47 b(bdd_reorder_verbose\(int)42 b(v\))236 4142 y Fo(Description)p 236 4196 3544 5 v 236 4309 a Fn(With)32 b Fm(bdd)p 623 4309 29 4 v 33 w(reorder)p 992 4309 V 33 w(verbose)d Fn(it)j(is)f(p)s(ossible)e(to)k(set)f(the)g (lev)m(el)g(of)g(information)e(whic)m(h)g(should)g(b)s(e)236 4422 y(prin)m(ted)35 b(during)e(reordering.)56 b(A)36 b(v)-5 b(alue)35 b(of)h(zero)h(means)f(no)f(information,)h(a)g(v)-5 b(alue)35 b(of)h(one)h(means)236 4535 y(some)28 b(information)e(and)h (an)m(y)i(greater)f(v)-5 b(alue)28 b(will)d(result)h(in)h(a)h(lot)g(of) f(reordering)g(information.)38 b(The)236 4648 y(default)30 b(v)-5 b(alue)30 b(is)f(zero.)236 4911 y Fo(Return)35 b(v)-6 b(alue)p 236 4965 3544 5 v 236 5078 a Fn(The)30 b(old)g(v)m(erb)s(ose)g(lev)m(el)236 5341 y Fo(See)35 b(also)p 236 5395 V 236 5508 a Fn(b)s(dd)p 397 5508 28 4 v 31 w(reorder)1962 5989 y(52)p eop %%Page: 53 61 53 60 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(replace)96 b Fn({)31 b(replaces)f(v)-5 b(ariables)29 b(with)g(other)h(v)-5 b(ariables)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_replace\(BDD)d(r,)j(bddPair)f (*pair\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Replaces)37 b(all)f(v)-5 b(ariables)36 b(in)g(the)h(BDD)i Fm(r)d Fn(with)g(the)h(v)-5 b(ariables)36 b(de\014ned)g(b)m(y)h Fm(pair)p Fn(.)60 b(Eac)m(h)37 b(en)m(try)h(in)236 960 y Fm(pair)28 b Fn(consists)h(of)h(a)f(old)g(and)f(a)i(new)f(v)-5 b(ariable.)39 b(Whenev)m(er)30 b(the)f(old)g(v)-5 b(ariable)28 b(is)g(found)g(in)g Fm(r)h Fn(then)g(a)236 1073 y(new)h(no)s(de)g(with) f(the)h(new)g(v)-5 b(ariable)29 b(is)h(inserted)f(instead.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 V 236 1503 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration.)236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(newpair,)29 b(b)s(dd)p 953 1933 V 31 w(setpair,)h(b)s(dd)p 1464 1933 V 30 w(setpairs)p 236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 4 v 38 w(resetpair)95 b Fn({)31 b(clear)f(all)g(v)-5 b(ariable)29 b(pairs)p 236 2451 3544 12 v 236 2656 a Fm(void)47 b(bdd_resetpair\(bddPair)42 b(*pair\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(Resets)34 b(the)f(table)f(of)h(pairs)f Fm(pair)f Fn(b)m(y)i(setting) g(all)e(substitutions)f(to)k(their)e(default)g(v)-5 b(alues)32 b(\(that)h(is)236 3161 y(no)d(c)m(hange\).)236 3424 y Fo(See)35 b(also)p 236 3479 V 236 3591 a Fn(b)s(dd)p 397 3591 28 4 v 31 w(newpair,)29 b(b)s(dd)p 953 3591 V 31 w(setpair,)h(b)s(dd)p 1464 3591 V 30 w(freepair)1962 5989 y(53)p eop %%Page: 54 62 54 61 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(resize)p 712 196 V 38 w(ho)s(ok)96 b Fn({)31 b(set)g(a)g(handler)d(for)j(no)s(detable)e(resizes)p 236 250 3544 12 v 236 455 a Fm(bdd2inthandler)44 b (bdd_resize_hook\(bdd2intha)o(ndl)o(er)e(handler\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Whenev)m(er)30 b(it)f(is)g(imp)s(ossible)d(to)k(get)h(enough)e(free)h(no)s(des)f(b)m (y)g(a)h(garbage)h(collection)e(then)g(the)h(no)s(de)236 960 y(table)g(is)f(resized)g(and)g(a)i(test)f(is)f(done)h(to)h(see)f (if)f(a)h(handler)e(is)h(supllied)d(b)m(y)k(the)g(user)f(for)h(this)f (ev)m(en)m(t.)236 1073 y(If)34 b(so)h(then)g(it)f(is)f(called)h(with)g Fm(oldsize)e Fn(b)s(eing)h(the)i(old)f(no)s(detable)g(size)g(and)g Fm(newsize)f Fn(b)s(eing)g(the)236 1186 y(new)d(no)s(detable)g(size.) 327 1298 y(This)h(function)h(sets)h(the)g(handler)e(to)j(b)s(e)e Fm(handler)p Fn(.)47 b(If)32 b(a)h Fm(NULL)f Fn(argumen)m(t)h(is)f (supplied)e(then)j(no)236 1411 y(calls)d(are)h(made)f(when)f(a)i(table) f(resize)h(is)e(done.)41 b(No)30 b(default)g(handler)f(is)g(supplied.) 327 1524 y(An)m(y)i(handler)d(should)g(b)s(e)i(de\014ned)f(lik)m(e)h (this:)236 1712 y Fm(void)47 b(my_resize_handler\(int)42 b(oldsize,)j(int)i(newsize\))236 1825 y({)379 1938 y(...)236 2051 y(})236 2389 y Fo(Return)35 b(v)-6 b(alue)p 236 2443 V 236 2556 a Fn(The)30 b(previous)f(handler)236 2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p 397 2986 28 4 v 31 w(gb)s(c)p 567 2986 V 33 w(ho)s(ok,)30 b(b)s(dd)p 1003 2986 V 31 w(reorder)p 1318 2986 V 32 w(ho)s(ok,)h(b)s(dd)p 1754 2986 V 30 w(setminfreeno)s(des)1962 5989 y(54)p eop %%Page: 55 63 55 62 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(restrict)96 b Fn({)30 b(restric)g(a)h(set)g(of)f(v)-5 b(ariables)29 b(to)i(constan)m(t)h(v)-5 b(alues)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_restrict\(BDD)c(r,)48 b(BDD)f(var\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(This)42 b(function)h(restricts)g(the)h(v)-5 b(ariables)42 b(in)h Fm(r)g Fn(to)i(constan)m(t)g(true)e(or)h(false.)81 b(Ho)m(w)44 b(this)f(is)g(done)236 960 y(dep)s(ends)28 b(on)h(ho)m(w)h(the)f(v)-5 b(ariables)28 b(are)i(included)d(in)h(the)i (v)-5 b(ariable)28 b(set)i Fm(var)p Fn(.)40 b(If)29 b(they)g(are)h (included)d(in)236 1073 y(their)h(p)s(ositiv)m(e)f(form)h(then)g(they)g (are)h(restricted)f(to)h(true)f(and)g(vice)h(v)m(ersa.)40 b(Unfortunately)28 b(it)g(is)f(not)236 1186 y(p)s(ossible)32 b(to)k(insert)d(v)-5 b(ariables)34 b(in)f(their)h(negated)i(form)e (using)f Fm(bdd)p 2623 1186 29 4 v 34 w(makeset)p Fn(,)h(so)h(the)f(v) -5 b(ariable)34 b(set)236 1298 y(has)e(to)h(b)s(e)f(build)d(man)m (ually)i(as)h(a)h(conjunction)e(of)h(the)h(v)-5 b(ariables.)45 b(Example:)e(Assume)32 b(v)-5 b(ariable)31 b(1)236 1411 y(should)e(b)s(e)g(restricted)h(to)i(true)e(and)f(v)-5 b(ariable)30 b(3)g(to)h(false.)332 1599 y Fm(bdd)47 b(X)g(=)g (make_user_bdd\(\);)332 1712 y(bdd)g(R1)g(=)g(bdd_ithvar\(1\);)332 1825 y(bdd)g(R2)g(=)g(bdd_nithvar\(3\);)332 1938 y(bdd)g(R)g(=)g (bdd_addref\()e(bdd_apply\(R1,R2,)f(bddop_and\))h(\);)332 2051 y(bdd)i(RES)f(=)i(bdd_addref\()d(bdd_restrict\(X,R\))e(\);)236 2389 y Fo(Return)35 b(v)-6 b(alue)p 236 2443 3544 5 v 236 2556 a Fn(The)30 b(restricted)g(b)s(dd.)236 2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p 397 2986 28 4 v 31 w(mak)m(eset,)d(b)s(dd)p 958 2986 V 31 w(exist,)e(b)s(dd)p 1385 2986 V 31 w(forall)p 236 3337 3544 12 v 236 3450 a Fo(b)s(dd)p 419 3450 32 4 v 38 w(satcoun)m(t)96 b Fn({)31 b(calculates)f(the)h(n)m(um)m(b)s(er)e (of)h(satisfying)f(v)-5 b(ariable)30 b(assignmen)m(ts)p 236 3504 3544 12 v 236 3709 a Fm(double)46 b(bdd_satcount\(BDD)e(r\)) 236 3822 y(double)i(bdd_satcountset\(BDD)d(r,)k(BDD)g(varset\))236 4047 y Fo(Description)p 236 4101 3544 5 v 236 4214 a Fn(Calculates)39 b(ho)m(w)g(man)m(y)g(p)s(ossible)e(v)-5 b(ariable)38 b(assignmen)m(ts)h(there)g(exists)g(suc)m(h)g(that)g Fm(r)g Fn(is)f(satis\014ed)236 4327 y(\(true\).)67 b(All)38 b(de\014ned)g(v)-5 b(ariables)38 b(are)h(considered)f(in)f(the)j (\014rst)e(v)m(ersion.)66 b(In)38 b(the)i(second)f(v)m(ersion,)236 4440 y(only)c(the)g(v)-5 b(ariables)34 b(in)g(the)h(v)-5 b(ariable)34 b(set)i Fm(varset)d Fn(are)j(considered.)53 b(This)34 b(mak)m(es)i(the)f(function)f(a)236 4553 y Ff(lot)d Fn(slo)m(w)m(er.)236 4816 y Fo(Return)k(v)-6 b(alue)p 236 4870 V 236 4983 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(p)s (ossible)d(assignmen)m(ts.)236 5246 y Fo(See)35 b(also)p 236 5300 V 236 5413 a Fn(b)s(dd)p 397 5413 28 4 v 31 w(satone,)d(b)s(dd)p 893 5413 V 30 w(fullsatone,)e(b)s(dd)p 1517 5413 V 30 w(satcoun)m(tln)1962 5989 y(55)p eop %%Page: 56 64 56 63 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(satcoun)m(tln)96 b Fn({)31 b(calculates)f(the)h(log.)41 b(n)m(um)m(b)s(er)29 b(of)h(satisfying)f(v)-5 b(ariable)30 b(assignmen)m(ts)p 236 250 3544 12 v 236 455 a Fm(double)46 b(bdd_satcountln\(BDD)d(r\))236 568 y(double)j(bdd_satcountlnset\(BDD)c (r,)47 b(BDD)g(varset\))236 793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Calculates)39 b(ho)m(w)g(man)m(y)g(p)s (ossible)e(v)-5 b(ariable)38 b(assignmen)m(ts)h(there)g(exists)g(suc)m (h)g(that)g Fm(r)g Fn(is)f(satis\014ed)236 1073 y(\(true\))29 b(and)f(returns)f(the)h(logarithm)g(of)g(this.)39 b(The)28 b(result)f(is)h(calculated)g(in)f(suc)m(h)h(a)h(manner)e(that)i(it)236 1186 y(is)e(practically)f(imp)s(ossible)f(to)j(get)h(an)e(o)m(v)m (er\015o)m(w,)j(whic)m(h)c(is)h(v)m(ery)h(p)s(ossible)d(for)j Fm(bdd)p 3136 1186 29 4 v 33 w(satcount)e Fn(if)g(the)236 1298 y(n)m(um)m(b)s(er)33 b(of)h(de\014ned)e(v)-5 b(ariables)33 b(is)f(to)s(o)j(large.)51 b(All)32 b(de\014ned)h(v)-5 b(ariables)32 b(are)i(considered)f(in)f(the)i(\014rst)236 1411 y(v)m(ersion.)k(In)23 b(the)h(second)g(v)m(ersion,)h(only)e(the)h (v)-5 b(ariables)23 b(in)f(the)i(v)-5 b(ariable)23 b(set)h Fm(varset)e Fn(are)i(considered.)236 1524 y(This)29 b(mak)m(es)i(the)g (function)e(a)h Ff(lot)i Fn(slo)m(w)m(er!)236 1787 y Fo(Return)j(v)-6 b(alue)p 236 1842 3544 5 v 236 1955 a Fn(The)30 b(logarithm)f(of)i(the)g(n)m(um)m(b)s(er)e(of)h(p)s (ossible)e(assignmen)m(ts.)236 2218 y Fo(See)35 b(also)p 236 2272 V 236 2385 a Fn(b)s(dd)p 397 2385 28 4 v 31 w(satone,)d(b)s(dd)p 893 2385 V 30 w(fullsatone,)e(b)s(dd)p 1517 2385 V 30 w(satcoun)m(t)p 236 2736 3544 12 v 236 2849 a Fo(b)s(dd)p 419 2849 32 4 v 38 w(satone)95 b Fn({)31 b(\014nds)e(one)i(satisfying)e(v)-5 b(ariable)29 b(assignmen)m(t)p 236 2903 3544 12 v 236 3108 a Fm(BDD)47 b(bdd_satone\(BDD)d(r\))236 3333 y Fo(Description)p 236 3387 3544 5 v 236 3500 a Fn(Finds)26 b(a)h(BDD)h(with)e(at)i(most)g(one)f(v)-5 b(ariable)26 b(at)i(eac)m(h)g(lev)m(el.)39 b(This)25 b(BDD)k(implies)24 b Fm(r)j Fn(and)f(is)g(not)i(false)236 3613 y(unless)h Fm(r)h Fn(is)f(false.)236 3876 y Fo(Return)35 b(v)-6 b(alue)p 236 3930 V 236 4043 a Fn(The)30 b(result)f(of)i(the)f (op)s(eration.)236 4306 y Fo(See)35 b(also)p 236 4360 V 236 4473 a Fn(b)s(dd)p 397 4473 28 4 v 31 w(allsat)30 b(b)s(dd)p 827 4473 V 31 w(satoneset,)i(b)s(dd)p 1434 4473 V 31 w(fullsatone,)d(b)s(dd)p 2058 4473 V 31 w(satcoun)m(t,)j(b)s (dd)p 2637 4473 V 30 w(satcoun)m(tln)1962 5989 y(56)p eop %%Page: 57 65 57 64 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(satoneset)95 b Fn({)31 b(\014nds)e(one)h(satisfying)f (v)-5 b(ariable)30 b(assignmen)m(t)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_satoneset\(BDD)c(r,)k(BDD)g(var,)g(BDD)g (pol\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Finds)32 b(a)h(min)m(term)f(in)g Fm(r)p Fn(.)48 b(The)32 b Fm(var)g Fn(argumen)m(t)i(is)e(a)h(v)-5 b(ariable)32 b(set)h(that)h(de\014nes)e(a)h(set)h(of)f(v)-5 b(ariables)236 960 y(that)36 b Ff(must)g Fn(b)s(e)f(men)m(tioned)f(in)g(the)i(result.) 54 b(The)35 b(p)s(olarit)m(y)f(of)i(these)g(v)-5 b(ariables)34 b(in)g(result|in)e(case)236 1073 y(they)f(are)h(unde\014ned)c(in)i Fm(r)p Fn(|are)h(de\014ned)e(b)m(y)i(the)g Fm(pol)f Fn(parameter.)43 b(If)30 b Fm(pol)g Fn(is)g(the)h(false)g(BDD)h(then)236 1186 y(the)f(v)-5 b(ariables)29 b(will)f(b)s(e)h(in)g(negativ)m(e)j (form,)e(and)g(otherwise)g(they)g(will)e(b)s(e)i(in)f(p)s(ositiv)m(e)g (form.)236 1449 y Fo(Return)35 b(v)-6 b(alue)p 236 1503 V 236 1616 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration.)236 1879 y Fo(See)35 b(also)p 236 1933 V 236 2046 a Fn(b)s(dd)p 397 2046 28 4 v 31 w(allsat)30 b(b)s(dd)p 827 2046 V 31 w(satone,)h(b)s(dd)p 1322 2046 V 31 w(fullsatone,)e(b)s(dd)p 1946 2046 V 31 w(satcoun)m(t,)j(b)s(dd)p 2525 2046 V 31 w(satcoun)m(tln)p 236 2397 3544 12 v 236 2510 a Fo(b)s(dd)p 419 2510 32 4 v 38 w(sa)m(v)m(e)96 b Fn({)31 b(sa)m(v)m(es)g(a)g(BDD)h (to)f(a)g(\014le)p 236 2564 3544 12 v 236 2769 a Fm(int)47 b(bdd_fnsave\(char)d(*fname,)i(BDD)g(r\))236 2882 y(int)h (bdd_save\(FILE)d(*ofile,)i(BDD)h(r\))236 3107 y Fo(Description)p 236 3161 3544 5 v 236 3274 a Fn(Sa)m(v)m(es)34 b(the)g(no)s(des)e(used) g(b)m(y)h Fm(r)g Fn(to)h(either)f(a)g(\014le)f Fm(ofile)g Fn(whic)m(h)g(m)m(ust)h(b)s(e)f(op)s(ened)h(for)f(writing)g(or)h(to)236 3387 y(the)e(\014le)e(named)h Fm(fname)p Fn(.)39 b(In)30 b(the)h(last)f(case)h(the)g(\014le)e(will)f(b)s(e)i(truncated)g(and)g (op)s(ened)g(for)g(writing.)236 3650 y Fo(Return)35 b(v)-6 b(alue)p 236 3704 V 236 3817 a Fn(Zero)31 b(on)f(succes,)h(otherwise)f (an)g(error)g(co)s(de)g(from)g Fm(bdd.h)p Fn(.)236 4080 y Fo(See)35 b(also)p 236 4135 V 236 4248 a Fn(b)s(dd)p 397 4248 28 4 v 31 w(load)1962 5989 y(57)p eop %%Page: 58 66 58 65 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(scanset)96 b Fn({)31 b(returns)e(an)h(in)m(teger)h (represen)m(tation)f(of)h(a)g(v)-5 b(ariable)29 b(set)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_scanset\(BDD)d(r,)j(int)g (**v,)f(int)h(*n\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Scans)39 b(a)h(v)-5 b(ariable)39 b(set)h Fm(r)f Fn(and)g(copies)g(the)h(stored)g(v)-5 b(ariables)38 b(in)m(to)i(an)f(in)m(teger)h(arra)m(y)g(of)g(v)-5 b(ariable)236 960 y(n)m(um)m(b)s(ers.)50 b(The)34 b(argumen)m(t)g Fm(v)g Fn(is)f(the)h(address)f(of)h(an)g(in)m(teger)g(p)s(oin)m(ter)f (where)h(the)g(arra)m(y)g(is)f(stored)236 1073 y(and)f Fm(n)g Fn(is)f(a)i(p)s(oin)m(ter)e(to)i(an)g(in)m(teger)f(where)g(the)h (n)m(um)m(b)s(er)e(of)h(elemen)m(ts)h(are)f(stored.)47 b(It)32 b(is)g(the)g(users)236 1186 y(resp)s(onsibilit)m(y)f(to)36 b(mak)m(e)g(sure)f(the)g(arra)m(y)h(is)e(deallo)s(cated)h(b)m(y)g(a)h (call)e(to)i Fm(free\(v\))p Fn(.)53 b(The)35 b(n)m(um)m(b)s(ers)236 1298 y(returned)29 b(are)i(guaran)m(teed)h(to)f(b)s(e)e(in)h(ascending) f(order.)236 1562 y Fo(Return)35 b(v)-6 b(alue)p 236 1616 V 236 1729 a Fn(Zero)31 b(on)f(success,)h(otherwise)e(a)i(negativ) m(e)h(error)e(co)s(de.)236 1992 y Fo(See)35 b(also)p 236 2046 V 236 2159 a Fn(b)s(dd)p 397 2159 28 4 v 31 w(mak)m(eset)p 236 2492 3544 12 v 236 2605 a Fo(b)s(dd)p 419 2605 32 4 v 38 w(setcac)m(heratio)96 b Fn({)31 b(Sets)f(the)h(cac)m (he)h(ratio)e(for)g(the)h(op)s(erator)f(cac)m(hes)p 236 2659 3544 12 v 236 2864 a Fm(int)47 b(bdd_setcacheratio\(int)42 b(r\))236 3089 y Fo(Description)p 236 3143 3544 5 v 236 3256 a Fn(The)d(ratio)f(b)s(et)m(w)m(een)i(the)f(n)m(um)m(b)s(er)f(of)h (no)s(des)f(in)f(the)i(no)s(detable)f(and)h(the)g(n)m(um)m(b)s(er)e(of) i(en)m(tries)g(in)236 3369 y(the)k(op)s(erator)f(cac)m(hetables)i(is)e (called)f(the)i(cac)m(he)h(ratio.)76 b(So)43 b(a)f(cac)m(he)i(ratio)f (of)f(sa)m(y)-8 b(,)47 b(four,)e(allo-)236 3482 y(cates)h(one)f(cac)m (he)h(en)m(try)f(for)f(eac)m(h)i(four)d(unique)g(no)s(de)h(en)m(tries.) 82 b(This)43 b(v)-5 b(alue)44 b(can)h(b)s(e)f(set)h(with)236 3595 y Fm(bdd)p 386 3595 29 4 v 34 w(setcacheratio)32 b Fn(to)k(an)m(y)g(p)s(ositiv)m(e)f(v)-5 b(alue.)57 b(When)35 b(this)g(is)g(done)g(the)h(cac)m(hes)h(are)f(resized)f(in-)236 3708 y(stan)m(tly)e(to)g(\014t)f(the)h(new)e(ratio.)47 b(The)32 b(default)f(is)h(a)h(\014xed)e(cac)m(he)j(size)e(determined)f (at)j(initialization)236 3821 y(time.)236 4084 y Fo(Return)h(v)-6 b(alue)p 236 4138 3544 5 v 236 4251 a Fn(The)30 b(previous)f(cac)m(he)j (ratio)e(or)h(a)f(negativ)m(e)i(n)m(um)m(b)s(er)d(on)h(error.)236 4514 y Fo(See)35 b(also)p 236 4569 V 236 4681 a Fn(b)s(dd)p 397 4681 28 4 v 31 w(init)1962 5989 y(58)p eop %%Page: 59 67 59 66 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(setmaxincrease)95 b Fn({)31 b(set)g(max.)40 b(n)m(um)m(b)s(er)29 b(of)i(no)s(des)f(used)f(to)i(increase)f(no)s(de)g (table)p 236 250 3544 12 v 236 455 a Fm(int)47 b (bdd_setmaxincrease\(int)42 b(size\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(The)37 b(no)s(de)f(table)h(is)f(expanded) g(b)m(y)g(doubling)f(the)i(size)g(of)g(the)g(table)g(when)e(no)i(more)g (free)g(no)s(des)236 960 y(can)47 b(b)s(e)e(found,)k(but)d(a)g(maxim)m (um)f(for)h(the)g(n)m(um)m(b)s(er)f(of)i(new)e(no)s(des)h(added)f(can)i (b)s(e)e(set)i(with)236 1073 y Fm(bdd)p 386 1073 29 4 v 34 w(maxincrease)27 b Fn(to)k Fm(size)e Fn(no)s(des.)40 b(The)30 b(default)g(is)f(50000)k(no)s(des)c(\(1)i(Mb\).)236 1336 y Fo(Return)k(v)-6 b(alue)p 236 1390 3544 5 v 236 1503 a Fn(The)30 b(old)g(threshold)e(on)j(succes,)g(otherwise)e(a)i (negativ)m(e)h(error)e(co)s(de.)236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(setmaxno)s(den)m(um,)30 b(b)s(dd)p 1284 1933 V 31 w(setminfreeno)s(des)p 236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 4 v 38 w(setmaxno)s(den)m(um)94 b Fn({)31 b(set)g(the)f(maxim)m(um)f(a)m(v)-5 b(ailable)30 b(n)m(um)m(b)s(er)f(of)i(b)s(dd)d(no)s(des)p 236 2451 3544 12 v 236 2656 a Fm(int)47 b(bdd_setmaxnodenum\(int)42 b(size\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(This)32 b(function)f(sets)j(the)f(maximal)f(n)m(um)m(b) s(er)g(of)h(b)s(dd)e(no)s(des)i(the)g(pac)m(k)-5 b(age)35 b(ma)m(y)f(allo)s(cate)f(b)s(efore)g(it)236 3161 y(giv)m(es)g(up)f(a)g (b)s(dd)f(op)s(eration.)46 b(The)32 b(argumen)m(t)h Fm(size)f Fn(is)f(the)i(absolute)f(maximal)f(n)m(um)m(b)s(er)h(of)g(no)s(des)236 3274 y(there)39 b(ma)m(y)g(b)s(e)f(allo)s(cated)h(for)f(the)h(no)s (detable.)65 b(An)m(y)39 b(attempt)h(to)f(allo)s(cate)g(more)g(no)s (des)f(results)236 3387 y(in)32 b(the)i(constan)m(t)g(false)f(b)s(eing) f(returned)g(and)g(the)i(error)f(handler)e(b)s(eing)h(called)g(un)m (til)g(some)h(no)s(des)236 3500 y(are)f(deallo)s(cated.)44 b(A)32 b(v)-5 b(alue)31 b(of)h(0)g(is)e(in)m(terpreted)h(as)h(an)f (unlimited)d(amoun)m(t.)45 b(It)32 b(is)e Ff(not)j Fn(p)s(ossible)c(to) 236 3613 y(sp)s(ecify)g(few)m(er)i(no)s(des)e(than)i(there)f(has)g (already)g(b)s(een)g(allo)s(cated.)236 3876 y Fo(Return)35 b(v)-6 b(alue)p 236 3930 V 236 4043 a Fn(The)30 b(old)g(threshold)e(on) j(succes,)g(otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 4306 y Fo(See)35 b(also)p 236 4360 V 236 4473 a Fn(b)s(dd)p 397 4473 28 4 v 31 w(setmaxincrease,)c(b)s(dd)p 1234 4473 V 31 w(setminfreeno)s(des)1962 5989 y(59)p eop %%Page: 60 68 60 67 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(setminfreeno)s(des)95 b Fn({)31 b(set)g(min.)39 b(no.)h(of)31 b(no)s(des)e(to)i(b)s(e)f(reclaimed)g(after)g(GBC.)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_setminfreenodes\(int)42 b(n\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Whenev)m(er)37 b(a)g(garbage)h(collection)e(is)f(executed)i (the)g(n)m(um)m(b)s(er)e(of)h(free)h(no)s(des)f(left)g(are)g(c)m(hec)m (k)m(ed)j(to)236 960 y(see)e(if)e(a)h(resize)g(of)g(the)g(no)s(de)g (table)g(is)f(required.)55 b(If)36 b Fj(X)42 b Fn(=)34 b(\()p Ff(b)-5 b(ddfr)g(e)g(enum)33 b Fc(\003)25 b Fn(100\))p Fj(=)p Ff(maxnum)46 b Fn(is)35 b(less)236 1073 y(than)c(or)h(equal)f (to)h Fm(n)f Fn(then)g(a)h(resize)f(is)g(initiated.)42 b(The)31 b(range)h(of)f Fm(X)h Fn(is)e(of)i(course)f(0)15 b Fj(:)g(:)g(:)i Fn(100)33 b(and)e(has)236 1186 y(some)d(in\015uence)e (on)i(ho)m(w)f(fast)h(the)g(pac)m(k)-5 b(age)29 b(is.)39 b(A)28 b(lo)m(w)f(n)m(um)m(b)s(er)f(means)i(harder)e(attempts)j(to)f(a) m(v)m(oid)236 1298 y(resizing)g(and)g(sa)m(v)m(es)i(space,)g(and)e(a)h (high)f(n)m(um)m(b)s(er)f(reduces)i(the)g(time)f(used)g(in)g(garbage)i (collections.)236 1411 y(The)g(default)g(v)-5 b(alue)29 b(is)h(20.)236 1675 y Fo(Return)35 b(v)-6 b(alue)p 236 1729 V 236 1842 a Fn(The)30 b(old)g(threshold)e(on)j(succes,)g (otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 2105 y Fo(See)35 b(also)p 236 2159 V 236 2272 a Fn(b)s(dd)p 397 2272 28 4 v 31 w(setmaxno)s(den)m(um,)30 b(b)s(dd)p 1284 2272 V 31 w(setmaxincrease)p 236 2623 3544 12 v 236 2736 a Fo(b)s(dd)p 419 2736 32 4 v 38 w(setpair)95 b Fn({)31 b(set)g(one)g(v)-5 b(ariable)29 b(pair)p 236 2790 3544 12 v 236 2995 a Fm(int)47 b(bdd_setpair\(bddPair)c(*pair,)j (int)h(oldvar,)e(int)i(newvar\))236 3108 y(int)g (bdd_setbddpair\(bddPair)42 b(*pair,)k(BDD)h(oldvar,)f(BDD)h(newvar\)) 236 3333 y Fo(Description)p 236 3387 3544 5 v 236 3500 a Fn(Adds)30 b(the)h(pair)e Fm(\(oldvar,newvar\))e Fn(to)k(the)g(table) g(of)g(pairs)e Fm(pair)p Fn(.)41 b(This)29 b(results)g(in)h Fm(oldvar)f Fn(b)s(eing)236 3613 y(substituted)24 b(with)h Fm(newvar)f Fn(in)h(a)h(call)f(to)i Fm(bdd)p 1814 3613 29 4 v 33 w(replace)p Fn(.)38 b(In)25 b(the)h(\014rst)f(v)m(ersion)g Fm(newvar)f Fn(is)h(an)h(in)m(teger)236 3726 y(represen)m(ting)43 b(the)i(v)-5 b(ariable)42 b(to)j(b)s(e)f(replaced)f(with)g(the)h(old)f (v)-5 b(ariable.)80 b(In)44 b(the)g(second)g(v)m(ersion)236 3839 y Fm(oldvar)31 b Fn(is)g(a)h(BDD.)i(In)d(this)h(case)h(the)f(v)-5 b(ariable)31 b Fm(oldvar)g Fn(is)g(substituted)f(with)h(the)i(BDD)g Fm(newvar)p Fn(.)236 3952 y(The)25 b(p)s(ossibilit)m(y)c(to)26 b(substitute)e(with)g(an)m(y)i(BDD)g(as)g Fm(newvar)d Fn(is)h(utilized)f(in)h(b)s(dd)p 3052 3952 28 4 v 31 w(comp)s(ose,)j(whereas)236 4064 y(only)j(the)g(topmost)h(v)-5 b(ariable)29 b(in)h(the)g(BDD)i(is)d(used)h(in)f(b)s(dd)p 2350 4064 V 31 w(replace.)236 4328 y Fo(Return)35 b(v)-6 b(alue)p 236 4382 3544 5 v 236 4495 a Fn(Zero)31 b(on)f(success,)h (otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 4758 y Fo(See)35 b(also)p 236 4812 V 236 4925 a Fn(b)s(dd)p 397 4925 28 4 v 31 w(newpair,)29 b(b)s(dd)p 953 4925 V 31 w(setpairs,)h(b)s(dd)p 1500 4925 V 30 w(resetpair,)g(b)s(dd)p 2086 4925 V 31 w(replace,)h(b)s(dd)p 2607 4925 V 30 w(comp)s(ose)1962 5989 y(60)p eop %%Page: 61 69 61 68 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(setpairs)95 b Fn({)31 b(de\014nes)f(a)g(whole)g(set)h (of)g(pairs)p 236 250 3544 12 v 236 455 a Fm(int)47 b (bdd_setpairs\(bddPair)42 b(*pair,)k(int)h(*oldvar,)f(int)h(*newvar,)e (int)i(size\))236 568 y(int)g(bdd_setbddpairs\(bddPair)42 b(*pair,)k(int)h(*oldvar,)e(BDD)i(*newvar,)f(int)g(size\))236 793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(As)28 b(for)f Fm(bdd)p 654 960 29 4 v 33 w(setpair)f Fn(but)h(with)f Fm(oldvar)g Fn(and)g Fm(newvar)g Fn(b)s(eing)g(arra)m(ys)i(of)g(v)-5 b(ariables)26 b(\(BDDs\))j(of)f(size)236 1073 y Fm(size)p Fn(.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 3544 5 v 236 1503 a Fn(Zero)31 b(on)f(success,)h(otherwise)e(a)i (negativ)m(e)h(error)e(co)s(de.)236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(newpair,)29 b(b)s(dd)p 953 1933 V 31 w(setpair,)h(b)s(dd)p 1464 1933 V 30 w(replace,)h(b)s(dd)p 1984 1933 V 31 w(comp)s(ose)p 236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 4 v 38 w(setv)-6 b(arn)m(um)95 b Fn({)31 b(set)g(the)f(n)m(um)m(b)s(er) f(of)i(used)e(b)s(dd)g(v)-5 b(ariables)p 236 2451 3544 12 v 236 2656 a Fm(int)47 b(bdd_setvarnum\(int)c(num\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(This)31 b(function)h(is)g(used)g(to)i(de\014ne)e(the)h(n)m(um)m(b)s (er)e(of)i(v)-5 b(ariables)32 b(used)g(in)g(the)h(b)s(dd)e(pac)m(k)-5 b(age.)50 b(It)33 b(ma)m(y)236 3161 y(b)s(e)25 b(called)g(more)h(than)g (one)g(time,)g(but)g(only)e(to)j(increase)f(the)g(n)m(um)m(b)s(er)e(of) i(v)-5 b(ariables.)38 b(The)25 b(argumen)m(t)236 3274 y Fm(num)30 b Fn(is)f(the)i(n)m(um)m(b)s(er)e(of)h(v)-5 b(ariables)29 b(to)i(use.)236 3537 y Fo(Return)k(v)-6 b(alue)p 236 3591 V 236 3704 a Fn(Zero)31 b(on)f(succes,)h(otherwise)f (a)g(negativ)m(e)i(error)e(co)s(de.)236 3968 y Fo(See)35 b(also)p 236 4022 V 236 4135 a Fn(b)s(dd)p 397 4135 28 4 v 31 w(ith)m(v)-5 b(ar,)30 b(b)s(dd)p 872 4135 V 31 w(v)-5 b(arn)m(um,)30 b(b)s(dd)p 1413 4135 V 30 w(extv)-5 b(arn)m(um)1962 5989 y(61)p eop %%Page: 62 70 62 69 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(setv)-6 b(arorder)96 b Fn({)31 b(set)g(a)f(sp)s (eci\014c)f(v)-5 b(ariable)30 b(order)p 236 250 3544 12 v 236 455 a Fm(void)47 b(bdd_setvarorder\(int)42 b(*neworder\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(This)c(function)g (sets)i(the)g(curren)m(t)g(v)-5 b(ariable)38 b(order)h(to)i(b)s(e)e (the)h(one)g(de\014ned)e(b)m(y)i Fm(neworder)p Fn(.)66 b(The)236 960 y(parameter)28 b Fm(neworder)d Fn(is)h(in)m(terpreted)g (as)i(a)f(sequence)h(of)f(v)-5 b(ariable)26 b(indecies)g(and)h(the)g (new)g(v)-5 b(ariable)236 1073 y(order)31 b(is)g(exactly)i(this)d (sequence.)45 b(The)32 b(arra)m(y)g Ff(must)g Fn(con)m(tain)g(all)f (the)h(v)-5 b(ariables)30 b(de\014ned)g(so)i(far.)45 b(If)236 1186 y(for)32 b(instance)g(the)g(curren)m(t)f(n)m(um)m(b)s(er) g(of)h(v)-5 b(ariables)31 b(is)g(3)h(and)f Fm(neworder)f Fn(con)m(tains)i([1)p Fj(;)15 b Fn(0)p Fj(;)g Fn(2])35 b(then)c(the)236 1298 y(new)f(v)-5 b(ariable)29 b(order)h(is)g Fj(v)1138 1312 y Fh(1)1202 1298 y Fj(<)25 b(v)1342 1312 y Fh(0)1407 1298 y Fj(<)g(v)1547 1312 y Fh(2)1586 1298 y Fn(.)236 1562 y Fo(See)35 b(also)p 236 1616 V 236 1729 a Fn(b)s(dd)p 397 1729 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 1729 V 31 w(prin)m(torder)p 236 2080 3544 12 v 236 2193 a Fo(b)s(dd)p 419 2193 32 4 v 38 w(simplify)95 b Fn({)31 b(coudert)f(and)g(Madre's)h(restrict)f(function)p 236 2247 3544 12 v 236 2452 a Fm(BDD)47 b(bdd_simplify\(BDD)c(f,)48 b(BDD)f(d\))236 2677 y Fo(Description)p 236 2731 3544 5 v 236 2844 a Fn(T)-8 b(ries)30 b(to)h(simplify)c(the)j(BDD)i Fm(f)e Fn(b)m(y)g(restricting)f(it)h(to)h(the)f(domaine)g(co)m(v)m (ered)i(b)m(y)e Fm(d)p Fn(.)40 b(No)31 b(c)m(hec)m(ks)h(are)236 2957 y(done)f(to)h(see)g(if)e(the)i(result)e(is)g(actually)h(smaller)e (than)i(the)h(input.)41 b(This)30 b(can)h(b)s(e)g(done)g(b)m(y)g(the)g (user)236 3070 y(with)e(a)i(call)f(to)h Fm(bdd)p 947 3070 29 4 v 33 w(nodecount)p Fn(.)236 3333 y Fo(Return)k(v)-6 b(alue)p 236 3387 3544 5 v 236 3500 a Fn(The)30 b(simpli\014ed)d(BDD) 236 3763 y Fo(See)35 b(also)p 236 3817 V 236 3930 a Fn(b)s(dd)p 397 3930 28 4 v 31 w(restrict)p 236 4263 3544 12 v 236 4376 a Fo(b)s(dd)p 419 4376 32 4 v 38 w(stats)95 b Fn({)31 b(returns)e(some)i(status)f(information)f(ab)s(out)h(the)h(b)s(dd)d (pac)m(k)-5 b(age)p 236 4431 3544 12 v 236 4635 a Fm(void)47 b(bdd_stats\(bddStat*)c(stat\))236 4860 y Fo(Description)p 236 4915 3544 5 v 236 5027 a Fn(This)22 b(function)g(acquires)h (information)f(ab)s(out)h(the)h(in)m(ternal)f(state)i(of)e(the)h(b)s (dd)e(pac)m(k)-5 b(age.)40 b(The)23 b(status)236 5140 y(information)29 b(is)g(written)h(in)m(to)g(the)h Fm(stat)e Fn(argumen)m(t.)236 5404 y Fo(See)35 b(also)p 236 5458 V 236 5571 a Fn(b)s(ddStat)1962 5989 y(62)p eop %%Page: 63 71 63 70 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(strm)p 670 196 V 37 w(ho)s(ok)96 b Fn({)31 b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p 236 250 3544 12 v 236 455 a Fm(bddstrmhandler)44 b (bdd_strm_hook\(bddstrmhand)o(ler)d(handler\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)23 b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(BDDs)i(is)e (used)f(to)j(con)m(v)m(ert)g(the)f(BDD)h(v)-5 b(ariable)22 b(n)m(um)m(b)s(er)236 960 y(in)m(to)34 b(something)e(readable)h(b)m(y)h (the)f(end)g(user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin)m (t)i(a)i(string)e(name)236 1073 y(instead)e(of)g(the)h(n)m(um)m(b)s (er.)39 b(A)31 b(handler)d(could)i(lo)s(ok)g(lik)m(e)f(this:)236 1260 y Fm(void)47 b(printhandler\(ostream)42 b(&o,)47 b(int)g(var\))236 1373 y({)379 1486 y(extern)f(char)h(**names;)379 1599 y(o)h(<<)f(names[var];)236 1712 y(})236 1900 y Fn(The)30 b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g(lik)m(e)f(this:) 39 b Fm(bdd)p 2510 1900 29 4 v 34 w(strm)p 2736 1900 V 33 w(hook\(printhandler\))p Fn(.)327 2012 y(No)33 b(default)e (handler)g(is)g(supplied.)43 b(The)32 b(argumen)m(t)h Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h(handler)e(is)236 2125 y(needed.)236 2389 y Fo(Return)35 b(v)-6 b(alue)p 236 2443 3544 5 v 236 2556 a Fn(The)30 b(old)g(handler)236 2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(b)s(dd)p 397 2986 28 4 v 31 w(prin)m(tset,)30 b(b)s(dd)p 946 2986 V 31 w(\014le)p 1094 2986 V 32 w(ho)s(ok,)g(fdd)p 1503 2986 V 32 w(strm)p 1718 2986 V 32 w(ho)s(ok)p 236 3337 3544 12 v 236 3450 a Fo(b)s(dd)p 419 3450 32 4 v 38 w(supp)s(ort)96 b Fn({)31 b(returns)e(the)h(v)-5 b(ariable)29 b(supp)s(ort)g(of)i(a)f (BDD)p 236 3504 3544 12 v 236 3709 a Fm(BDD)47 b(bdd_support\(BDD)d (r\))236 3934 y Fo(Description)p 236 3988 3544 5 v 236 4101 a Fn(Finds)29 b(all)g(the)i(v)-5 b(ariables)29 b(that)i Fm(r)f Fn(dep)s(ends)e(on.)41 b(That)30 b(is)g(the)g(supp)s(ort)f(of)h Fm(r)p Fn(.)236 4364 y Fo(Return)35 b(v)-6 b(alue)p 236 4418 V 236 4531 a Fn(A)31 b(BDD)g(v)-5 b(ariable)29 b(set.)236 4794 y Fo(See)35 b(also)p 236 4849 V 236 4962 a Fn(b)s(dd)p 397 4962 28 4 v 31 w(mak)m(eset)1962 5989 y(63)p eop %%Page: 64 72 64 71 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(sw)m(ap)m(v)-6 b(ar)96 b Fn({)30 b(Sw)m(ap)g(t)m(w)m(o) i(BDD)f(v)-5 b(ariables)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bdd_swapvar\(int)d(v1,)j(int)g(v2\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Use)40 b Fm(bdd)p 570 847 29 4 v 33 w(swapvar)e Fn(to)h(sw)m(ap)h(the)f(p)s (osition)e(\(in)i(the)g(curren)m(t)g(v)-5 b(ariable)38 b(order\))h(of)g(the)h(t)m(w)m(o)g(BDD)236 960 y(v)-5 b(ariables)30 b Fm(v1)h Fn(and)g Fm(v2)p Fn(.)43 b(There)31 b(are)h(no)f(constrain)m(ts)g(on)h(the)f(p)s(osition)f(of)h(the)h(t)m (w)m(o)h(v)-5 b(ariables)30 b(b)s(efore)236 1073 y(the)k(call.)49 b(This)31 b(function)h(ma)m(y)i Ff(not)h Fn(b)s(e)d(used)h(together)i (with)d(user)h(de\014ned)f(v)-5 b(ariable)32 b(blo)s(c)m(ks.)49 b(The)236 1186 y(sw)m(ap)40 b(is)f(done)h(b)m(y)g(a)g(series)g(of)g (adjacen)m(t)h(v)-5 b(ariable)39 b(sw)m(aps)h(and)f(requires)g(the)h (whole)f(no)s(de)h(table)236 1298 y(to)35 b(b)s(e)d(rehashed)h(t)m (wice)h(for)g(eac)m(h)g(call)f(to)h Fm(bdd)p 1882 1298 V 34 w(swapvar)p Fn(.)48 b(It)34 b(should)d(therefore)j(not)g(b)s(e)f (used)g(w)m(ere)236 1411 y(e\016ciency)e(is)e(a)i(ma)5 b(jor)30 b(concern.)236 1675 y Fo(Return)35 b(v)-6 b(alue)p 236 1729 3544 5 v 236 1842 a Fn(Zero)31 b(on)f(succes)h(and)e(a)i (negativ)m(e)h(error)e(co)s(de)g(otherwise.)236 2105 y Fo(See)35 b(also)p 236 2159 V 236 2272 a Fn(b)s(dd)p 397 2272 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 2272 V 31 w(addv)-5 b(arblo)s(c)m(k)p 236 2623 3544 12 v 236 2736 a Fo(b)s(dd)p 419 2736 32 4 v 38 w(true)95 b Fn({)31 b(returns)e(the)i(constan)m(t)g(true)f(b)s(dd)p 236 2790 3544 12 v 236 2995 a Fm(BDD)47 b(bdd_true\(void\))236 3220 y Fo(Description)p 236 3274 3544 5 v 236 3387 a Fn(This)40 b(function)f(returns)h(the)i(constan)m(t)g(true)f(b)s(dd)e (and)i(can)g(freely)g(b)s(e)f(used)h(together)h(with)e(the)236 3500 y Fm(bddtrue)29 b Fn(and)g Fm(bddfalse)f Fn(constan)m(ts.)236 3763 y Fo(Return)35 b(v)-6 b(alue)p 236 3817 V 236 3930 a Fn(The)30 b(constan)m(t)i(true)e(b)s(dd)236 4193 y Fo(See)35 b(also)p 236 4248 V 236 4360 a Fn(b)s(dd)p 397 4360 28 4 v 31 w(false,)30 b(b)s(ddtrue,)f(b)s(ddfalse)1962 5989 y(64)p eop %%Page: 65 73 65 72 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(unique)96 b Fn({)31 b(unique)d(quan)m(ti\014cation)i (of)g(v)-5 b(ariables)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_unique\(BDD)d(r,)j(BDD)g(var\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Remo)m(v)m(es)41 b(all)c(o)s(ccurences)i (in)f Fm(r)g Fn(of)h(v)-5 b(ariables)37 b(in)h(the)h(set)g Fm(var)f Fn(b)m(y)g(unique)f(quan)m(ti\014cation.)65 b(This)236 960 y(t)m(yp)s(e)26 b(of)g(quan)m(ti\014cation)g(uses)f(a)i (X)m(OR)f(op)s(erator)g(instead)f(of)h(an)g(OR)g(op)s(erator)g(as)g(in) f(the)h(existen)m(tial)236 1073 y(quan)m(ti\014cation,)k(and)g(an)g (AND)h(op)s(erator)g(as)g(in)e(the)h(univ)m(ersal)f(quan)m (ti\014cation.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 V 236 1503 a Fn(The)30 b(quan)m(ti\014ed)f(BDD.)236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(b)s(dd)p 397 1933 28 4 v 31 w(exist,)30 b(b)s(dd)p 824 1933 V 31 w(forall,)g(b)s(dd)p 1272 1933 V 30 w(mak)m(eset)p 236 2284 3544 12 v 236 2397 a Fo(b)s(dd)p 419 2397 32 4 v 38 w(v)-6 b(ar)96 b Fn({)30 b(gets)i(the)e(v)-5 b(ariable)30 b(lab)s(eling)d(the)k(b)s(dd)p 236 2451 3544 12 v 236 2656 a Fm(int)47 b(bdd_var\(BDD)e(r\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(Gets)31 b(the)g(v)-5 b(ariable)29 b(lab)s(eling)f(the)j(b)s(dd)d Fm(r)p Fn(.)236 3311 y Fo(Return)35 b(v)-6 b(alue)p 236 3366 V 236 3479 a Fn(The)30 b(v)-5 b(ariable)29 b(n)m(um)m(b)s(er.)p 236 3812 3544 12 v 236 3925 a Fo(b)s(dd)p 419 3925 32 4 v 38 w(v)-6 b(ar2lev)m(el)96 b Fn({)31 b(F)-8 b(etc)m(h)32 b(the)f(lev)m(el)f(of)g(a)h(sp)s(eci\014c)e(BDD)j(v)-5 b(ariable)p 236 3979 3544 12 v 236 4184 a Fm(int)47 b (bdd_var2level\(int)c(var\))236 4409 y Fo(Description)p 236 4463 3544 5 v 236 4576 a Fn(Returns)30 b(the)g(p)s(osition)f(of)h (the)h(v)-5 b(ariable)29 b Fm(var)g Fn(in)h(the)g(curren)m(t)g(v)-5 b(ariable)29 b(order.)236 4839 y Fo(See)35 b(also)p 236 4893 V 236 5006 a Fn(b)s(dd)p 397 5006 28 4 v 31 w(reorder,)30 b(b)s(dd)p 923 5006 V 31 w(lev)m(el2v)-5 b(ar)1962 5989 y(65)p eop %%Page: 66 74 66 73 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(v)-6 b(arblo)s(c)m(k)g(all)97 b Fn({)31 b(add)e(a)i(v)-5 b(ariable)29 b(blo)s(c)m(k)h(for)g(all)g(v)-5 b(ariables)p 236 250 3544 12 v 236 455 a Fm(void)47 b (bdd_varblockall\(void\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Adds)40 b(a)i(v)-5 b(ariable)40 b(blo)s(c)m(k)g(for)h(all)f(BDD)i(v)-5 b(ariables)40 b(declared)h(so)g(far.)73 b(Eac)m(h)41 b(blo)s(c)m(k)g(con)m(tains)g (one)236 960 y(v)-5 b(ariable)26 b(only)-8 b(.)39 b(More)27 b(v)-5 b(ariable)25 b(blo)s(c)m(ks)h(can)h(b)s(e)f(added)g(later)h (with)e(the)i(use)f(of)h Fm(bdd)p 3155 960 29 4 v 34 w(addvarblock)c Fn({)236 1073 y(in)29 b(this)g(case)i(the)f(tree)h(of)f (v)-5 b(ariable)28 b(blo)s(c)m(ks)i(will)d(ha)m(v)m(e)k(the)f(blo)s(c)m (ks)g(of)g(single)f(v)-5 b(ariables)28 b(as)i(the)h(leafs.)236 1336 y Fo(See)k(also)p 236 1390 3544 5 v 236 1503 a Fn(b)s(dd)p 397 1503 28 4 v 31 w(addv)-5 b(arblo)s(c)m(k,)30 b(b)s(dd)p 1120 1503 V 30 w(in)m(taddv)-5 b(arblo)s(c)m(k)p 236 1854 3544 12 v 236 1967 a Fo(b)s(dd)p 419 1967 32 4 v 38 w(v)f(arn)m(um)95 b Fn({)31 b(returns)e(the)i(n)m(um)m(b)s(er)e(of)h (de\014ned)f(v)-5 b(ariables)p 236 2021 3544 12 v 236 2226 a Fm(int)47 b(bdd_varnum\(void\))236 2451 y Fo(Description)p 236 2505 3544 5 v 236 2618 a Fn(This)29 b(function)g(returns)g(the)i(n) m(um)m(b)s(er)e(of)h(v)-5 b(ariables)29 b(de\014ned)g(b)m(y)i(a)f(call) g(to)h Fm(bdd)p 3025 2618 29 4 v 34 w(setvarnum)p Fn(.)236 2881 y Fo(Return)k(v)-6 b(alue)p 236 2935 3544 5 v 236 3048 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(de\014ned)e(v)-5 b(ariables)236 3311 y Fo(See)35 b(also)p 236 3366 V 236 3479 a Fn(b)s(dd)p 397 3479 28 4 v 31 w(setv)-5 b(arn)m(um,)30 b(b)s(dd)p 1049 3479 V 31 w(ith)m(v)-5 b(ar)p 236 3829 3544 12 v 236 3942 a Fo(b)s(dd)p 419 3942 32 4 v 38 w(v)f(arpro\014le) 96 b Fn({)31 b(returns)e(a)i(v)-5 b(ariable)29 b(pro\014le)p 236 3997 3544 12 v 236 4201 a Fm(int)47 b(*bdd_varprofile\(BDD)c(r\)) 236 4426 y Fo(Description)p 236 4481 3544 5 v 236 4594 a Fn(Coun)m(ts)34 b(the)g(n)m(um)m(b)s(er)e(of)i(times)f(eac)m(h)i(v)-5 b(ariable)32 b(o)s(ccurs)i(in)e(the)i(b)s(dd)e Fm(r)p Fn(.)50 b(The)33 b(result)g(is)f(stored)i(and)236 4706 y(returned)h(in)g(an)h(in)m(teger)g(arra)m(y)h(where)e(the)h(i'th)g(p)s (osition)e(stores)i(the)g(n)m(um)m(b)s(er)f(of)h(times)g(the)g(i'th)236 4819 y(v)-5 b(ariable)30 b(o)s(ccured)g(in)f(the)i(BDD.)h(It)f(is)f (the)h(users)e(resp)s(onsibilit)m(y)e(to)k(free)g(the)g(arra)m(y)g (again)g(using)e(a)236 4932 y(call)h(to)h Fm(free)p Fn(.)236 5195 y Fo(Return)k(v)-6 b(alue)p 236 5250 V 236 5363 a Fn(A)31 b(p)s(oin)m(ter)e(to)i(an)f(in)m(teger)h(arra)m(y)g(with)e (the)i(pro\014le)e(or)h(NULL)g(if)g(an)g(error)g(o)s(ccured.)1962 5989 y(66)p eop %%Page: 67 75 67 74 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(v)m(eccomp)s(ose)96 b Fn({)31 b(sim)m(ultaneous)e (functional)g(comp)s(osition)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_veccompose\(BDD)c(f,)k(bddPair)f(*pair\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Uses)c(the)g (pairs)f(of)h(v)-5 b(ariables)40 b(and)i(BDDs)g(in)f Fm(pair)g Fn(to)h(mak)m(e)h(the)f(sim)m(ultaneous)f(substitution:)236 960 y Fj(f)10 b Fn([)p Fj(g)359 974 y Fh(1)399 960 y Fj(=V)497 974 y Fh(1)536 960 y Fj(;)15 b(:)g(:)g(:)i(;)e(g)781 974 y Fi(n)829 960 y Fj(=V)927 974 y Fi(n)974 960 y Fn(].)43 b(In)30 b(this)g(w)m(a)m(y)i(one)f(or)g(more)g(BDDs)h(ma)m(y)g(b)s(e)e (substituted)g(in)f(one)i(step.)43 b(The)236 1073 y(BDDs)h(in)d Fm(pair)g Fn(ma)m(y)i(dep)s(end)d(on)j(the)f(v)-5 b(ariables)41 b(they)i(are)g(substituting.)74 b Fm(bdd)p 3209 1073 29 4 v 33 w(compose)41 b Fn(ma)m(y)236 1186 y(b)s(e)d(used)g(instead)g (of)h Fm(bdd)p 1168 1186 V 33 w(replace)e Fn(but)h(is)f(not)i(as)g (e\016cien)m(t)g(when)f Fj(g)2765 1200 y Fi(i)2832 1186 y Fn(is)f(a)i(single)f(v)-5 b(ariable,)39 b(the)236 1298 y(same)j(applies)e(to)i Fm(bdd)p 1062 1298 V 33 w(restrict)p Fn(.)72 b(Note)43 b(that)f(sim)m(ultaneous)e(substitution)f(is)i(not)h (necessarily)236 1411 y(the)k(same)f(as)h(rep)s(eated)f(substitution.) 83 b(Example:)70 b(\()p Fj(x)2279 1425 y Fh(1)2349 1411 y Fc(_)29 b Fj(x)2491 1425 y Fh(2)2531 1411 y Fn(\)[)p Fj(x)2643 1425 y Fh(3)2683 1411 y Fj(=x)2780 1425 y Fh(1)2820 1411 y Fj(;)15 b(x)2912 1425 y Fh(4)2952 1411 y Fj(=x)3049 1425 y Fh(3)3088 1411 y Fn(])51 b(=)e(\()p Fj(x)3371 1425 y Fh(3)3441 1411 y Fc(_)30 b Fj(x)3584 1425 y Fh(2)3623 1411 y Fn(\))51 b Fc(6)p Fn(=)236 1524 y(\(\()p Fj(x)358 1538 y Fh(1)419 1524 y Fc(_)19 b Fj(x)551 1538 y Fh(2)591 1524 y Fn(\)[)p Fj(x)703 1538 y Fh(3)743 1524 y Fj(=x)840 1538 y Fh(1)880 1524 y Fn(]\)[)p Fj(x)1017 1538 y Fh(4)1057 1524 y Fj(=x)1154 1538 y Fh(3)1194 1524 y Fn(])25 b(=)g(\()p Fj(x)1427 1538 y Fh(4)1487 1524 y Fc(_)20 b Fj(x)1620 1538 y Fh(2)1659 1524 y Fn(\).)236 1787 y Fo(Return)35 b(v)-6 b(alue)p 236 1842 3544 5 v 236 1955 a Fn(The)30 b(comp)s(osed)g(BDD)236 2218 y Fo(See)35 b(also)p 236 2272 V 236 2385 a Fn(b)s(dd)p 397 2385 28 4 v 31 w(comp)s(ose,)c(b)s (dd)p 976 2385 V 31 w(replace,)f(b)s(dd)p 1496 2385 V 31 w(restrict)p 236 2736 3544 12 v 236 2849 a Fo(b)s(dd)p 419 2849 32 4 v 38 w(v)m(ersionn)m(um)96 b Fn({)30 b(returns)g(the)g(v) m(ersion)g(n)m(um)m(b)s(er)f(of)i(the)f(b)s(dd)f(pac)m(k)-5 b(age)p 236 2903 3544 12 v 236 3108 a Fm(int)47 b (bdd_versionnum\(void\))236 3333 y Fo(Description)p 236 3387 3544 5 v 236 3500 a Fn(This)26 b(function)g(returns)h(the)h(v)m (ersion)f(n)m(um)m(b)s(er)f(of)i(the)g(b)s(dd)e(pac)m(k)-5 b(age.)42 b(The)27 b(n)m(um)m(b)s(er)f(is)h(in)f(the)i(range)236 3613 y(10-99)33 b(for)d(v)m(ersion)g(1.0)h(to)g(9.9.)236 3876 y Fo(See)k(also)p 236 3930 V 236 4043 a Fn(b)s(dd)p 397 4043 28 4 v 31 w(v)m(ersionstr)p 236 4376 3544 12 v 236 4489 a Fo(b)s(dd)p 419 4489 32 4 v 38 w(v)m(ersionstr)96 b Fn({)31 b(returns)e(a)i(text)g(string)f(with)f(v)m(ersion)h (information)p 236 4543 3544 12 v 236 4748 a Fm(char*)47 b(bdd_versionstr\(void\))236 4973 y Fo(Description)p 236 5027 3544 5 v 236 5140 a Fn(This)24 b(function)h(returns)g(a)h (text)h(string)e(with)g(information)f(ab)s(out)i(the)g(v)m(ersion)g(of) g(the)g(b)s(dd)e(pac)m(k)-5 b(age.)236 5404 y Fo(See)35 b(also)p 236 5458 V 236 5571 a Fn(b)s(dd)p 397 5571 28 4 v 31 w(v)m(ersionn)m(um)1962 5989 y(67)p eop %%Page: 68 76 68 75 bop 236 83 3544 12 v 236 196 a Fo(b)s(dd)p 419 196 32 4 v 38 w(xor)96 b Fn({)31 b(The)f(logical)f('xor')i(of)g(t)m(w)m (o)h(BDDs)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(bdd_xor\(BDD)e(l,)i (BDD)g(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(This)29 b(a)i(wrapp)s(er)d(that)j(calls)f Fm(bdd)p 1426 847 29 4 v 33 w(apply\(l,r,bddop)p 2179 847 V 30 w(xor\))p Fn(.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 3544 5 v 236 1277 a Fn(The)30 b(logical)g('xor')h(of) f Fm(l)g Fn(and)g Fm(r)p Fn(.)236 1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)s(dd)p 397 1707 28 4 v 31 w(apply)-8 b(,)30 b(b)s(dd)p 852 1707 V 30 w(or,)h(b)s(dd)p 1175 1707 V 31 w(and)p 236 2058 3544 12 v 236 2171 a Fo(b)s(ddfalse)61 b Fn({)31 b(the)f(constan)m(t)i(false)e(b)s(dd)p 236 2225 V 236 2423 a Fm(extern)46 b(const)h(BDD)g(bddfalse;)236 2648 y Fo(Description)p 236 2702 3544 5 v 236 2815 a Fn(This)29 b(b)s(dd)f(holds)h(the)i(constan)m(t)g(false)f(v)-5 b(alue)236 3078 y Fo(See)35 b(also)p 236 3132 V 236 3245 a Fn(b)s(ddtrue,)29 b(b)s(dd)p 769 3245 28 4 v 30 w(true,)i(b)s(dd)p 1173 3245 V 31 w(false)p 236 3596 3544 12 v 236 3709 a Fo(b)s(ddtrue)96 b Fn({)30 b(the)h(constan)m(t)h(true)e(b)s(dd)p 236 3763 V 236 3960 a Fm(extern)46 b(const)h(BDD)g(bddtrue;)236 4185 y Fo(Description)p 236 4240 3544 5 v 236 4353 a Fn(This)29 b(b)s(dd)f(holds)h(the)i(constan)m(t)g(true)f(v)-5 b(alue)236 4616 y Fo(See)35 b(also)p 236 4670 V 236 4783 a Fn(b)s(ddfalse,)29 b(b)s(dd)p 782 4783 28 4 v 30 w(true,)i(b)s(dd)p 1186 4783 V 31 w(false)1962 5989 y(68)p eop %%Page: 69 77 69 76 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)97 b Fn({)30 b(A)h(b)s(o)s(olean)e(v)m(ector)p 236 250 V 236 447 a Fm(typedef)46 b(struct)g(s_bvec)236 560 y({)379 673 y(int)h(bitnum;)379 786 y(BDD)g(*bitvec;)236 899 y(})h(BVEC;)236 1125 y(typedef)e(BVEC)h(bvec;)236 1350 y Fo(Description)p 236 1404 3544 5 v 236 1517 a Fn(This)33 b(data)i(structure)f(is)g(used)f(to)j(store)f(b)s(o)s(olean)e(v)m (ectors.)55 b(The)34 b(\014eld)f Fm(bitnum)g Fn(is)g(the)i(n)m(um)m(b)s (er)e(of)236 1630 y(elemen)m(ts)e(in)f(the)h(v)m(ector)h(and)e(the)h (\014eld)e Fm(bitvec)g Fn(con)m(tains)i(the)g(actual)g(BDDs)h(in)e(the) h(v)m(ector.)43 b(The)236 1743 y(C++)30 b(v)m(ersion)f(of)i Fm(bvec)e Fn(is)h(do)s(cumen)m(ted)g(at)h(the)f(b)s(eginning)e(of)j (this)e(do)s(cumen)m(t)p 236 2093 3544 12 v 236 2206 a Fo(b)m(v)m(ec)p 443 2206 32 4 v 39 w(add)95 b Fn({)31 b(builds)c(a)k(b)s(o)s(olean)e(v)m(ector)j(for)e(addition)p 236 2261 3544 12 v 236 2465 a Fm(bvec)47 b(bvec_add\(bvec)d(l,)j(bvec)g (r\))236 2690 y Fo(Description)p 236 2745 3544 5 v 236 2858 a Fn(Builds)41 b(a)j(new)f(b)s(o)s(olean)f(v)m(ector)j(that)f (represen)m(ts)f(the)h(addition)d(of)j(t)m(w)m(o)g(other)g(v)m(ectors.) 81 b(Eac)m(h)236 2970 y(elemen)m(t)31 b Fj(x)624 2984 y Fi(i)683 2970 y Fn(in)e(the)h(result)f(will)f(represen)m(t)j(the)f (function)463 3158 y Fj(x)515 3172 y Fi(i)569 3158 y Fn(=)25 b Fj(l)692 3172 y Fi(i)750 3158 y Fn(xor)31 b Fj(r)951 3172 y Fi(i)1009 3158 y Fn(xor)g Fj(c)1208 3172 y Fi(i)p Fg(\000)p Fh(1)236 3346 y Fn(where)f(the)h(carry)f(in)f Fj(c)1036 3360 y Fi(i)1095 3346 y Fn(is)463 3533 y Fj(c)502 3547 y Fi(i)556 3533 y Fn(=)c(\()p Fj(l)714 3547 y Fi(i)773 3533 y Fn(and)30 b Fj(r)991 3547 y Fi(i)1019 3533 y Fn(\))h(or)f(\()p Fj(c)1270 3547 y Fi(i)p Fg(\000)p Fh(1)1420 3533 y Fn(and)f(\()p Fj(l)1658 3547 y Fi(i)1717 3533 y Fn(or)i Fj(r)1870 3547 y Fi(i)1898 3533 y Fn(\)\))p Fj(:)236 3721 y Fn(It)g(is)e(imp)s(ortan)m (t)h(for)g(e\016cency)h(that)g(the)g(BDD)g(v)-5 b(ariables)29 b(used)h(in)f Fm(l)h Fn(and)g Fm(r)g Fn(are)g(in)m(terlea)m(v)m(ed.)236 3984 y Fo(Return)35 b(v)-6 b(alue)p 236 4038 V 236 4151 a Fn(The)30 b(result)f(of)i(the)f(addition)f(\(whic)m(h)h(is)f(already) h(reference)h(coun)m(ted\))236 4414 y Fo(See)k(also)p 236 4469 V 236 4582 a Fn(b)m(v)m(ec)p 414 4582 28 4 v 34 w(sub,)30 b(b)m(v)m(ec)p 814 4582 V 34 w(m)m(ul,)f(b)m(v)m(ec)p 1225 4582 V 34 w(shl)1962 5989 y(69)p eop %%Page: 70 78 70 77 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(addref)95 b Fn({)31 b(increase)f(reference)h(coun)m (t)g(of)f(a)h(b)s(o)s(olean)e(v)m(ector)p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_addref\(bvec)c(v\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Use)32 b(this)f(function)f(to)i(increase)g(the)f(reference)h(coun)m(t)h(of)e (all)g(BDDs)h(in)f(a)h Fm(v)p Fn(.)43 b(Please)32 b(note)g(that)h(all) 236 960 y(b)s(o)s(olean)d(v)m(ectors)h(returned)f(from)g(BuDDy)h(are)f (reference)h(coun)m(ted)g(from)f(the)h(b)s(eginning.)236 1223 y Fo(Return)k(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j Fm(v)236 1653 y Fo(See)j(also)p 236 1707 V 236 1820 a Fn(b)m(v)m(ec)p 414 1820 28 4 v 34 w(delref)p 236 2154 3544 12 v 236 2266 a Fo(b)m(v)m(ec)p 443 2266 32 4 v 39 w(co)s(erce)96 b Fn({)31 b(adjust)f(the)g(size)g(of)h(a)g(b)s(o)s(olean)e(v)m(ector)p 236 2321 3544 12 v 236 2526 a Fm(bvec)47 b(bvec_coerce\(int)c(bitnum,)j (bvec)h(v\))236 2751 y Fo(Description)p 236 2805 3544 5 v 236 2918 a Fn(Build)27 b(a)i(b)s(o)s(olean)e(v)m(ector)j(with)e Fm(bitnum)e Fn(elemen)m(ts)j(copied)f(from)g Fm(v)p Fn(.)40 b(If)28 b(the)h(n)m(um)m(b)s(er)e(of)i(elemen)m(ts)g(in)236 3031 y Fm(v)i Fn(is)g(greater)h(than)f Fm(bitnum)f Fn(then)h(the)g (most)h(signi\014can)m(t)e(bits)g(are)i(remo)m(v)m(ed,)h(otherwise)e (if)f(n)m(um)m(b)s(er)236 3143 y(is)g(smaller)f(then)h(the)g(v)m(ector) i(is)e(padded)f(with)g(constan)m(t)i(false)g(BDDs)g(\(zeros\).)236 3407 y Fo(Return)k(v)-6 b(alue)p 236 3461 V 236 3574 a Fn(The)30 b(new)g(b)s(o)s(olean)f(v)m(ector)j(\(whic)m(h)e(is)f (already)h(reference)h(coun)m(ted\))p 236 3930 3544 12 v 236 4043 a Fo(b)m(v)m(ec)p 443 4043 32 4 v 39 w(con)96 b Fn({)31 b(Build)d(a)j(b)s(o)s(olean)e(v)m(ector)j(represen)m(ting)e (an)g(in)m(teger)h(v)-5 b(alue)p 236 4097 3544 12 v 236 4302 a Fm(bvec)47 b(bvec_con\(int)d(bitnum,)i(int)h(val\))236 4527 y Fo(Description)p 236 4581 3544 5 v 236 4694 a Fn(Builds)32 b(a)i(b)s(o)s(olean)e(v)m(ector)k(that)e(represen)m(ts)g (the)g(v)-5 b(alue)33 b Fm(val)g Fn(using)f Fm(bitnum)g Fn(bits.)50 b(The)33 b(v)-5 b(alue)33 b(will)236 4807 y(b)s(e)d(represen)m(ted)g(with)f(the)i(LSB)f(at)h(the)g(p)s(osition)d (0)j(and)f(the)g(MSB)h(at)g(p)s(osition)d Fm(bitnum)p Fn(-1.)236 5070 y Fo(Return)35 b(v)-6 b(alue)p 236 5124 V 236 5237 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j(\(whic)m(h)e(is)f (already)h(reference)h(coun)m(ted\))236 5500 y Fo(See)k(also)p 236 5554 V 236 5667 a Fn(b)m(v)m(ec)p 414 5667 28 4 v 34 w(true,)c(b)m(v)m(ec)p 839 5667 V 34 w(false,)f(b)m(v)m(ec)p 1276 5667 V 34 w(v)-5 b(ar)1962 5989 y(70)p eop %%Page: 71 79 71 78 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(cop)m(y)96 b Fn({)31 b(create)h(a)f(cop)m(y)g(of)f (a)h(b)m(v)m(ec)p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_copy\(bvec)d(src\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)30 b(a)g(cop)m(y)i(of)e Fm(src)p Fn(.)40 b(The)30 b(result)f(is)g(reference)i(coun)m(ted.)236 1110 y Fo(See)k(also)p 236 1164 V 236 1277 a Fn(b)m(v)m(ec)p 414 1277 28 4 v 34 w(con)p 236 1610 3544 12 v 236 1723 a Fo(b)m(v)m(ec)p 443 1723 32 4 v 39 w(delref)95 b Fn({)31 b(decrease)g(the)g(reference)g(coun)m(t)g(of)f(a)h(b)s(o)s(olean)e(v)m (ector)p 236 1777 3544 12 v 236 1982 a Fm(bvec)47 b(bvec_delref\(bvec)c (v\))236 2207 y Fo(Description)p 236 2262 3544 5 v 236 2374 a Fn(Use)31 b(this)e(function)g(to)i(decrease)h(the)e(reference)h (coun)m(t)g(of)g(all)e(the)i(BDDs)g(in)e Fm(v)p Fn(.)236 2638 y Fo(Return)35 b(v)-6 b(alue)p 236 2692 V 236 2805 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j Fm(v)236 3068 y Fo(See)j(also)p 236 3122 V 236 3235 a Fn(b)m(v)m(ec)p 414 3235 28 4 v 34 w(addref)p 236 3568 3544 12 v 236 3681 a Fo(b)m(v)m(ec)p 443 3681 32 4 v 39 w(div)95 b Fn({)31 b(builds)c(a)k(b)s(o)s(olean)f(v)m(ector)h(for)g(division)p 236 3735 3544 12 v 236 3940 a Fm(int)47 b(bvec_div\(bvec)d(l,)j(bvec)g (r,)g(bvec)g(*res,)f(bvec)h(*rem\))236 4165 y Fo(Description)p 236 4219 3544 5 v 236 4332 a Fn(Builds)32 b(a)j(new)e(b)s(o)s(olean)g (v)m(ector)j(represen)m(ting)e(the)g(in)m(teger)h(division)c(of)j Fm(l)g Fn(with)f Fm(r)p Fn(.)52 b(The)33 b(result)g(of)236 4445 y(the)e(division)c(will)h(b)s(e)h(stored)i(in)e Fm(res)g Fn(and)h(the)g(remainder)f(of)i(the)f(division)d(will)h(b)s(e) i(stored)g(in)f Fm(rem)p Fn(.)236 4558 y(Both)39 b(v)m(ectors)g(should) d(b)s(e)h(initialized)e(as)j(the)g(function)e(will)f(try)j(to)g (release)h(the)f(no)s(des)f(used)g(b)m(y)236 4671 y(them.)k(If)30 b(an)g(error)g(o)s(ccurs)g(then)g(the)h(no)s(des)e(will)f Ff(not)j Fn(b)s(e)f(freed.)236 4934 y Fo(Return)35 b(v)-6 b(alue)p 236 4988 V 236 5101 a Fn(Zero)31 b(on)f(success)g(or)h(a)g (negativ)m(e)g(error)f(co)s(de)h(on)f(error.)236 5365 y Fo(See)35 b(also)p 236 5419 V 236 5532 a Fn(b)m(v)m(ec)p 414 5532 28 4 v 34 w(m)m(ul,)30 b(b)m(v)m(ec)p 826 5532 V 34 w(div\014xed,)e(b)m(v)m(ec)p 1401 5532 V 34 w(add,)i(b)m(v)m(ec)p 1810 5532 V 34 w(shl)1962 5989 y(71)p eop %%Page: 72 80 72 79 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(div\014xed)96 b Fn({)30 b(builds)e(a)i(b)s(o)s (olean)g(v)m(ector)i(for)e(division)d(b)m(y)k(a)f(constan)m(t)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bvec_div\(bvec)d(e,)j(int)g(c,) h(bvec)e(*res,)h(bvec)f(*rem\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)32 b(a)j(new)e(b)s(o)s(olean)g(v)m (ector)j(represen)m(ting)e(the)g(in)m(teger)h(division)c(of)j Fm(e)g Fn(with)f Fm(c)p Fn(.)52 b(The)33 b(result)g(of)236 960 y(the)e(division)c(will)h(b)s(e)h(stored)i(in)e Fm(res)g Fn(and)h(the)g(remainder)f(of)i(the)f(division)d(will)h(b)s(e)i(stored) g(in)f Fm(rem)p Fn(.)236 1073 y(Both)39 b(v)m(ectors)g(should)d(b)s(e)h (initialized)e(as)j(the)g(function)e(will)f(try)j(to)g(release)h(the)f (no)s(des)f(used)g(b)m(y)236 1186 y(them.)k(If)30 b(an)g(error)g(o)s (ccurs)g(then)g(the)h(no)s(des)e(will)f Ff(not)j Fn(b)s(e)f(freed.)236 1449 y Fo(Return)35 b(v)-6 b(alue)p 236 1503 V 236 1616 a Fn(Zero)31 b(on)f(success)g(or)h(a)g(negativ)m(e)g(error)f(co)s(de)h (on)f(error.)236 1879 y Fo(See)35 b(also)p 236 1933 V 236 2046 a Fn(b)m(v)m(ec)p 414 2046 28 4 v 34 w(div,)29 b(b)m(v)m(ec)p 800 2046 V 34 w(m)m(ul,)h(b)m(v)m(ec)p 1212 2046 V 34 w(add,)g(b)m(v)m(ec)p 1621 2046 V 34 w(shl)p 236 2397 3544 12 v 236 2510 a Fo(b)m(v)m(ec)p 443 2510 32 4 v 39 w(equ)95 b Fn({)31 b(calculates)g(the)f(truth)g(v)-5 b(alue)30 b(of)g Fj(x)c Fn(=)e Fj(y)p 236 2564 3544 12 v 236 2769 a Fm(bdd)47 b(bvec_equ\(bvec)d(l,)j(bvec)g(r\))236 2994 y Fo(Description)p 236 3048 3544 5 v 236 3161 a Fn(Returns)25 b(the)g(BDD)i(represen)m(ting)d Fm(l)48 b(=)f(r)25 b Fn(\()p Ff(not)h Fn(reference)g(coun)m(ted\).)40 b(Both)26 b(v)m(ectors)h(m)m(ust)e(ha)m(v)m(e)h(the)236 3274 y(same)31 b(n)m(um)m(b)s(er)e(of)i(bits.)236 3537 y Fo(See)k(also)p 236 3591 V 236 3704 a Fn(b)m(v)m(ec)p 414 3704 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 3704 V 34 w(lte,)g(b)m(v)m(ec)p 1151 3704 V 34 w(gth,)h(b)m(v)m(ec)p 1545 3704 V 34 w(gte,)h(b)m(v)m(ec)p 1929 3704 V 34 w(neq)p 236 4055 3544 12 v 236 4168 a Fo(b)m(v)m(ec)p 443 4168 32 4 v 39 w(false)95 b Fn({)31 b(build)c(a)k(v)m(ector)h(of)e(constan)m (t)i(false)e(BDDs)p 236 4222 3544 12 v 236 4427 a Fm(bvec)47 b(bvec_false\(int)d(bitnum\))236 4652 y Fo(Description)p 236 4706 3544 5 v 236 4819 a Fn(Builds)27 b(a)i(b)s(o)s(olean)e(v)m (ector)k(with)c Fm(bitnum)g Fn(elemen)m(ts,)j(eac)m(h)f(of)g(whic)m(h)f (are)h(the)g(constan)m(t)h(false)e(BDD.)236 5083 y Fo(Return)35 b(v)-6 b(alue)p 236 5137 V 236 5250 a Fn(The)30 b(b)s(o)s(olean)f(v)m (ector)j(\(whic)m(h)e(is)f(already)h(reference)h(coun)m(ted\))236 5513 y Fo(See)k(also)p 236 5567 V 236 5680 a Fn(b)m(v)m(ec)p 414 5680 28 4 v 34 w(true,)c(b)m(v)m(ec)p 839 5680 V 34 w(con,)g(b)m(v)m(ec)p 1238 5680 V 33 w(v)-5 b(ar)1962 5989 y(72)p eop %%Page: 73 81 73 80 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(free)95 b Fn({)31 b(frees)f(all)f(memory)i(used)e (b)m(y)h(a)h(b)s(o)s(olean)f(v)m(ector)p 236 250 3544 12 v 236 455 a Fm(void)47 b(bvec_free\(bvec)d(v\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Use)38 b(this)f(function)g(to)h(release)h(an)m(y)f(un)m(used)e(b)s(o)s(olean)h (v)m(ectors.)65 b(The)37 b(decrease)i(of)f(the)g(reference)236 960 y(coun)m(ts)31 b(on)f(the)h(BDDs)g(in)e Fm(v)h Fn(is)g(done)g(b)m (y)g Fm(bvec)p 1891 960 29 4 v 34 w(free)p Fn(.)p 236 1311 3544 12 v 236 1424 a Fo(b)m(v)m(ec)p 443 1424 32 4 v 39 w(gte)95 b Fn({)31 b(calculates)f(the)h(truth)f(v)-5 b(alue)29 b(of)i Fj(x)25 b Fc(\025)g Fj(y)p 236 1478 3544 12 v 236 1683 a Fm(bdd)47 b(bvec_gte\(bvec)d(l,)j(bvec)g(r\))236 1908 y Fo(Description)p 236 1962 3544 5 v 236 2075 a Fn(Returns)31 b(the)g(BDD)i(represen)m(ting)e Fm(l)p Fc(\025)p Fm(r)f Fn(\()p Ff(not)j Fn(reference)f(coun)m(ted\).)44 b(Both)32 b(v)m(ectors)h(m)m(ust)f(ha)m(v)m(e)g(the)236 2188 y(same)f(n)m(um)m(b)s(er)e(of)i(bits.)236 2451 y Fo(See)k(also)p 236 2505 V 236 2618 a Fn(b)m(v)m(ec)p 414 2618 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 2618 V 34 w(gth,)h(b)m(v)m(ec)p 1182 2618 V 34 w(gth,)g(b)m(v)m(ec)p 1576 2618 V 34 w(equ,)f(b)m(v)m(ec)p 1977 2618 V 34 w(neq)p 236 2969 3544 12 v 236 3082 a Fo(b)m(v)m(ec)p 443 3082 32 4 v 39 w(gth)95 b Fn({)31 b(calculates)g(the)f(truth)g(v)-5 b(alue)30 b(of)g Fj(x)25 b(>)g(y)p 236 3136 3544 12 v 236 3341 a Fm(bdd)47 b(bvec_gth\(bvec)d(l,)j(bvec)g(r\))236 3566 y Fo(Description)p 236 3620 3544 5 v 236 3733 a Fn(Returns)25 b(the)g(BDD)i(represen)m(ting)d Fm(l)48 b(>)f(r)25 b Fn(\()p Ff(not)h Fn(reference)g(coun)m(ted\).)40 b(Both)26 b(v)m(ectors)h(m)m(ust)e(ha)m(v)m(e)h(the)236 3846 y(same)31 b(n)m(um)m(b)s(er)e(of)i(bits.)236 4109 y Fo(See)k(also)p 236 4163 V 236 4276 a Fn(b)m(v)m(ec)p 414 4276 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 4276 V 34 w(lte,)g(b)m(v)m(ec)p 1151 4276 V 34 w(gte,)i(b)m(v)m(ec)p 1535 4276 V 34 w(equ,)f(b)m(v)m(ec)p 1937 4276 V 34 w(neq)1962 5989 y(73)p eop %%Page: 74 82 74 81 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(isconst)96 b Fn({)31 b(test)g(a)g(v)m(ector)h(for)e (constan)m(t)i(true/false)e(BDDs)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bvec_isconst\(bvec)c(v\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)31 b(non-zero)h(if)f(the)h(v)m(ector)h Fm(v)e Fn(consists)g(of)h(only)f (constan)m(t)i(true)e(or)h(false)f(BDDs.)46 b(Otherwise)236 960 y(zero)31 b(is)f(returned.)39 b(This)29 b(test)i(should)e(prelude)f (an)m(y)j(call)e(to)j Fm(bvec)p 2569 960 29 4 v 33 w(val)p Fn(.)236 1223 y Fo(See)j(also)p 236 1277 3544 5 v 236 1390 a Fn(b)m(v)m(ec)p 414 1390 28 4 v 34 w(v)-5 b(al,)30 b(b)m(v)m(ec)p 790 1390 V 34 w(con)p 236 1741 3544 12 v 236 1854 a Fo(b)m(v)m(ec)p 443 1854 32 4 v 39 w(ite)95 b Fn({)31 b(calculates)f(the)h(if-then-else)e(op)s(erator)i(for)f(a)h (b)s(o)s(olean)e(v)m(ector)p 236 1908 3544 12 v 236 2113 a Fm(bvec)47 b(bvec_ite\(bdd)d(a,)j(bvec)g(b,)g(bvec)g(c\))236 2338 y Fo(Description)p 236 2392 3544 5 v 236 2505 a Fn(Builds)35 b(a)j(v)m(ector)h(where)e(the)h(b)s(dd)e Fm(a)h Fn(has)g(b)s(een)g(applied)e(bit)m(wise)h(to)i Fm(b)g Fn(and)e Fm(c)i Fn(in)e(an)h(if-then-else)236 2618 y(op)s(eration,)30 b(suc)m(h)g(that)h(the)g(result)e Fj(r)k Fn(is:)463 2806 y Fj(r)504 2820 y Fi(i)558 2806 y Fn(=)25 b Fj(ite)p Fn(\()p Fj(a;)15 b(b)922 2820 y Fi(i)951 2806 y Fj(;)g(c)1030 2820 y Fi(i)1059 2806 y Fn(\);)236 3143 y Fo(Return)35 b(v)-6 b(alue)p 236 3198 V 236 3311 a Fn(The)30 b(if-then-else)g(result.)236 3574 y Fo(See)35 b(also)p 236 3628 V 236 3741 a Fn(b)s(dd)p 397 3741 28 4 v 31 w(ite)p 236 4074 3544 12 v 236 4187 a Fo(b)m(v)m(ec)p 443 4187 32 4 v 39 w(lte)95 b Fn({)31 b(calculates)f(the)h(truth)e(v)-5 b(alue)30 b(of)h Fj(x)25 b Fc(\024)g Fj(y)p 236 4241 3544 12 v 236 4446 a Fm(bdd)47 b(bvec_lte\(bvec)d(l,)j(bvec)g(r\))236 4671 y Fo(Description)p 236 4725 3544 5 v 236 4838 a Fn(Returns)31 b(the)g(BDD)i(represen)m (ting)e Fm(l)p Fc(\024)p Fm(r)f Fn(\()p Ff(not)j Fn(reference)f(coun)m (ted\).)44 b(Both)32 b(v)m(ectors)h(m)m(ust)f(ha)m(v)m(e)g(the)236 4951 y(same)f(n)m(um)m(b)s(er)e(of)i(bits.)236 5214 y Fo(See)k(also)p 236 5268 V 236 5381 a Fn(b)m(v)m(ec)p 414 5381 28 4 v 34 w(lth,)30 b(b)m(v)m(ec)p 788 5381 V 34 w(gth,)h(b)m(v)m(ec)p 1182 5381 V 34 w(gte,)g(b)m(v)m(ec)p 1565 5381 V 34 w(equ,)g(b)m(v)m(ec)p 1967 5381 V 34 w(neq)1962 5989 y(74)p eop %%Page: 75 83 75 82 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(lth)95 b Fn({)31 b(calculates)f(the)h(truth)f(v)-5 b(alue)29 b(of)i Fj(x)25 b(<)g(y)p 236 250 3544 12 v 236 455 a Fm(bdd)47 b(bvec_lth\(bvec)d(l,)j(bvec)g(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)25 b(the)g(BDD)i(represen)m(ting)d Fm(l)48 b(<)f(r)25 b Fn(\()p Ff(not)h Fn(reference)g(coun)m(ted\).)40 b(Both)26 b(v)m(ectors)h(m)m(ust)e(ha)m(v)m(e)h(the)236 960 y(same)31 b(n)m(um)m(b)s(er)e(of)i(bits.)236 1223 y Fo(See)k(also)p 236 1277 V 236 1390 a Fn(b)m(v)m(ec)p 414 1390 28 4 v 34 w(lte,)c(b)m(v)m(ec)p 778 1390 V 34 w(gth,)g(b)m(v)m(ec)p 1172 1390 V 34 w(gte,)g(b)m(v)m(ec)p 1555 1390 V 34 w(equ,)g(b)m(v)m (ec)p 1957 1390 V 34 w(neq)p 236 1741 3544 12 v 236 1854 a Fo(b)m(v)m(ec)p 443 1854 32 4 v 39 w(map1)94 b Fn({)31 b(map)f(a)h(function)e(on)m(to)j(a)e(b)s(o)s(olean)g(v)m(ector)p 236 1908 3544 12 v 236 2113 a Fm(bvec)47 b(bvec_map1\(bvec)d(a,)j(bdd)g (\(*fun\)\(bdd\)\))236 2338 y Fo(Description)p 236 2392 3544 5 v 236 2505 a Fn(Maps)32 b(the)f(function)g Fm(fun)f Fn(on)m(to)j(all)d(the)i(elemen)m(ts)f(in)g Fm(a)p Fn(.)43 b(The)31 b(v)-5 b(alue)31 b(returned)f(from)h Fm(fun)g Fn(is)f(stored)236 2618 y(in)36 b(a)h(new)g(v)m(ector)h(whic)m(h)e(is)g (then)h(returned.)59 b(An)37 b(example)f(of)h(a)h(mapping)d(function)h (is)g Fm(bdd)p 3609 2618 29 4 v 33 w(not)236 2731 y Fn(whic)m(h)29 b(can)i(b)s(e)f(used)f(lik)m(e)h(this)327 2957 y Fm(bvec)47 b(res)g(=)g(bvec)p 1050 2957 V 33 w(map1\(a,)f(bdd)p 1609 2957 V 34 w(not\))236 3182 y Fn(to)31 b(negate)h(all)d(the)i(BDDs) g(in)f Fm(a)p Fn(.)236 3446 y Fo(Return)35 b(v)-6 b(alue)p 236 3500 3544 5 v 236 3613 a Fn(The)30 b(new)g(v)m(ector)i(\(whic)m(h)d (is)h(already)g(reference)h(coun)m(ted\))236 3876 y Fo(See)k(also)p 236 3930 V 236 4043 a Fn(b)m(v)m(ec)p 414 4043 28 4 v 34 w(map2,)c(b)m(v)m(ec)p 894 4043 V 34 w(map3)1962 5989 y(75)p eop %%Page: 76 84 76 83 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(map2)94 b Fn({)31 b(map)f(a)h(function)e(on)m(to)j (a)e(b)s(o)s(olean)g(v)m(ector)p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_map2\(bvec)d(a,)j(bvec)g(b,)g(bdd)g (\(*fun\)\(bdd,bdd\)\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Maps)38 b(the)g(function)e Fm(fun)h Fn(on)m(to)h(all)f(the)g(elemen)m(ts)h(in)f Fm(a)g Fn(and)g Fm(b)p Fn(.)62 b(The)37 b(v)-5 b(alue)37 b(returned)f(from)h Fm(fun)236 960 y Fn(is)e(stored)h(in)f(a)h(new)f(v) m(ector)j(whic)m(h)c(is)h(then)h(returned.)55 b(An)36 b(example)f(of)h(a)h(mapping)d(function)g(is)236 1073 y Fm(bdd)p 386 1073 29 4 v 34 w(and)29 b Fn(whic)m(h)g(can)i(b)s(e)f (used)f(lik)m(e)h(this)327 1298 y Fm(bvec)47 b(res)g(=)g(bvec)p 1050 1298 V 33 w(map2\(a,)f(b,)h(bdd)p 1752 1298 V 34 w(and\))236 1524 y Fn(to)31 b(calculate)g(the)g(logical)f('and')g(of)g (all)g(the)g(BDDs)i(in)d Fm(a)h Fn(and)f Fm(b)p Fn(.)236 1787 y Fo(Return)35 b(v)-6 b(alue)p 236 1842 3544 5 v 236 1955 a Fn(The)30 b(new)g(v)m(ector)i(\(whic)m(h)d(is)h(already)g (reference)h(coun)m(ted\))236 2218 y Fo(See)k(also)p 236 2272 V 236 2385 a Fn(b)m(v)m(ec)p 414 2385 28 4 v 34 w(map1,)c(b)m(v)m(ec)p 894 2385 V 34 w(map3)p 236 2736 3544 12 v 236 2849 a Fo(b)m(v)m(ec)p 443 2849 32 4 v 39 w(map3)94 b Fn({)31 b(map)f(a)h(function)e(on)m(to)j(a)e(b)s(o)s (olean)g(v)m(ector)p 236 2903 3544 12 v 236 3108 a Fm(bvec)47 b(bvec_map3\(bvec)d(a,)j(bvec)g(b,)g(bvec)f(c,)i(bdd)e (\(*fun\)\(bdd,bdd,bdd\)\))236 3333 y Fo(Description)p 236 3387 3544 5 v 236 3500 a Fn(Maps)32 b(the)g(function)e Fm(fun)h Fn(on)m(to)i(all)e(the)h(elemen)m(ts)g(in)e Fm(a)p Fn(,)i Fm(b)g Fn(and)f Fm(c)p Fn(.)44 b(The)31 b(v)-5 b(alue)32 b(returned)e(from)h Fm(fun)236 3613 y Fn(is)k(stored)h(in)f(a)h(new)f(v)m(ector)j(whic)m(h)c(is)h(then)h (returned.)55 b(An)36 b(example)f(of)h(a)h(mapping)d(function)g(is)236 3726 y Fm(bdd)p 386 3726 29 4 v 34 w(ite)29 b Fn(whic)m(h)g(can)i(b)s (e)f(used)f(lik)m(e)h(this)327 3952 y Fm(bvec)47 b(res)g(=)g(bvec)p 1050 3952 V 33 w(map3\(a,)f(b,)h(c,)h(bdd)p 1896 3952 V 33 w(ite\))236 4177 y Fn(to)31 b(calculate)g(the)g(if-then-else)e (function)g(for)i(eac)m(h)g(elemen)m(t)g(in)e Fm(a)p Fn(,)h Fm(b)g Fn(and)g Fm(c)p Fn(.)236 4441 y Fo(Return)35 b(v)-6 b(alue)p 236 4495 3544 5 v 236 4608 a Fn(The)30 b(new)g(v)m(ector)i(\(whic)m(h)d(is)h(already)g(reference)h(coun)m (ted\))236 4871 y Fo(See)k(also)p 236 4925 V 236 5038 a Fn(b)m(v)m(ec)p 414 5038 28 4 v 34 w(map1,)c(b)m(v)m(ec)p 894 5038 V 34 w(map2)1962 5989 y(76)p eop %%Page: 77 85 77 84 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(m)m(ul)94 b Fn({)31 b(builds)c(a)k(b)s(o)s(olean)f (v)m(ector)i(for)e(m)m(ultiplication)p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_mul\(bvec)d(l,)j(bvec)g(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)28 b(a)j(b)s(o)s(olean)e(v)m(ector)j(represen)m(ting)e(the)h(m)m (ultiplication)c(of)j Fm(l)h Fn(and)e Fm(r)p Fn(.)236 1110 y Fo(Return)35 b(v)-6 b(alue)p 236 1164 V 236 1277 a Fn(The)30 b(result)f(of)i(the)f(m)m(ultiplication)e(\(whic)m(h)h(is)h (already)g(reference)g(coun)m(ted\))236 1540 y Fo(See)35 b(also)p 236 1595 V 236 1707 a Fn(b)m(v)m(ec)p 414 1707 28 4 v 34 w(m)m(ul\014xed,)29 b(b)m(v)m(ec)p 1015 1707 V 34 w(div,)g(b)m(v)m(ec)p 1401 1707 V 34 w(add,)h(b)m(v)m(ec)p 1810 1707 V 34 w(shl)p 236 2058 3544 12 v 236 2171 a Fo(b)m(v)m(ec)p 443 2171 32 4 v 39 w(m)m(ul\014xed)95 b Fn({)30 b(builds)e(a)i(b)s(o)s(olean)g(v)m(ector)i(for)e(m)m (ultiplication)d(with)i(a)i(constan)m(t)p 236 2225 3544 12 v 236 2430 a Fm(bvec)47 b(bvec_mulfixed\(bvec)c(e,)k(int)g(c\))236 2655 y Fo(Description)p 236 2709 3544 5 v 236 2822 a Fn(Builds)28 b(a)j(b)s(o)s(olean)e(v)m(ector)j(represen)m(ting)e(the)h (m)m(ultiplication)c(of)j Fm(e)h Fn(and)e Fm(c)p Fn(.)236 3086 y Fo(Return)35 b(v)-6 b(alue)p 236 3140 V 236 3253 a Fn(The)30 b(result)f(of)i(the)f(m)m(ultiplication)e(\(whic)m(h)h(is)h (already)g(reference)g(coun)m(ted\))236 3516 y Fo(See)35 b(also)p 236 3570 V 236 3683 a Fn(b)m(v)m(ec)p 414 3683 28 4 v 34 w(m)m(ul,)30 b(b)m(v)m(ec)p 826 3683 V 34 w(div,)f(b)m(v)m (ec)p 1212 3683 V 34 w(add,)h(b)m(v)m(ec)p 1621 3683 V 34 w(shl)p 236 4034 3544 12 v 236 4147 a Fo(b)m(v)m(ec)p 443 4147 32 4 v 39 w(neq)95 b Fn({)31 b(calculates)g(the)f(truth)g(v)-5 b(alue)30 b(of)g Fj(x)c Fc(6)p Fn(=)e Fj(y)p 236 4201 3544 12 v 236 4406 a Fm(bdd)47 b(bvec_neq\(bvec)d(l,)j(bvec)g(r\))236 4631 y Fo(Description)p 236 4685 3544 5 v 236 4798 a Fn(Returns)31 b(the)g(BDD)i(represen)m(ting)e Fm(l)p Fc(6)p Fn(=)p Fm(r)f Fn(\()p Ff(not)j Fn(reference)f(coun)m(ted\).)44 b(Both)32 b(v)m(ectors)h(m)m(ust)f(ha)m(v)m(e)g(the)236 4911 y(same)f(n)m(um)m(b)s(er)e(of)i(bits.)236 5174 y Fo(See)k(also)p 236 5228 V 236 5341 a Fn(b)m(v)m(ec)p 414 5341 28 4 v 34 w(lte,)c(b)m(v)m(ec)p 778 5341 V 34 w(lth,)e(b)m(v)m(ec)p 1151 5341 V 34 w(gth,)i(b)m(v)m(ec)p 1545 5341 V 34 w(gth,)g(b)m(v)m(ec)p 1939 5341 V 34 w(equ)1962 5989 y(77)p eop %%Page: 78 86 78 85 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(shl)95 b Fn({)31 b(shift)e(left)h(op)s(eration)g (\(sym)m(b)s(olic\))p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_shl\(bvec)d(l,)j(bvec)g(r,)g(BDD)g(c\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)38 b(a)j(b)s(o)s(olean)f(v)m(ector)i(that)f(represen)m(ts)f Fm(l)g Fn(shifted)f Fm(r)h Fn(times)g(to)h(the)g(left.)70 b(The)40 b(new)g(empt)m(y)236 960 y(elemen)m(ts)e(will)c(b)s(e)j(set)g (to)h Fm(c)p Fn(.)61 b(The)36 b(shift)g(op)s(eration)g(is)h(fully)d (sym)m(b)s(olic)i(and)g(the)i(n)m(um)m(b)s(er)d(of)j(bits)236 1073 y(shifted)29 b(dep)s(ends)g(on)h(the)h(curren)m(t)f(v)-5 b(alue)30 b(enco)s(ded)g(b)m(y)g Fm(r)p Fn(.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 V 236 1503 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g(is)f (already)h(reference)h(coun)m(ted\))236 1766 y Fo(See)k(also)p 236 1820 V 236 1933 a Fn(b)m(v)m(ec)p 414 1933 28 4 v 34 w(add,)30 b(b)m(v)m(ec)p 823 1933 V 34 w(m)m(ul,)g(b)m(v)m(ec)p 1235 1933 V 34 w(shl\014xed,)e(b)m(v)m(ec)p 1798 1933 V 34 w(shr)p 236 2284 3544 12 v 236 2397 a Fo(b)m(v)m(ec)p 443 2397 32 4 v 39 w(shl\014xed)96 b Fn({)31 b(shift)e(left)h(op)s (eration)f(\(\014xed)i(n)m(um)m(b)s(er)e(of)h(bits\))p 236 2451 3544 12 v 236 2656 a Fm(bvec)47 b(bvec_shlfixed\(bvec)c(v,)k (int)g(pos,)f(BDD)h(c\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(Builds)33 b(a)i(b)s(o)s(olean)f(v)m(ector)i (that)f(represen)m(ts)g Fm(v)g Fn(shifted)e Fm(pos)h Fn(times)g(to)i(the)f(left.)53 b(The)35 b(new)f(empt)m(y)236 3161 y(elemen)m(ts)d(will)d(b)s(e)h(set)i(to)g Fm(c)p Fn(.)236 3424 y Fo(Return)k(v)-6 b(alue)p 236 3479 V 236 3591 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g (is)f(already)h(reference)h(coun)m(ted\))236 3855 y Fo(See)k(also)p 236 3909 V 236 4022 a Fn(b)m(v)m(ec)p 414 4022 28 4 v 34 w(add,)30 b(b)m(v)m(ec)p 823 4022 V 34 w(m)m(ul,)g(b)m(v)m(ec)p 1235 4022 V 34 w(shl,)f(b)m(v)m(ec)p 1609 4022 V 34 w(shr)1962 5989 y(78)p eop %%Page: 79 87 79 86 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(shr)96 b Fn({)30 b(shift)f(righ)m(t)h(op)s(eration) g(\(sym)m(b)s(olic\))p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_shr\(bvec)d(l,)j(bvec)g(r,)g(BDD)g(c\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)35 b(a)i(b)s(o)s(olean)f(v)m(ector)i(that)g(represen)m(ts)e Fm(l)h Fn(shifted)e Fm(r)i Fn(times)f(to)i(the)f(righ)m(t.)59 b(The)37 b(new)f(empt)m(y)236 960 y(elemen)m(ts)i(will)c(b)s(e)j(set)g (to)h Fm(c)p Fn(.)61 b(The)36 b(shift)g(op)s(eration)g(is)h(fully)d (sym)m(b)s(olic)i(and)g(the)i(n)m(um)m(b)s(er)d(of)j(bits)236 1073 y(shifted)29 b(dep)s(ends)g(on)h(the)h(curren)m(t)f(v)-5 b(alue)30 b(enco)s(ded)g(b)m(y)g Fm(r)p Fn(.)236 1336 y Fo(Return)35 b(v)-6 b(alue)p 236 1390 V 236 1503 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g(is)f (already)h(reference)h(coun)m(ted\))236 1766 y Fo(See)k(also)p 236 1820 V 236 1933 a Fn(b)m(v)m(ec)p 414 1933 28 4 v 34 w(add,)30 b(b)m(v)m(ec)p 823 1933 V 34 w(m)m(ul,)g(b)m(v)m(ec)p 1235 1933 V 34 w(shl,)f(b)m(v)m(ec)p 1609 1933 V 34 w(shr\014xed)p 236 2284 3544 12 v 236 2397 a Fo(b)m(v)m(ec)p 443 2397 32 4 v 39 w(shr\014xed)96 b Fn({)31 b(shift)e(righ)m(t)h(op)s(eration)p 236 2451 3544 12 v 236 2656 a Fm(bvec)47 b(bvec_shrfixed\(bvec)c(v,)k (int)g(pos,)f(BDD)h(c\))236 2881 y Fo(Description)p 236 2935 3544 5 v 236 3048 a Fn(Builds)29 b(a)j(b)s(o)s(olean)e(v)m(ector)j (that)f(represen)m(ts)f Fm(v)g Fn(shifted)e Fm(pos)i Fn(times)f(to)i(the)g(righ)m(t.)43 b(The)30 b(new)h(empt)m(y)236 3161 y(elemen)m(ts)g(will)d(b)s(e)h(set)i(to)g Fm(c)p Fn(.)236 3424 y Fo(Return)k(v)-6 b(alue)p 236 3479 V 236 3591 a Fn(The)30 b(result)f(of)i(the)f(op)s(eration)g(\(whic)m(h)g (is)f(already)h(reference)h(coun)m(ted\))236 3855 y Fo(See)k(also)p 236 3909 V 236 4022 a Fn(b)m(v)m(ec)p 414 4022 28 4 v 34 w(add,)30 b(b)m(v)m(ec)p 823 4022 V 34 w(m)m(ul,)g(b)m(v)m(ec)p 1235 4022 V 34 w(shr,)f(b)m(v)m(ec)p 1619 4022 V 34 w(shl)1962 5989 y(79)p eop %%Page: 80 88 80 87 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(sub)96 b Fn({)30 b(builds)d(a)k(b)s(o)s(olean)f(v)m (ector)i(for)e(subtraction)p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_sub\(bvec)d(l,)j(bvec)g(r\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)33 b(a)j(new)e(b)s(o)s(olean)h(v)m(ector)h(that)g(represen)m(ts)f(the)h (subtraction)e(of)h(t)m(w)m(o)i(other)e(v)m(ectors.)57 b(Eac)m(h)236 960 y(elemen)m(t)31 b Fj(x)624 974 y Fi(i)683 960 y Fn(in)e(the)h(result)f(will)f(represen)m(t)j(the)f(function)463 1147 y Fj(x)515 1161 y Fi(i)569 1147 y Fn(=)25 b Fj(l)692 1161 y Fi(i)750 1147 y Fn(xor)31 b Fj(r)951 1161 y Fi(i)1009 1147 y Fn(xor)g Fj(c)1208 1161 y Fi(i)p Fg(\000)p Fh(1)236 1335 y Fn(where)f(the)h(carry)f(in)f Fj(c)1036 1349 y Fi(i)1095 1335 y Fn(is)463 1523 y Fj(c)502 1537 y Fi(i)556 1523 y Fn(=)c(\()p Fj(l)714 1537 y Fi(i)773 1523 y Fn(and)30 b Fj(r)991 1537 y Fi(i)1049 1523 y Fn(and)g Fj(c)1265 1537 y Fi(i)p Fg(\000)p Fh(1)1384 1523 y Fn(\))h(or)f(\(not)h Fj(l)1785 1537 y Fi(i)1844 1523 y Fn(and)e(\()p Fj(r)2096 1537 y Fi(i)2155 1523 y Fn(or)h Fj(c)2305 1537 y Fi(i)p Fg(\000)p Fh(1)2424 1523 y Fn(\)\))p Fj(:)236 1710 y Fn(It)h(is)e(imp)s(ortan)m(t)h(for)g(e\016cency)h(that)g(the)g(BDD)g(v) -5 b(ariables)29 b(used)h(in)f Fm(l)h Fn(and)g Fm(r)g Fn(are)g(in)m(terlea)m(v)m(ed.)236 1973 y Fo(Return)35 b(v)-6 b(alue)p 236 2028 V 236 2141 a Fn(The)30 b(result)f(of)i(the)f (subtraction)g(\(whic)m(h)f(is)h(already)g(reference)h(coun)m(ted\))236 2404 y Fo(See)k(also)p 236 2458 V 236 2571 a Fn(b)m(v)m(ec)p 414 2571 28 4 v 34 w(add,)30 b(b)m(v)m(ec)p 823 2571 V 34 w(m)m(ul,)g(b)m(v)m(ec)p 1235 2571 V 34 w(shl)p 236 2922 3544 12 v 236 3035 a Fo(b)m(v)m(ec)p 443 3035 32 4 v 39 w(true)95 b Fn({)31 b(build)c(a)k(v)m(ector)h(of)e(constan)m (t)i(true)e(BDDs)p 236 3089 3544 12 v 236 3294 a Fm(bvec)47 b(bvec_true\(int)d(bitnum\))236 3519 y Fo(Description)p 236 3573 3544 5 v 236 3686 a Fn(Builds)28 b(a)i(b)s(o)s(olean)e(v)m (ector)j(with)e Fm(bitnum)f Fn(elemen)m(ts,)i(eac)m(h)h(of)f(whic)m(h)e (are)i(the)g(constan)m(t)h(true)e(BDD.)236 3949 y Fo(Return)35 b(v)-6 b(alue)p 236 4003 V 236 4116 a Fn(The)30 b(b)s(o)s(olean)f(v)m (ector)j(\(whic)m(h)e(is)f(already)h(reference)h(coun)m(ted\))236 4379 y Fo(See)k(also)p 236 4434 V 236 4546 a Fn(b)m(v)m(ec)p 414 4546 28 4 v 34 w(false,)30 b(b)m(v)m(ec)p 851 4546 V 34 w(con,)h(b)m(v)m(ec)p 1250 4546 V 34 w(v)-5 b(ar)1962 5989 y(80)p eop %%Page: 81 89 81 88 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(v)-6 b(al)95 b Fn({)31 b(calculate)g(the)f(in)m (teger)h(v)-5 b(alue)30 b(represen)m(ted)g(b)m(y)h(a)f(b)s(o)s(olean)g (v)m(ector)p 236 250 3544 12 v 236 455 a Fm(int)47 b(bvec_val\(bvec)d (v\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Calculates)35 b(the)h(v)-5 b(alue)35 b(represen)m(ted)g(b)m(y) h(the)f(bits)g(in)f Fm(v)h Fn(assuming)f(that)i(the)g(v)m(ector)h Fm(v)e Fn(consists)g(of)236 960 y(only)30 b(constan)m(t)h(true)g(or)f (false)g(BDDs.)42 b(The)30 b(LSB)g(is)f(assumed)h(to)h(b)s(e)f(at)h(p)s (osition)d(zero.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(in)m(teger)h(v)-5 b(alue)30 b(represen)m(ted)g(b)m(y)g Fm(v)p Fn(.)236 1653 y Fo(See)35 b(also)p 236 1707 V 236 1820 a Fn(b)m(v)m(ec)p 414 1820 28 4 v 34 w(isconst,)30 b(b)m(v)m(ec)p 945 1820 V 34 w(con)p 236 2171 3544 12 v 236 2284 a Fo(b)m(v)m(ec)p 443 2284 32 4 v 39 w(v)-6 b(ar)95 b Fn({)31 b(build)c(a)k(b)s(o)s (olean)f(v)m(ector)i(with)d(BDD)i(v)-5 b(ariables)p 236 2338 3544 12 v 236 2543 a Fm(bvec)47 b(bvec_var\(int)d(bitnum,)i(int)h (offset,)f(int)h(step\))236 2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(Builds)27 b(a)i(b)s(o)s(olean)f(v)m(ector)i (with)e(the)h(BDD)h(v)-5 b(ariables)27 b Fj(v)2211 2949 y Fh(1)2251 2935 y Fj(;)15 b(:)g(:)g(:)h(;)f(v)2496 2949 y Fi(n)2573 2935 y Fn(as)29 b(the)g(elemen)m(ts.)40 b(Eac)m(h)30 b(v)-5 b(ariable)236 3048 y(will)25 b(b)s(e)i(the)g(the)h(v)-5 b(ariabled)26 b(n)m(um)m(b)s(ered)g Fm(offset)46 b(+)h(N*step)26 b Fn(where)h Fm(N)g Fn(ranges)g(from)g(0)h(to)g Fm(bitnum)p Fn(-1.)236 3311 y Fo(Return)35 b(v)-6 b(alue)p 236 3366 V 236 3479 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j(\(whic)m(h)e(is)f (already)h(reference)h(coun)m(ted\))236 3742 y Fo(See)k(also)p 236 3796 V 236 3909 a Fn(b)m(v)m(ec)p 414 3909 28 4 v 34 w(true,)c(b)m(v)m(ec)p 839 3909 V 34 w(false,)f(b)m(v)m(ec)p 1276 3909 V 34 w(con)1962 5989 y(81)p eop %%Page: 82 90 82 89 bop 236 83 3544 12 v 236 196 a Fo(b)m(v)m(ec)p 443 196 32 4 v 39 w(v)-6 b(arfdd)95 b Fn({)31 b(build)d(a)i(b)s(o)s (olean)g(v)m(ector)i(from)e(a)g(FDD)i(v)-5 b(ariable)29 b(blo)s(c)m(k)p 236 250 3544 12 v 236 455 a Fm(bvec)47 b(bvec_varfdd\(int)c(var\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)32 b(a)i(b)s(o)s(olean)e(v)m (ector)k(whic)m(h)c(will)f(include)h(exactly)i(the)g(v)-5 b(ariables)32 b(used)h(to)h(de\014ne)f(the)h(FDD)236 960 y(v)-5 b(ariable)29 b(blo)s(c)m(k)h Fm(var)p Fn(.)40 b(The)30 b(v)m(ector)i(will)c(ha)m(v)m(e)j(the)g(LSB)f(at)h(p)s (osition)d(zero.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j(\(whic)m (h)e(is)f(already)h(reference)h(coun)m(ted\))236 1653 y Fo(See)k(also)p 236 1707 V 236 1820 a Fn(b)m(v)m(ec)p 414 1820 28 4 v 34 w(v)-5 b(ar)p 236 2154 3544 12 v 236 2266 a Fo(b)m(v)m(ec)p 443 2266 32 4 v 39 w(v)f(arv)m(ec)96 b Fn({)31 b(build)c(a)k(b)s(o)s(olean)e(v)m(ector)j(with)d(the)i(v)-5 b(ariables)29 b(passed)h(in)f(an)h(arra)m(y)p 236 2321 3544 12 v 236 2526 a Fm(bvec)47 b(bvec_varvec\(int)c(bitnum,)j(int)h (*var\))236 2751 y Fo(Description)p 236 2805 3544 5 v 236 2918 a Fn(Builds)30 b(a)i(b)s(o)s(olean)f(v)m(ector)j(with)d(the)h (BDD)h(v)-5 b(ariables)31 b(listed)f(in)h(the)h(arra)m(y)h Fm(var)p Fn(.)45 b(The)31 b(arra)m(y)i(m)m(ust)236 3031 y(b)s(e)d(of)g(size)h Fm(bitnum)p Fn(.)236 3294 y Fo(Return)k(v)-6 b(alue)p 236 3348 V 236 3461 a Fn(The)30 b(b)s(o)s(olean)f(v)m(ector)j (\(whic)m(h)e(is)f(already)h(reference)h(coun)m(ted\))236 3724 y Fo(See)k(also)p 236 3778 V 236 3891 a Fn(b)m(v)m(ec)p 414 3891 28 4 v 34 w(v)-5 b(ar)p 236 4224 3544 12 v 236 4337 a Fo(fdd)p 390 4337 32 4 v 38 w(clearall)96 b Fn({)30 b(clear)h(all)e(allo)s(cated)h(FDD)i(blo)s(c)m(ks)p 236 4391 3544 12 v 236 4596 a Fm(void)47 b(fdd_clearall\(void\))236 4821 y Fo(Description)p 236 4876 3544 5 v 236 4988 a Fn(Remo)m(v)m(es)96 b(all)d(de\014ned)h(\014nite)f(domain)g(blo)s(c)m (ks)h(de\014ned)f(b)m(y)h Fm(fdd)p 2986 4988 29 4 v 34 w(extdomain\(\))d Fn(and)236 5101 y Fm(fdd)p 386 5101 V 34 w(overlapdomain\(\))1962 5989 y Fn(82)p eop %%Page: 83 91 83 90 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(domain)95 b Fn({)31 b(BDD)g(enco)s(ding)e(of)i(the)g (domain)e(of)h(a)h(FDD)h(v)-5 b(ariable)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(fdd_domain\(int)d(var\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)29 b(what)g(corresp)s(onds)f(to)i(a)g(disjunction)d(of)i(all)g(p)s (ossible)e(v)-5 b(alues)28 b(of)i(the)g(v)-5 b(ariable)28 b Fm(var)p Fn(.)39 b(This)236 960 y(is)30 b(more)i(e\016cien)m(t)g (than)e(doing)h Fm(fdd)p 1505 960 29 4 v 33 w(ithvar\(var,0\))45 b(OR)i(fdd)p 2494 960 V 33 w(ithvar\(var,1\))d(...)e Fn(explicitely)236 1073 y(for)30 b(all)g(v)-5 b(alues)29 b(in)g(the)i(domain)e(of)i Fm(var)p Fn(.)236 1336 y Fo(Return)k(v)-6 b(alue)p 236 1390 3544 5 v 236 1503 a Fn(The)30 b(enco)s(ding)f(of)i (the)g(domain)p 236 1854 3544 12 v 236 1967 a Fo(fdd)p 390 1967 32 4 v 38 w(domainn)m(um)94 b Fn({)31 b(n)m(um)m(b)s(er)e(of)i (de\014ned)e(\014nite)g(domain)g(blo)s(c)m(ks)p 236 2021 3544 12 v 236 2226 a Fm(int)47 b(fdd_domainnum\(void\))236 2451 y Fo(Description)p 236 2505 3544 5 v 236 2618 a Fn(Returns)30 b(the)g(n)m(um)m(b)s(er)f(of)i(\014nite)e(domain)g(blo)s (c)m(ks)h(de\014ne)g(b)m(y)g(calls)g(to)h Fm(bdd)p 2857 2618 29 4 v 33 w(extdomain)p Fn(.)236 2881 y Fo(Return)k(v)-6 b(alue)p 236 2935 3544 5 v 236 3048 a Fn(The)30 b(n)m(um)m(b)s(er)f(of) i(de\014ned)e(\014nite)g(domain)g(blo)s(c)m(ks)h(or)g(a)h(negativ)m(e)h (error)e(co)s(de)236 3311 y Fo(See)35 b(also)p 236 3366 V 236 3479 a Fn(fdd)p 371 3479 28 4 v 32 w(domainsize,)29 b(fdd)p 1023 3479 V 32 w(extdomain)p 236 3829 3544 12 v 236 3942 a Fo(fdd)p 390 3942 32 4 v 38 w(domainsize)95 b Fn({)31 b(real)f(size)g(of)h(a)g(\014nite)e(domain)g(blo)s(c)m(k)p 236 3997 3544 12 v 236 4201 a Fm(int)47 b(fdd_domainsize\(int)c(var\)) 236 4426 y Fo(Description)p 236 4481 3544 5 v 236 4594 a Fn(Returns)30 b(the)g(size)g(of)h(the)g(domain)e(for)h(the)h (\014nite)e(domain)g(blo)s(c)m(k)h Fm(var)p Fn(.)236 4857 y Fo(Return)35 b(v)-6 b(alue)p 236 4911 V 236 5024 a Fn(The)30 b(size)g(or)h(a)f(negativ)m(e)i(error)e(co)s(de)236 5287 y Fo(See)35 b(also)p 236 5341 V 236 5454 a Fn(fdd)p 371 5454 28 4 v 32 w(domainn)m(um)1962 5989 y(83)p eop %%Page: 84 92 84 91 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(equals)96 b Fn({)30 b(returns)g(a)g(BDD)i(setting)e(t)m(w)m (o)i(FD.)f(blo)s(c)m(ks)f(equal)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(fdd_equals\(int)d(f,)j(int)g(g\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Builds)26 b(a)i(BDD)g(whic)m(h)f(is)f(true)i(for)f(all)g(the)g(p)s(ossible)f (assignmen)m(ts)h(to)h(the)g(v)-5 b(ariable)27 b(blo)s(c)m(ks)g Fm(f)g Fn(and)g Fm(g)236 960 y Fn(that)k(mak)m(es)g(the)g(blo)s(c)m(ks) f(equal.)40 b(This)29 b(is)g(more)i(or)f(less)g(just)f(a)i(shorthand)e (for)h(calling)f Fm(fdd)p 3482 960 29 4 v 34 w(equ\(\))p Fn(.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 3544 5 v 236 1390 a Fn(The)30 b(correct)i(BDD)f(or)g(the)f(constan)m(t) i(false)e(on)g(errors.)p 236 1723 3544 12 v 236 1836 a Fo(fdd)p 390 1836 32 4 v 38 w(extdomain)95 b Fn({)30 b(adds)g(another)h(set)f(of)h(\014nite)e(domain)h(blo)s(c)m(ks)p 236 1890 3544 12 v 236 2095 a Fm(int)47 b(fdd_extdomain\(int)c(*dom,)k (int)f(num\))236 2320 y Fo(Description)p 236 2374 3544 5 v 236 2487 a Fn(Extends)32 b(the)g(set)h(of)f(\014nite)g(domain)f (blo)s(c)m(ks)g(with)g(the)i Fm(num)e Fn(domains)g(in)g Fm(dom)p Fn(.)45 b(Eac)m(h)33 b(en)m(try)f(in)f Fm(dom)236 2600 y Fn(de\014nes)d(the)i(size)f(of)g(a)g(new)g(\014nite)f(domain)g (whic)m(h)f(later)j(on)e(can)i(b)s(e)e(used)h(for)f(\014nite)g(state)j (mac)m(hine)236 2713 y(tra)m(v)m(ersal)43 b(and)e(other)h(op)s (erations)f(on)h(\014n)m(te)g(domains.)73 b(Eac)m(h)43 b(domain)d(allo)s(cates)i(log)3366 2735 y Fh(2)3405 2713 y Fn(\()p Fc(j)p Fj(dom)p Fn([)p Fj(i)p Fn(])p Fc(j)p Fn(\))236 2826 y(BDD)c(v)-5 b(ariables)36 b(to)h(b)s(e)f(used)g(later.) 60 b(The)36 b(ordering)f(is)h(in)m(terlea)m(v)m(ed)h(for)g(the)g (domains)e(de\014ned)h(in)236 2939 y(eac)m(h)27 b(call)d(to)j Fm(bdd)p 854 2939 29 4 v 33 w(extdomain)p Fn(.)37 b(This)23 b(means)i(that)h(assuming)e(domain)h Fj(D)2826 2953 y Fh(0)2891 2939 y Fn(needs)f(2)i(BDD)h(v)-5 b(ariables)236 3052 y Fj(x)288 3066 y Fh(1)354 3052 y Fn(and)25 b Fj(x)578 3066 y Fh(2)618 3052 y Fn(,)i(and)e(another)i(domain)e Fj(D)1566 3066 y Fh(1)1632 3052 y Fn(needs)g(4)i(BDD)g(v)-5 b(ariables)25 b Fj(y)2594 3066 y Fh(1)2633 3052 y Fj(;)15 b(y)2718 3066 y Fh(2)2757 3052 y Fj(;)g(y)2842 3066 y Fh(3)2908 3052 y Fn(and)26 b Fj(y)3126 3066 y Fh(4)3165 3052 y Fn(,)h(then)f(the)g(order)236 3165 y(will)g(b)s(e)i Fj(x)580 3179 y Fh(1)620 3165 y Fj(;)15 b(y)705 3179 y Fh(1)744 3165 y Fj(;)g(x)836 3179 y Fh(2)876 3165 y Fj(;)g(y)961 3179 y Fh(2)1000 3165 y Fj(;)g(y)1085 3179 y Fh(3)1125 3165 y Fj(;)g(y)1210 3179 y Fh(4)1249 3165 y Fn(.)40 b(The)29 b(index)e(of)i(the)g(\014rst)f(domain)g(in)f Fm(dom)h Fn(is)g(returned.)39 b(The)28 b(index)f(of)236 3278 y(the)k(other)f(domains)g(are)g(o\013set)i(from)e(this)f(index)g (with)g(the)h(same)h(o\013set)h(as)e(in)f Fm(dom)p Fn(.)327 3391 y(The)36 b(BDD)h(v)-5 b(ariables)35 b(needed)h(to)g(enco)s(de)h (the)f(domain)f(are)h(created)i(for)d(the)i(purp)s(ose)d(and)i(do)236 3504 y(not)31 b(in)m(terfere)f(with)f(the)i(BDD)g(v)-5 b(ariables)29 b(already)h(in)f(use.)236 3767 y Fo(Return)35 b(v)-6 b(alue)p 236 3821 3544 5 v 236 3934 a Fn(The)30 b(index)f(of)i(the)f(\014rst)g(domain)f(or)h(a)h(negativ)m(e)h(error)e (co)s(de.)236 4197 y Fo(See)35 b(also)p 236 4251 V 236 4364 a Fn(fdd)p 371 4364 28 4 v 32 w(ith)m(v)-5 b(ar,)30 b(fdd)p 821 4364 V 31 w(equals,)g(fdd)p 1283 4364 V 32 w(o)m(v)m(erlap)s(domain)1962 5989 y(84)p eop %%Page: 85 93 85 92 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(\014le)p 563 196 V 38 w(ho)s(ok)96 b Fn({)31 b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p 236 250 3544 12 v 236 455 a Fm(bddfilehandler)44 b (fdd_file_hook\(bddfilehand)o(ler)d(handler\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)23 b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(FDDs)i(is)d (used)h(to)i(con)m(v)m(ert)g(the)f(FDD)h(in)m(teger)f(iden)m(ti\014er) 236 960 y(in)m(to)34 b(something)e(readable)h(b)m(y)h(the)f(end)g (user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin)m(t)i(a)i (string)e(name)236 1073 y(instead)e(of)g(the)h(iden)m(ti\014er.)39 b(A)30 b(handler)f(could)g(lo)s(ok)h(lik)m(e)g(this:)236 1260 y Fm(void)47 b(printhandler\(FILE)c(*o,)k(int)g(var\))236 1373 y({)379 1486 y(extern)f(char)h(**names;)379 1599 y(fprintf\(o,)e("\045s",)i(names[var]\);)236 1712 y(})236 1900 y Fn(The)30 b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g (lik)m(e)f(this:)39 b Fm(fdd)p 2510 1900 29 4 v 34 w(file)p 2736 1900 V 33 w(hook\(printhandler\))p Fn(.)327 2012 y(No)33 b(default)e(handler)g(is)g(supplied.)43 b(The)32 b(argumen)m(t)h Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h (handler)e(is)236 2125 y(needed.)236 2389 y Fo(Return)35 b(v)-6 b(alue)p 236 2443 3544 5 v 236 2556 a Fn(The)30 b(old)g(handler)236 2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(fdd)p 371 2986 28 4 v 32 w(prin)m(tset,)30 b(b)s(dd)p 921 2986 V 30 w(\014le)p 1068 2986 V 32 w(ho)s(ok)p 236 3337 3544 12 v 236 3450 a Fo(fdd)p 390 3450 32 4 v 38 w(in)m(taddv)-6 b(arblo)s(c)m(k)97 b Fn({)30 b(adds)g(a)h(new)f(v) -5 b(ariable)29 b(blo)s(c)m(k)h(for)g(reordering)p 236 3504 3544 12 v 236 3709 a Fm(int)47 b(fdd_intaddvarblock\(int)42 b(first,)k(int)h(last,)f(int)h(fixed\))236 3934 y Fo(Description)p 236 3988 3544 5 v 236 4101 a Fn(W)-8 b(orks)37 b(exactly)h(lik)m(e)e Fm(bdd)p 1166 4101 29 4 v 33 w(addvarblock)e Fn(except)j(that)g Fm(fdd)p 2399 4101 V 34 w(intaddvarblock)32 b Fn(tak)m(es)38 b(a)f(range)g(of)236 4214 y(FDD)32 b(v)-5 b(ariables)29 b(instead)g(of)i(BDD)h(v)-5 b(ariables.)236 4477 y Fo(Return)35 b(v)-6 b(alue)p 236 4531 3544 5 v 236 4644 a Fn(Zero)31 b(on)f(success,)h(otherwise)e(a)i(negativ)m(e)h(error)e(co)s(de.)236 4907 y Fo(See)35 b(also)p 236 4962 V 236 5074 a Fn(b)s(dd)p 397 5074 28 4 v 31 w(addv)-5 b(arblo)s(c)m(k,)30 b(b)s(dd)p 1120 5074 V 30 w(in)m(taddv)-5 b(arblo)s(c)m(k,)30 b(b)s(dd)p 1951 5074 V 30 w(reorder)1962 5989 y(85)p eop %%Page: 86 94 86 93 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(ithset)95 b Fn({)31 b(the)f(v)-5 b(ariable)29 b(set)i(for)g(the)f(i'th)g(\014nite)f(domain)g(blo)s(c)m(k)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(fdd_ithset\(int)d(var\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)27 b(the)i(v)-5 b(ariable)27 b(set)h(that)h(con)m(tains)f(the)g(v)-5 b(ariables)27 b(used)g(to)i(de\014ne)f(the)g(\014nite)f(domain)g(blo)s (c)m(k)236 960 y Fm(var)p Fn(.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(v)-5 b(ariable)29 b(set)i(or)g(the)f(constan)m(t)i(false)e(BDD)h(on)g (error.)236 1653 y Fo(See)k(also)p 236 1707 V 236 1820 a Fn(fdd)p 371 1820 28 4 v 32 w(ith)m(v)-5 b(ar)p 236 2154 3544 12 v 236 2266 a Fo(fdd)p 390 2266 32 4 v 38 w(ith)m(v)f(ar)96 b Fn({)30 b(the)h(BDD)g(for)g(the)f(i'th)g(FDD)h(set) g(to)g(a)g(sp)s(eci\014c)e(v)-5 b(alue)p 236 2321 3544 12 v 236 2526 a Fm(BDD)47 b(fdd_ithvar\(int)d(var,)j(int)g(val\))236 2751 y Fo(Description)p 236 2805 3544 5 v 236 2918 a Fn(Returns)23 b(the)i(BDD)g(that)g(de\014nes)e(the)h(v)-5 b(alue)23 b Fm(val)h Fn(for)f(the)i(\014nite)e(domain)g(blo)s(c)m(k)g Fm(var)p Fn(.)38 b(The)24 b(enco)s(ding)236 3031 y(places)33 b(the)g(Least)g(Signi\014can)m(t)f(Bit)g(at)i(the)f(top)g(of)f(the)h (BDD)h(tree)g(\(whic)m(h)e(means)g(they)h(will)d(ha)m(v)m(e)236 3143 y(the)35 b(lo)m(w)m(est)h(v)-5 b(ariable)33 b(index\).)53 b(The)34 b(returned)g(BDD)i(will)c(b)s(e)i Fj(V)2509 3157 y Fh(0)2571 3143 y Fc(^)23 b Fj(V)2708 3157 y Fh(1)2771 3143 y Fc(^)f Fj(:)15 b(:)g(:)25 b Fc(^)d Fj(V)3120 3157 y Fi(N)3222 3143 y Fn(where)34 b(eac)m(h)i Fj(V)3751 3157 y Fi(i)236 3256 y Fn(will)28 b(b)s(e)i(in)f(p)s(ositiv)m(e)g(or)h (negativ)m(e)i(form)e(dep)s(ending)e(on)i(the)h(v)-5 b(alue)29 b(of)i Fm(val)p Fn(.)236 3520 y Fo(Return)k(v)-6 b(alue)p 236 3574 V 236 3687 a Fn(The)30 b(correct)i(BDD)f(or)g(the)f (constan)m(t)i(false)e(BDD)h(on)g(error.)236 3950 y Fo(See)k(also)p 236 4004 V 236 4117 a Fn(fdd)p 371 4117 28 4 v 32 w(ithset)1962 5989 y(86)p eop %%Page: 87 95 87 94 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(mak)m(eset)94 b Fn({)31 b(creates)h(a)f(v)-5 b(ariable)29 b(set)i(for)f(N)g(\014nite)g(domain)f(blo)s(c)m(ks)p 236 250 3544 12 v 236 455 a Fm(BDD)47 b(fdd_makeset\(int)d(*varset,)h (int)i(varnum\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)25 b(a)g(BDD)i(de\014ning)c(all)h(the)i(v)-5 b(ariable)24 b(sets)h(used)g(to)h(de\014ne)e(the)i(v)-5 b(ariable)24 b(blo)s(c)m(ks)h(in)e(the)j(arra)m(y)236 960 y Fm(varset)p Fn(.)39 b(The)30 b(argumen)m(t)h Fm(varnum)e Fn(de\014nes)g(the)i(size)f(of)g Fm(varset)p Fn(.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 V 236 1390 a Fn(The)30 b(correct)i(BDD)f(or)g(the)f(constan)m(t)i(false)e(on)g (errors.)236 1653 y Fo(See)35 b(also)p 236 1707 V 236 1820 a Fn(fdd)p 371 1820 28 4 v 32 w(ithset,)30 b(b)s(dd)p 837 1820 V 31 w(mak)m(eset)p 236 2171 3544 12 v 236 2284 a Fo(fdd)p 390 2284 32 4 v 38 w(o)m(v)m(erlap)s(domain)95 b Fn({)31 b(com)m(bine)f(t)m(w)m(o)i(FDD)f(blo)s(c)m(ks)f(in)m(to)g (one)p 236 2338 3544 12 v 236 2543 a Fm(int)47 b (fdd_overlapdomain\(int)42 b(v1,)47 b(int)g(v2\))236 2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(This)29 b(function)g(tak)m(es)j(t)m(w)m(o)g(FDD)g(blo)s(c)m(ks)e (and)g(merges)h(them)g(in)m(to)f(a)h(new)f(one,)i(suc)m(h)e(that)h(the) g(new)236 3048 y(one)26 b(is)e(enco)s(ded)h(using)e(b)s(oth)i(sets)h (of)f(BDD)h(v)-5 b(ariables.)38 b(If)25 b Fm(v1)f Fn(is)g(enco)s(ded)h (using)f(the)h(BDD)i(v)-5 b(ariables)236 3161 y Fj(a)284 3175 y Fh(1)324 3161 y Fj(;)15 b(:)g(:)g(:)h(;)f(a)573 3175 y Fi(n)644 3161 y Fn(and)24 b(has)f(a)h(domain)f(of)h([0)p Fj(;)15 b(N)1636 3175 y Fh(1)1676 3161 y Fn(],)26 b(and)d Fm(v2)g Fn(is)g(enco)s(ded)g(using)g Fj(b)2741 3175 y Fh(1)2780 3161 y Fj(;)15 b(:)g(:)g(:)i(;)e(b)3021 3175 y Fi(n)3092 3161 y Fn(and)23 b(has)g(a)i(domain)236 3274 y(of)37 b([0)p Fj(;)15 b(N)529 3288 y Fh(2)570 3274 y Fn(],)38 b(then)e(the)h(result)e(will)f(b)s(e)i(enco)s(ded)g(using)f (the)i(BDD)h(v)-5 b(ariables)35 b Fj(a)3036 3288 y Fh(1)3076 3274 y Fj(;)15 b(:)g(:)g(:)h(;)f(a)3325 3288 y Fi(n)3373 3274 y Fj(;)g(b)3452 3288 y Fh(1)3492 3274 y Fj(;)g(:)g(:)g(:)h(;)f(b) 3732 3288 y Fi(n)236 3387 y Fn(and)36 b(ha)m(v)m(e)i(the)f(domain)f([0) p Fj(;)15 b(N)1311 3401 y Fh(1)1376 3387 y Fc(\003)25 b Fj(N)1519 3401 y Fh(2)1558 3387 y Fn(].)60 b(The)37 b(use)f(of)h(this)f(function)f(ma)m(y)j(result)d(in)h(some)h(strange) 236 3500 y(output)30 b(from)g Fm(fdd)p 899 3500 29 4 v 34 w(printset)p Fn(.)236 3763 y Fo(Return)35 b(v)-6 b(alue)p 236 3817 3544 5 v 236 3930 a Fn(The)30 b(index)f(of)i(the)f (\014nite)f(domain)h(blo)s(c)m(k)236 4193 y Fo(See)35 b(also)p 236 4248 V 236 4360 a Fn(fdd)p 371 4360 28 4 v 32 w(extdomain)1962 5989 y(87)p eop %%Page: 88 96 88 95 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(prin)m(tset)95 b Fn({)31 b(prin)m(ts)e(a)i(BDD)g(for)f(a)h (\014nite)e(domain)h(blo)s(c)m(k)p 236 250 3544 12 v 236 455 a Fm(void)47 b(fdd_printset\(BDD)c(r\))236 568 y(void)k(fdd_fprintset\(FILE)c(*ofile,)i(BDD)i(f\))236 793 y Fo(Description)p 236 847 3544 5 v 236 960 a Fn(Prin)m(ts)26 b(the)h(BDD)h Fm(f)e Fn(using)g(a)h(set)g(notation)g(as)g(in)f Fm(bdd)p 2128 960 29 4 v 33 w(printset)f Fn(but)h(with)f(the)i(index)f (of)h(the)g(\014nite)236 1073 y(domain)k(blo)s(c)m(ks)g(included)f (instead)h(of)h(the)g(BDD)h(v)-5 b(ariables.)44 b(It)32 b(is)f(p)s(ossible)f(to)j(sp)s(ecify)d(a)j(prin)m(ting)236 1186 y(callbac)m(k)i(function)e(with)h Fm(fdd)p 1311 1186 V 33 w(file)p 1536 1186 V 34 w(hook)f Fn(or)i Fm(fdd)p 2055 1186 V 33 w(strm)p 2280 1186 V 34 w(hook)e Fn(whic)m(h)h(can)h(b)s (e)f(used)g(to)h(prin)m(t)e(the)236 1298 y(FDD)f(iden)m(ti\014er)c(in)h (a)i(readable)f(form.)236 1562 y Fo(See)35 b(also)p 236 1616 3544 5 v 236 1729 a Fn(b)s(dd)p 397 1729 28 4 v 31 w(prin)m(tset,)30 b(fdd)p 920 1729 V 31 w(\014le)p 1068 1729 V 32 w(ho)s(ok,)h(fdd)p 1478 1729 V 31 w(strm)p 1692 1729 V 33 w(ho)s(ok)p 236 2080 3544 12 v 236 2193 a Fo(fdd)p 390 2193 32 4 v 38 w(scanallv)-6 b(ar)96 b Fn({)31 b(Finds)e(one)h(satisfying)f(v)-5 b(alue)30 b(of)h(all)e(FDD)j (v)-5 b(ariables)p 236 2247 3544 12 v 236 2452 a Fm(int*)47 b(fdd_scanallvar\(BDD)c(r\))236 2677 y Fo(Description)p 236 2731 3544 5 v 236 2844 a Fn(Finds)24 b(one)i(satisfying)e (assignmen)m(t)i(in)e Fm(r)h Fn(of)h(all)f(the)g(de\014ned)g(FDD)i(v)-5 b(ariables.)37 b(Eac)m(h)27 b(v)-5 b(alue)25 b(is)f(stored)236 2957 y(in)d(an)h(arra)m(y)h(whic)m(h)e(is)h(returned.)36 b(The)22 b(size)g(of)h(this)e(arra)m(y)i(is)e(exactly)i(the)g(n)m(um)m (b)s(er)e(of)h(FDD)i(v)-5 b(ariables)236 3070 y(de\014ned.)40 b(It)30 b(is)g(the)g(user's)g(resp)s(onsibilit)m(y)c(to)31 b(free)g(this)e(arra)m(y)i(using)e Fm(free\(\))p Fn(.)236 3333 y Fo(Return)35 b(v)-6 b(alue)p 236 3387 V 236 3500 a Fn(An)27 b(arra)m(y)g(with)e(all)h(satisfying)f(v)-5 b(alues.)39 b(If)27 b Fm(r)f Fn(is)g(the)h(trivially)d(false)i(BDD,)i (then)f(NULL)g(is)e(returned.)236 3763 y Fo(See)35 b(also)p 236 3817 V 236 3930 a Fn(fdd)p 371 3930 28 4 v 32 w(scan)m(v)-5 b(ar)1962 5989 y(88)p eop %%Page: 89 97 89 96 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(scanset)96 b Fn({)31 b(scans)f(a)h(v)-5 b(ariable)29 b(set)p 236 250 3544 12 v 236 455 a Fm(int)47 b(fdd_scanset\(BDD)d(r,)j (int)g(**varset,)e(int)i(*varnum\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Scans)27 b(the)g(BDD)i Fm(r)d Fn(to)i(\014nd)e(all)g(o)s(ccurences)h(of)h(FDD)g(v)-5 b(ariables)26 b(and)g(then)h(stores)h(these)f(in)f Fm(varset)p Fn(.)236 960 y Fm(varset)f Fn(will)f(b)s(e)j(set)g(to)h(p)s(oin)m(t)d (to)j(an)f(arra)m(y)g(of)g(size)f Fm(varnum)g Fn(whic)m(h)f(will)f(con) m(tain)j(the)g(indices)e(of)i(the)236 1073 y(found)i(FDD)j(v)-5 b(ariables.)39 b(It)31 b(is)e(the)i(users)e(resp)s(onsibilit)m(y)e(to)k (free)f Fm(varset)f Fn(after)i(use.)236 1336 y Fo(Return)k(v)-6 b(alue)p 236 1390 V 236 1503 a Fn(Zero)31 b(on)f(success)g(or)h(a)g (negativ)m(e)g(error)f(co)s(de)h(on)f(error.)236 1766 y Fo(See)35 b(also)p 236 1820 V 236 1933 a Fn(fdd)p 371 1933 28 4 v 32 w(mak)m(eset)p 236 2266 3544 12 v 236 2379 a Fo(fdd)p 390 2379 32 4 v 38 w(scan)m(v)-6 b(ar)96 b Fn({)31 b(Finds)e(one)i(satisfying)e(v)-5 b(alue)29 b(of)i(a)g(FDD)g(v)-5 b(ariable)p 236 2434 3544 12 v 236 2638 a Fm(int)47 b(fdd_scanvar\(BDD)d(r,)j(int)g(var\))236 2863 y Fo(Description)p 236 2918 3544 5 v 236 3031 a Fn(Finds)31 b(one)i(satisfying)f(assignmen)m(t)h(of)g(the)f(FDD)i(v)-5 b(ariable)32 b Fm(var)g Fn(in)f(the)i(BDD)h Fm(r)f Fn(and)f(returns)g (this)236 3143 y(v)-5 b(alue.)236 3407 y Fo(Return)35 b(v)-6 b(alue)p 236 3461 V 236 3574 a Fn(The)25 b(v)-5 b(alue)25 b(of)h(a)g(satisfying)e(assignmen)m(t)h(of)h Fm(var)p Fn(.)38 b(If)25 b Fm(r)h Fn(is)e(the)i(trivially)d(false)i (BDD,)i(then)e(a)h(negativ)m(e)236 3687 y(v)-5 b(alue)30 b(is)f(returned.)236 3950 y Fo(See)35 b(also)p 236 4004 V 236 4117 a Fn(fdd)p 371 4117 28 4 v 32 w(scanallv)-5 b(ar)1962 5989 y(89)p eop %%Page: 90 98 90 97 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(setpair)95 b Fn({)31 b(de\014nes)e(a)i(pair)e(for)h(t)m(w)m (o)i(\014nite)e(domain)f(blo)s(c)m(ks)p 236 250 3544 12 v 236 455 a Fm(int)47 b(fdd_setpair\(bddPair)c(*pair,)j(int)h(p1,)g (int)f(p2\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(De\014nes)35 b(eac)m(h)i(v)-5 b(ariable)33 b(in)h(the)h(\014nite)f(domain)g(blo)s(c)m(k)h Fm(p1)f Fn(to)i(b)s(e)f(paired)e(with)h(the)h(corresp)s(onding)236 960 y(v)-5 b(ariable)28 b(in)g Fm(p2)p Fn(.)40 b(The)29 b(result)f(is)g(stored)h(in)f Fm(pair)g Fn(whic)m(h)g(m)m(ust)h(b)s(e)g (allo)s(cated)g(using)f Fm(bdd)p 3345 960 29 4 v 33 w(makepair)p Fn(.)236 1223 y Fo(Return)35 b(v)-6 b(alue)p 236 1277 3544 5 v 236 1390 a Fn(Zero)31 b(on)f(success)g(or)h(a)g(negativ)m(e)g (error)f(co)s(de)h(on)f(error.)236 1653 y Fo(See)35 b(also)p 236 1707 V 236 1820 a Fn(fdd)p 371 1820 28 4 v 32 w(setpairs)p 236 2171 3544 12 v 236 2284 a Fo(fdd)p 390 2284 32 4 v 38 w(setpairs)95 b Fn({)31 b(de\014nes)f(N)g(pairs)f(for)h(\014nite)g (domain)f(blo)s(c)m(ks)p 236 2338 3544 12 v 236 2543 a Fm(int)47 b(fdd_setpairs\(bddPair)42 b(*pair,)k(int)h(*p1,)g(int)g (*p2,)g(int)f(size\))236 2768 y Fo(Description)p 236 2822 3544 5 v 236 2935 a Fn(De\014nes)25 b(eac)m(h)h(v)-5 b(ariable)23 b(in)g(all)h(the)g(\014nite)g(domain)f(blo)s(c)m(ks)h (listed)f(in)h(the)g(arra)m(y)h Fm(p1)f Fn(to)i(b)s(e)e(paired)f(with) 236 3048 y(the)37 b(corresp)s(onding)d(v)-5 b(ariable)35 b(in)h Fm(p2)p Fn(.)58 b(The)36 b(result)f(is)g(stored)i(in)e Fm(pair)g Fn(whic)m(h)g(m)m(ust)i(b)s(e)e(allo)s(cated)236 3161 y(using)29 b Fm(bdd)p 624 3161 29 4 v 34 w(makeset)p Fn(.)236 3424 y Fo(Return)35 b(v)-6 b(alue)p 236 3479 3544 5 v 236 3591 a Fn(Zero)31 b(on)f(success)g(or)h(a)g(negativ)m(e)g (error)f(co)s(de)h(on)f(error.)236 3855 y Fo(See)35 b(also)p 236 3909 V 236 4022 a Fn(b)s(dd)p 397 4022 28 4 v 31 w(setpair)1962 5989 y(90)p eop %%Page: 91 99 91 98 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(strm)p 641 196 V 37 w(ho)s(ok)96 b Fn({)31 b(Sp)s(eci\014es)d(a)j(prin)m(ting)d(callbac)m(k)j(handler)p 236 250 3544 12 v 236 455 a Fm(bddstrmhandler)44 b (fdd_strm_hook\(bddstrmhand)o(ler)d(handler\))236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(A)23 b(prin)m(ting)e(callbac)m(k)i(handler)d(for)j(use)f(with)g(FDDs)i(is)d (used)h(to)i(con)m(v)m(ert)g(the)f(FDD)h(in)m(teger)f(iden)m(ti\014er) 236 960 y(in)m(to)34 b(something)e(readable)h(b)m(y)h(the)f(end)g (user.)49 b(T)m(ypically)31 b(the)j(handler)e(will)e(prin)m(t)i(a)i (string)e(name)236 1073 y(instead)e(of)g(the)h(iden)m(ti\014er.)39 b(A)30 b(handler)f(could)g(lo)s(ok)h(lik)m(e)g(this:)236 1260 y Fm(void)47 b(printhandler\(ostream)42 b(&o,)47 b(int)g(var\))236 1373 y({)379 1486 y(extern)f(char)h(**names;)379 1599 y(o)h(<<)f(names[var];)236 1712 y(})236 1900 y Fn(The)30 b(handler)f(can)h(then)g(b)s(e)g(passed)g(to)h(BuDDy)g(lik)m(e)f(this:) 39 b Fm(fdd)p 2510 1900 29 4 v 34 w(strm)p 2736 1900 V 33 w(hook\(printhandler\))p Fn(.)327 2012 y(No)33 b(default)e (handler)g(is)g(supplied.)43 b(The)32 b(argumen)m(t)h Fm(handler)d Fn(ma)m(y)j(b)s(e)e(NULL)i(if)e(no)h(handler)e(is)236 2125 y(needed.)236 2389 y Fo(Return)35 b(v)-6 b(alue)p 236 2443 3544 5 v 236 2556 a Fn(The)30 b(old)g(handler)236 2819 y Fo(See)35 b(also)p 236 2873 V 236 2986 a Fn(fdd)p 371 2986 28 4 v 32 w(prin)m(tset,)30 b(b)s(dd)p 921 2986 V 30 w(\014le)p 1068 2986 V 32 w(ho)s(ok)p 236 3337 3544 12 v 236 3450 a Fo(fdd)p 390 3450 32 4 v 38 w(v)-6 b(arn)m(um)95 b Fn({)31 b(binary)d(size)j(of)f(a)h(\014nite)e(domain)g(blo)s(c)m(k)p 236 3504 3544 12 v 236 3709 a Fm(int)47 b(fdd_varnum\(int)d(var\))236 3934 y Fo(Description)p 236 3988 3544 5 v 236 4101 a Fn(Returns)30 b(the)g(n)m(um)m(b)s(er)f(of)i(BDD)g(v)-5 b(ariables)29 b(used)h(for)g(the)h(\014nite)e(domain)g(blo)s(c)m(k)h Fm(var)p Fn(.)236 4364 y Fo(Return)35 b(v)-6 b(alue)p 236 4418 V 236 4531 a Fn(The)30 b(n)m(um)m(b)s(er)f(of)i(v)-5 b(ariables)29 b(or)h(a)h(negativ)m(e)g(error)f(co)s(de)236 4794 y Fo(See)35 b(also)p 236 4849 V 236 4962 a Fn(fdd)p 371 4962 28 4 v 32 w(v)-5 b(ars)1962 5989 y(91)p eop %%Page: 92 100 92 99 bop 236 83 3544 12 v 236 196 a Fo(fdd)p 390 196 32 4 v 38 w(v)-6 b(ars)96 b Fn({)31 b(all)e(BDD)j(v)-5 b(ariables)29 b(asso)s(ciated)h(with)f(a)i(\014nite)f(domain)f(blo)s(c) m(k)p 236 250 3544 12 v 236 455 a Fm(int)47 b(*fdd_vars\(int)d(var\)) 236 680 y Fo(Description)p 236 734 3544 5 v 236 847 a Fn(Returns)34 b(an)h(in)m(teger)h(arra)m(y)f(con)m(taining)g(the)g(BDD) h(v)-5 b(ariables)34 b(used)g(to)i(de\014ne)e(the)i(\014nite)e(domain) 236 960 y(blo)s(c)m(k)43 b Fm(var)p Fn(.)80 b(The)43 b(size)g(of)h(the)g(arra)m(y)g(is)f(the)g(n)m(um)m(b)s(er)g(of)g(v)-5 b(ariables)43 b(used)g(to)h(de\014ne)f(the)h(\014nite)236 1073 y(domain)27 b(blo)s(c)m(k.)40 b(The)28 b(arra)m(y)h(will)d(ha)m(v) m(e)j(the)g(Least)g(Signi\014can)m(t)e(Bit)h(at)i(p)s(os)d(0.)41 b(The)28 b(arra)m(y)g(m)m(ust)h Ff(not)236 1186 y Fn(b)s(e)h(deallo)s (cated.)236 1449 y Fo(Return)35 b(v)-6 b(alue)p 236 1503 V 236 1616 a Fn(In)m(teger)32 b(arra)m(y)e(con)m(taning)h(the)g(v)-5 b(ariable)29 b(n)m(um)m(b)s(ers)g(or)h(NULL)g(if)g Fm(v)g Fn(is)f(an)h(unkno)m(wn)f(blo)s(c)m(k.)236 1879 y Fo(See)35 b(also)p 236 1933 V 236 2046 a Fn(fdd)p 371 2046 28 4 v 32 w(v)-5 b(arn)m(um)p 236 2379 3544 12 v 236 2492 a Fo(op)s(erator)p Fm(<<)95 b Fn({)31 b(C++)e(output)h(op)s(erator)h (for)f(BDDs)p 236 2546 V 236 2751 a Fm(ostream)46 b (&operator<<\(ostream)d(&o,)j(const)h(bdd_ioformat)d(&f\))236 2864 y(ostream)i(&operator<<\(ostream)d(&o,)j(const)h(bdd)g(&r\))236 3089 y Fo(Description)p 236 3143 3544 5 v 236 3256 a Fn(BDDs)60 b(can)g(b)s(e)e(prin)m(ted)g(in)f(v)-5 b(arious)58 b(formats)i(using)d(the)i(C++)f(iostreams)h(library)-8 b(.)125 b(The)236 3369 y(formats)61 b(are)h(the)f(those)g(used)f(in)g Fm(bdd)p 1761 3369 29 4 v 34 w(printset)p Fn(,)66 b Fm(bdd)p 2414 3369 V 34 w(printtable)p Fn(,)g Fm(fdd)p 3163 3369 V 33 w(printset)59 b Fn(and)236 3482 y Fm(bdd)p 386 3482 V 34 w(printdot)p Fn(.)146 b(The)65 b(format)i(can)f(b)s(e)g(sp)s (eci\014ed)e(with)h(the)h(follo)m(wing)f(format)h(ob)5 b(jects:)286 3703 y Fm(bddset)241 b Fn(BDD)32 b(lev)m(el)e(set)h (format)286 3816 y Fm(bddtable)145 b Fn(BDD)32 b(lev)m(el)e(table)g (format)286 3928 y Fm(bdddot)241 b Fn(Output)29 b(for)i(use)f(with)f (Dot)286 4041 y Fm(bddall)241 b Fn(The)30 b(whole)g(no)s(de)f(table)286 4154 y Fm(fddset)241 b Fn(FDD)32 b(lev)m(el)e(set)h(format)236 4309 y(So)f(a)h(BDD)h Fm(x)e Fn(can)h(for)f(example)g(b)s(e)f(prin)m (ted)g(as)i(a)g(table)f(with)f(the)i(command)327 4535 y Fm(cout)47 b(<<)g(bddtable)e(<<)j(x)f(<<)g(endl)p Fn(.)236 4798 y Fo(Return)35 b(v)-6 b(alue)p 236 4853 3544 5 v 236 4965 a Fn(The)30 b(sp)s(eci\014ed)f(output)h(stream)236 5229 y Fo(See)35 b(also)p 236 5283 V 236 5396 a Fn(b)s(dd)p 397 5396 28 4 v 31 w(strm)p 611 5396 V 32 w(ho)s(ok,)c(fdd)p 1021 5396 V 31 w(strm)p 1235 5396 V 33 w(ho)s(ok)1962 5989 y(92)p eop %%Page: 93 101 93 100 bop 236 826 a Fp(Bibliograph)-6 b(y)236 1271 y Fn([1])47 b(Randal)20 b(E.)i(Bry)m(an)m(t.)28 b(Graph-Based)22 b(Algorithms)e(for)i(Bo)s(olean)g(Function)f(Manipulation.)j Ff(IEEE)378 1384 y(T)-7 b(r)i(ansactions)35 b(on)e(Computers)p Fn(,)f(C-35\(8\):677{691,)k(August)30 b(1986.)236 1572 y([2])47 b(Randal)30 b(E.)i(Bry)m(an)m(t.)46 b(Sym)m(b)s(olic)30 b(Bo)s(olean)i(manipulation)d(with)i(ordered)g(binary)f(decision)g (dia-)378 1685 y(grams.)40 b Ff(A)n(CM)32 b(Computing)h(Surveys)p Fn(,)e(24\(3\):293{318,)36 b(Septem)m(b)s(er)30 b(1992.)236 1873 y([3])47 b(K.S.)22 b(Brace,)j(R.L.)d(Rudell,)g(and)g(R.E.)h(Bry)m (an)m(t.)28 b(E\016cien)m(t)23 b(Implemen)m(tation)e(of)i(a)f(BDD)i (Pac)m(k)-5 b(age.)378 1985 y(In)36 b Ff(27th)j(A)n(CM/IEEE)e(Design)h (A)n(utomation)h(Confer)-5 b(enc)g(e)p Fn(,)40 b(pages)d(40{45,)k (Orlando,)36 b(Florida,)378 2098 y(June)29 b(1990.)j(A)m(CM/IEEE,)g (IEEE)d(Computer)h(So)s(ciet)m(y)g(Press.)236 2286 y([4])47 b(R.)40 b(Rudell.)67 b(Dynamic)40 b(Variable)f(Ordering)g(for)g (Ordered)g(Binary)h(Decision)f(Diagrams.)70 b(In)378 2399 y Ff(IEEE)29 b(/A)n(CM)g(International)j(Confer)-5 b(enc)g(e)31 b(on)f(CAD)p Fn(,)d(pages)h(42{47,)j(San)m(ta)d(Clara,)g (California,)378 2512 y(No)m(v)m(em)m(b)s(er)j(1993.)i(A)m(CM/IEEE,)e (IEEE)e(Computer)h(So)s(ciet)m(y)h(Press.)1962 5989 y(93)p eop %%Page: 94 102 94 101 bop 236 630 a Fp(Index)236 1053 y Fn(addition,)29 b(8)236 1166 y(arithmetic,)h(7)236 1362 y(b)s(dd)p 397 1362 28 4 v 31 w(addref)g(,)g(22)236 1475 y(b)s(dd)p 397 1475 V 31 w(addv)-5 b(arblo)s(c)m(k)29 b(,)i(23)236 1588 y(b)s(dd)p 397 1588 V 31 w(allsat)f(,)g(24)236 1700 y(b)s(dd)p 397 1700 V 31 w(and)g(,)g(24)236 1813 y(b)s(dd)p 397 1813 V 31 w(ano)s(decoun)m(t)h(,)f(25)236 1926 y(b)s(dd)p 397 1926 V 31 w(appall)f(,)h(25)236 2039 y(b)s(dd)p 397 2039 V 31 w(app)s(ex)g(,)g(26)236 2152 y(b)s(dd)p 397 2152 V 31 w(apply)f(,)i(27)236 2265 y(b)s(dd)p 397 2265 V 31 w(appuni)d(,)j(27)236 2378 y(b)s(dd)p 397 2378 V 31 w(autoreorder)g(,)f(28)236 2491 y(b)s(dd)p 397 2491 V 31 w(autoreorder)p 888 2491 V 33 w(times)g(,)h(28)236 2604 y(b)s(dd)p 397 2604 V 31 w(biimp)d(,)i(28)236 2717 y(b)s(dd)p 397 2717 V 31 w(blo)s(c)m(k\014le)p 755 2717 V 31 w(ho)s(ok)h(,)f(29)236 2830 y(b)s(dd)p 397 2830 V 31 w(buildcub)s(e)d(,)j(29)236 2943 y(b)s(dd)p 397 2943 V 31 w(cac)m(hestats)j(,)d(30)236 3055 y(b)s(dd)p 397 3055 V 31 w(clear)p 615 3055 V 33 w(error)g(,)g(30)236 3168 y(b)s(dd)p 397 3168 V 31 w(clrv)-5 b(arblo)s(c)m(ks)29 b(,)i(30)236 3281 y(b)s(dd)p 397 3281 V 31 w(comp)s(ose)g(,)f(31)236 3394 y(b)s(dd)p 397 3394 V 31 w(constrain)g(,)g(31)236 3507 y(b)s(dd)p 397 3507 V 31 w(delref)f(,)i(32)236 3620 y(b)s(dd)p 397 3620 V 31 w(disable)p 703 3620 V 31 w(reorder)f(,)g(32) 236 3733 y(b)s(dd)p 397 3733 V 31 w(done,)g(32)236 3846 y(b)s(dd)p 397 3846 V 31 w(enable)p 681 3846 V 32 w(reorder)g(,)h(33) 236 3959 y(b)s(dd)p 397 3959 V 31 w(error)p 621 3959 V 32 w(ho)s(ok)g(,)f(33)236 4072 y(b)s(dd)p 397 4072 V 31 w(errstring)f(,)h(34)236 4185 y(b)s(dd)p 397 4185 V 31 w(exist)g(,)h(34)236 4297 y(b)s(dd)p 397 4297 V 31 w(extv)-5 b(arn)m(um)30 b(,)h(34)236 4410 y(b)s(dd)p 397 4410 V 31 w(false)f(,)h(35)236 4523 y(b)s(dd)p 397 4523 V 31 w(\014le)p 545 4523 V 32 w(ho)s(ok)f(,)h(35)236 4636 y(b)s(dd)p 397 4636 V 31 w(fnload)e(,)i(42)236 4749 y(b)s(dd)p 397 4749 V 31 w(fnsa)m(v)m(e)g(,)g(57)236 4862 y(b)s(dd)p 397 4862 V 31 w(forall)e(,)i(36)236 4975 y(b)s(dd)p 397 4975 V 31 w(fprin)m(tall)d(,)i(46)236 5088 y(b)s(dd)p 397 5088 V 31 w(fprin)m(tdot)f(,)i(47)236 5201 y(b)s(dd)p 397 5201 V 31 w(fprin)m(tset)e(,)i(48)236 5314 y(b)s(dd)p 397 5314 V 31 w(fprin)m(tstat)f(,)g(48)236 5427 y(b)s(dd)p 397 5427 V 31 w(fprin)m(ttable)f(,)h(49)236 5539 y(b)s(dd)p 397 5539 V 31 w(freepair)f(,)i(36)236 5652 y(b)s(dd)p 397 5652 V 31 w(fullsatone)e(,)i(36)2153 1053 y(b)s(dd)p 2314 1053 V 31 w(gb)s(c)p 2484 1053 V 33 w(ho)s(ok)f(,)g(37)2153 1166 y(b)s(dd)p 2314 1166 V 31 w(getallo)s(cn)m(um)g(,)h(37)2153 1279 y(b)s(dd)p 2314 1279 V 31 w(getno)s(den)m(um)f(,)h(38)2153 1392 y(b)s(dd)p 2314 1392 V 31 w(getreorder)p 2749 1392 V 33 w(metho)s(d)f(,)h(38)2153 1505 y(b)s(dd)p 2314 1505 V 31 w(getreorder)p 2749 1505 V 33 w(times)f(,)h(38)2153 1617 y(b)s(dd)p 2314 1617 V 31 w(high)e(,)i(39)2153 1730 y(b)s(dd)p 2314 1730 V 31 w(ibuildcub)s(e)26 b(,)k(29)2153 1843 y(b)s(dd)p 2314 1843 V 31 w(imp)f(,)h(39)2153 1956 y(b)s(dd)p 2314 1956 V 31 w(init)f(,)h(40)2153 2069 y(b)s(dd)p 2314 2069 V 31 w(in)m(taddv)-5 b(arblo)s(c)m(k)29 b(,)h(23)2153 2182 y(b)s(dd)p 2314 2182 V 31 w(isrunning)d(,)j(40)2153 2295 y(b)s(dd)p 2314 2295 V 31 w(ite)g(,)h(41)2153 2408 y(b)s(dd)p 2314 2408 V 31 w(ith)m(v)-5 b(ar)30 b(,)g(41)2153 2521 y(b)s(dd)p 2314 2521 V 31 w(lev)m(el2v)-5 b(ar)30 b(,)h(42)2153 2634 y(b)s(dd)p 2314 2634 V 31 w(load)f(,)g(42)2153 2747 y(b)s(dd)p 2314 2747 V 31 w(lo)m(w)g(,)h(43)2153 2859 y(b)s(dd)p 2314 2859 V 31 w(mak)m(eset)h(,)e(43)2153 2972 y(b)s(dd)p 2314 2972 V 31 w(newpair)f(,)h(44)2153 3085 y(b)s(dd)p 2314 3085 V 31 w(nith)m(v)-5 b(ar)29 b(,)i(44)2153 3198 y(b)s(dd)p 2314 3198 V 31 w(no)s(decoun)m(t)f(,)h (45)2153 3311 y(b)s(dd)p 2314 3311 V 31 w(not)g(,)f(45)2153 3424 y(b)s(dd)p 2314 3424 V 31 w(or)g(,)h(45)2153 3537 y(b)s(dd)p 2314 3537 V 31 w(pathcoun)m(t)g(,)f(46)2153 3650 y(b)s(dd)p 2314 3650 V 31 w(prin)m(tall)e(,)i(46)2153 3763 y(b)s(dd)p 2314 3763 V 31 w(prin)m(tdot)f(,)i(47)2153 3876 y(b)s(dd)p 2314 3876 V 31 w(prin)m(torder)e(,)h(47)2153 3989 y(b)s(dd)p 2314 3989 V 31 w(prin)m(tset)g(,)g(48)2153 4101 y(b)s(dd)p 2314 4101 V 31 w(prin)m(tstat)g(,)h(48)2153 4214 y(b)s(dd)p 2314 4214 V 31 w(prin)m(ttable)e(,)h(49)2153 4327 y(b)s(dd)p 2314 4327 V 31 w(relpro)s(d)e(,)j(49)2153 4440 y(b)s(dd)p 2314 4440 V 31 w(reorder)f(,)g(50)2153 4553 y(b)s(dd)p 2314 4553 V 31 w(reorder)p 2629 4553 V 32 w(gain)g(,)h(51)2153 4666 y(b)s(dd)p 2314 4666 V 31 w(reorder)p 2629 4666 V 32 w(ho)s(ok)f(,)h(51)2153 4779 y(b)s(dd)p 2314 4779 V 31 w(reorder)p 2629 4779 V 32 w(prob)s(e)f(,)g(52)2153 4892 y(b)s(dd)p 2314 4892 V 31 w(reorder)p 2629 4892 V 32 w(v)m(erb)s(ose)h(,)f(52)2153 5005 y(b)s(dd)p 2314 5005 V 31 w(replace)g(,)h(53)2153 5118 y(b)s(dd)p 2314 5118 V 31 w(resetpair)f(,)g(53)2153 5231 y(b)s(dd)p 2314 5231 V 31 w(resize)p 2563 5231 V 33 w(ho)s(ok)g(,)g(54)2153 5344 y(b)s(dd)p 2314 5344 V 31 w(restrict)g(,)h(55)2153 5456 y(b)s(dd)p 2314 5456 V 31 w(satcoun)m(t)h(,)e(55)2153 5569 y(b)s(dd)p 2314 5569 V 31 w(satcoun)m(tln)g(,)h(56)2153 5682 y(b)s(dd)p 2314 5682 V 31 w(satone)g(,)g(56)1962 5989 y(94)p eop %%Page: 95 103 95 102 bop 236 162 a Fn(b)s(dd)p 397 162 28 4 v 31 w(satoneset)32 b(,)e(57)236 275 y(b)s(dd)p 397 275 V 31 w(sa)m(v)m(e)i(,)e(57)236 388 y(b)s(dd)p 397 388 V 31 w(scanset)h(,)g(58)236 501 y(b)s(dd)p 397 501 V 31 w(setb)s(ddpair)d(,)i(60)236 614 y(b)s(dd)p 397 614 V 31 w(setb)s(ddpairs)e(,)i(61)236 727 y(b)s(dd)p 397 727 V 31 w(setcac)m(heratio)j(,)d(58)236 840 y(b)s(dd)p 397 840 V 31 w(setcoun)m(tlnset)h(,)g(56)236 953 y(b)s(dd)p 397 953 V 31 w(setcoun)m(tset)h(,)f(55)236 1066 y(b)s(dd)p 397 1066 V 31 w(setmaxincrease)g(,)g(59)236 1178 y(b)s(dd)p 397 1178 V 31 w(setmaxno)s(den)m(um)f(,)g(59)236 1291 y(b)s(dd)p 397 1291 V 31 w(setminfreeno)s(des)f(,)h(60)236 1404 y(b)s(dd)p 397 1404 V 31 w(setpair)g(,)g(60)236 1517 y(b)s(dd)p 397 1517 V 31 w(setpairs)g(,)g(61)236 1630 y(b)s(dd)p 397 1630 V 31 w(setv)-5 b(arn)m(um)30 b(,)h(61)236 1743 y(b)s(dd)p 397 1743 V 31 w(setv)-5 b(arorder)30 b(,)h(62)236 1856 y(b)s(dd)p 397 1856 V 31 w(simplify)c(,)j(62)236 1969 y(b)s(dd)p 397 1969 V 31 w(stats)h(,)g(62)236 2082 y(b)s(dd)p 397 2082 V 31 w(strm)p 611 2082 V 32 w(ho)s(ok)g(,)f(63)236 2195 y(b)s(dd)p 397 2195 V 31 w(supp)s(ort)f(,)h(63)236 2308 y(b)s(dd)p 397 2308 V 31 w(sw)m(ap)m(v)-5 b(ar)31 b(,)f(64)236 2420 y(b)s(dd)p 397 2420 V 31 w(true)g(,)h(64)236 2533 y(b)s(dd)p 397 2533 V 31 w(unique)d(,)j(65)236 2646 y(b)s(dd)p 397 2646 V 31 w(v)-5 b(ar)30 b(,)h(65)236 2759 y(b)s(dd)p 397 2759 V 31 w(v)-5 b(ar2lev)m(el)31 b(,)f(65)236 2872 y(b)s(dd)p 397 2872 V 31 w(v)-5 b(arblo)s(c)m(k)g(all)29 b(,)h(66)236 2985 y(b)s(dd)p 397 2985 V 31 w(v)-5 b(arn)m(um)30 b(,)g(66)236 3098 y(b)s(dd)p 397 3098 V 31 w(v)-5 b(arpro\014le)29 b(,)i(66)236 3211 y(b)s(dd)p 397 3211 V 31 w(v)m(eccomp)s(ose)h(,)e(67) 236 3324 y(b)s(dd)p 397 3324 V 31 w(v)m(ersionn)m(um)f(,)i(67)236 3437 y(b)s(dd)p 397 3437 V 31 w(v)m(ersionstr)f(,)g(67)236 3550 y(b)s(dd)p 397 3550 V 31 w(xor)g(,)h(68)236 3662 y(b)s(ddCac)m(heStat)f(,)h(20)236 3775 y(b)s(ddfalse,)e(68)236 3888 y(b)s(ddGb)s(cStat)g(,)i(21)236 4001 y(b)s(ddStat)e(,)i(22)236 4114 y(b)s(ddtrue)d(,)j(68)236 4227 y(Bo)s(olean)g(V)-8 b(ectors,)32 b(7)236 4340 y(b)m(v)m(ec)g(,)e(69)236 4453 y(b)m(v)m(ec)p 414 4453 V 34 w(add)g(,)h(69)236 4566 y(b)m(v)m(ec)p 414 4566 V 34 w(addref)f(,)g(70)236 4679 y(b)m(v)m(ec)p 414 4679 V 34 w(co)s(erce)i(,)e(70)236 4792 y(b)m(v)m(ec)p 414 4792 V 34 w(con)h(,)f(70)236 4905 y(b)m(v)m(ec)p 414 4905 V 34 w(cop)m(y)h(,)g(71)236 5017 y(b)m(v)m(ec)p 414 5017 V 34 w(delref)e(,)i(71)236 5130 y(b)m(v)m(ec)p 414 5130 V 34 w(div)e(,)i(71)236 5243 y(b)m(v)m(ec)p 414 5243 V 34 w(div\014xed)e(,)h(72)236 5356 y(b)m(v)m(ec)p 414 5356 V 34 w(equ)g(,)h(72)236 5469 y(b)m(v)m(ec)p 414 5469 V 34 w(false)f(,)h(72)236 5582 y(b)m(v)m(ec)p 414 5582 V 34 w(free)g(,)f(73)236 5695 y(b)m(v)m(ec)p 414 5695 V 34 w(gte)i(,)e(73)2153 162 y(b)m(v)m(ec)p 2331 162 V 34 w(gth)h(,)f(73)2153 275 y(b)m(v)m(ec)p 2331 275 V 34 w(isconst)g(,)h(74)2153 388 y(b)m(v)m(ec)p 2331 388 V 34 w(ite)f(,)h(74)2153 501 y(b)m(v)m(ec)p 2331 501 V 34 w(lte)f(,)h(74)2153 614 y(b)m(v)m(ec)p 2331 614 V 34 w(lth)f(,)g(75)2153 727 y(b)m(v)m(ec)p 2331 727 V 34 w(map1)h(,)f(75)2153 840 y(b)m(v)m(ec)p 2331 840 V 34 w(map2)h(,)f(76)2153 953 y(b)m(v)m(ec)p 2331 953 V 34 w(map3)h(,)f(76)2153 1066 y(b)m(v)m(ec)p 2331 1066 V 34 w(m)m(ul)f(,)i(77)2153 1178 y(b)m(v)m(ec)p 2331 1178 V 34 w(m)m(ul\014xed)e(,)h(77)2153 1291 y(b)m(v)m(ec)p 2331 1291 V 34 w(neq)g(,)h(77)2153 1404 y(b)m(v)m(ec)p 2331 1404 V 34 w(shl)e(,)i(78)2153 1517 y(b)m(v)m(ec)p 2331 1517 V 34 w(shl\014xed)d(,)j(78)2153 1630 y(b)m(v)m(ec)p 2331 1630 V 34 w(shr)e(,)i(79)2153 1743 y(b)m(v)m(ec)p 2331 1743 V 34 w(shr\014xed)e(,)h(79)2153 1856 y(b)m(v)m(ec)p 2331 1856 V 34 w(sub)f(,)i(80)2153 1969 y(b)m(v)m(ec)p 2331 1969 V 34 w(true)f(,)h(80)2153 2082 y(b)m(v)m(ec)p 2331 2082 V 34 w(v)-5 b(al)30 b(,)h(81)2153 2195 y(b)m(v)m(ec)p 2331 2195 V 34 w(v)-5 b(ar)30 b(,)h(81)2153 2308 y(b)m(v)m(ec)p 2331 2308 V 34 w(v)-5 b(arfdd)29 b(,)i(82)2153 2420 y(b)m(v)m(ec)p 2331 2420 V 34 w(v)-5 b(arv)m(ec)32 b(,)e(82)2153 2616 y(C++)g(in)m(terface,)h(6)2153 2729 y(compiling,)e(3)2153 2925 y(dynamic)g(v)-5 b(ariable)29 b(reordering,)h(5)2153 3121 y(error)g(handling,)e(6)2153 3317 y(fdd)p 2288 3317 V 32 w(clearall)h(,)i(82)2153 3430 y(fdd)p 2288 3430 V 32 w(domain)e(,)h(83)2153 3543 y(fdd)p 2288 3543 V 32 w(domainn)m(um)e(,)j(83)2153 3656 y(fdd)p 2288 3656 V 32 w(domainsize)e(,)h(83)2153 3769 y(fdd)p 2288 3769 V 32 w(equals)f(,)i(84)2153 3882 y(fdd)p 2288 3882 V 32 w(extdomain)f(,)g(84)2153 3995 y(fdd)p 2288 3995 V 32 w(\014le)p 2437 3995 V 32 w(ho)s(ok)g(,)g(85)2153 4107 y(fdd)p 2288 4107 V 32 w(fprin)m(tset)f(,)i(88)2153 4220 y(fdd)p 2288 4220 V 32 w(in)m(taddv)-5 b(arblo)s(c)m(k)29 b(,)h(85)2153 4333 y(fdd)p 2288 4333 V 32 w(ithset)g(,)g(86)2153 4446 y(fdd)p 2288 4446 V 32 w(ith)m(v)-5 b(ar)30 b(,)g(86)2153 4559 y(fdd)p 2288 4559 V 32 w(mak)m(eset)i(,)e(87)2153 4672 y(fdd)p 2288 4672 V 32 w(o)m(v)m(erlap)s(domain)f(,)i(87)2153 4785 y(fdd)p 2288 4785 V 32 w(prin)m(tset)e(,)i(88)2153 4898 y(fdd)p 2288 4898 V 32 w(scanallv)-5 b(ar)29 b(,)i(88)2153 5011 y(fdd)p 2288 5011 V 32 w(scanset)g(,)f(89)2153 5124 y(fdd)p 2288 5124 V 32 w(scan)m(v)-5 b(ar)31 b(,)f(89)2153 5237 y(fdd)p 2288 5237 V 32 w(setpair)f(,)i(90)2153 5350 y(fdd)p 2288 5350 V 32 w(setpairs)e(,)i(90)2153 5462 y(fdd)p 2288 5462 V 32 w(strm)p 2503 5462 V 32 w(ho)s(ok)f(,)h(91)2153 5575 y(fdd)p 2288 5575 V 32 w(v)-5 b(arn)m(um)29 b(,)i(91)2153 5688 y(fdd)p 2288 5688 V 32 w(v)-5 b(ars)30 b(,)g(92)1962 5989 y(95)p eop %%Page: 96 104 96 103 bop 236 162 a Fn(\014nite)30 b(domain)f(blo)s(c)m(ks,)h(7)236 358 y(implemen)m(tation,)f(13)236 471 y(installing,)f(3)236 667 y(op)s(erator)p Fm(<<)i Fn(,)h(92)236 863 y(programming)e (examples,)i(3)236 1059 y(relational)f(pro)s(duct,)f(26)236 1172 y(reordering,)h(5)236 1368 y(v)-5 b(ariable)29 b(reordering,)h(5) 236 1481 y(v)-5 b(ariable)29 b(sets,)i(4)1962 5989 y(96)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF buddy-2.4/doc/tech.txt0000644000076500001440000001243310070636500010401 **************************************************************************** How to create your own internal BDD functions. **************************************************************************** PLEASE NOTE That interrupting variable reordering has been introduced after this document was written. ===[ Functions that do not change or produce new BDDs ]===================== I'll do this by example. Take "bdd_satcount" that counts the number of satisfying assignments that makes a BDD true. Almost all functions consists of some introduction followed by a recursion through the BDD. * Use the type BDD for all references (numbers) to BDD nodes. * External BDD variables used internally in the package are defined in "kernel.h" * Macros for reading BDD nodes are: LEVEL(r) LOW(r) HIGH(r) ISCONST(r) => true if r is one of the terminals double bdd_satcount(BDD r) { double size=1; int n; CHECKa(r, 0.0); /* CHECK for valid nodes - defined in kernel.h */ miscid = CACHEID_SATCOU; /* Setup global variables. This is used extensively instead of passing arguments to the recursive functions, for faster recursive calls */ for (n=0 ; na == root && entry->c == miscid) return entry->r.dres; /* Do whatever calculations are needed */ size = 0; s = 1; for (m=LEVEL(root)+1 ; ma = root; entry->c = miscid; entry->r.dres = size; return size; /* Return result */ } ===[ Functions that produces new BDDs ]===================================== Functions that produces BDD nodes must take great care to avoid loosing intermidiate nodes when automatic garbage collections occur. This is doneby stacking each intermidiate result until they are no more used. This stack is check by the garbage collector. Macros for accessing the stack: INITREF: Reset the stack PUSHREF(n): Push the node 'n' on the stack READREF(p): Read 'p' positions down the stack POPREF(p): Pop 'p' nodes off the stack. Again I'll illustrate this with an example - the NOT operator. BDD bdd_not(BDD r) { int res; CHECKa(r, bddfalse); /* Validate arguments */ INITREF; /* Important! resets the stack */ res = not_rec(r); /* Recurse */ checkreorder(res); /* Check to see if a reordering was called for */ return res; /* Return result */ } static BDD not_rec(BDD r) { BddCacheData *entry; /* Cache entry pointer */ BDD res; if (ISZERO(r)) /* Check constant terminals */ return BDDONE; if (ISONE(r)) return BDDZERO; /* Lookup in cache */ entry = BddCache_lookup(&applycache, NOTHASH(r)); if (entry->a == r && entry->c == bddop_not) return entry->r.res; /* Recurse AND push result on the reference stack */ PUSHREF( not_rec(LOW(r)) ); PUSHREF( not_rec(HIGH(r)) ); /* Create a new BDD node */ res = bdd_makenode(LEVEL(r), READREF(2), READREF(1)); /* Pop result off the stack */ POPREF(2); /* Insert in cache */ entry->a = r; entry->c = bddop_not; entry->r.res = res; /* Return the result */ return res; } ===[ Documentation ]======================================================== ALL entries visible to the user should be documentet by an commented section like the one shown here, placed right before the code. Each doc. entry consist of a keyword followed by {* ... text ... *}. The entries are: NAME: Name of the function. SECTION: Which part to place the documentation in. SHORT: One line description of the code. PROTO: The exact prototype. DESCR: Multiline description of the code. ALSO: Other relevant stuff. RETURN: The returned value. /* NAME {* bdd\_satcount *} SECTION {* info *} SHORT {* Calculates the number of satisfying variable assignments *} PROTO {* double bdd_satcount(BDD r) *} DESCR {* Calculates how many possible variable assignments there exists such that {\tt r} is satisfied, taking all defined variables into account. *} ALSO {* bdd\_satone, bdd\_fullsatone, bdd\_satcountln *} RETURN {* The number of possible assignments. *} */