./bb/0040755002342100007640000000000007637613644007355 5ustar bbbb./bb/.kde/0040755002342100007640000000000007616533024010164 5ustar bbbb./bb/.kde/Autostart/0040755002342100007640000000000007616533024012152 5ustar bbbb./bb/.kde/Autostart/.directory0100644002342100007640000000057507616533024014163 0ustar bbbb[Desktop Entry] Type=Directory Name=Autostart Name[ca]=Autoengegada Name[da]=Selvstart Name[eo]=Aýtomata Lanæo Name[es]=Inicio Name[fi]=Automaattikäynnistys Name[fr]=Démarrage Name[hu]=Automatikus Indítás Name[is]=Ræsiferli Name[it]=Avvia automatico Name[ja]=¼«Æ°µ¯Æ° Name[mi]=Automatikus Indítás Name[pt]=Arranque Name[pt_BR]=Auto-Início Name[ru]=á×ÔÏÓÔÁÒÔ Name[sk]=Pri spustení ./bb/.kde/Autostart/Autorun.desktop0100644002342100007640000000020707616533024015176 0ustar bbbb[Desktop Entry] Name=Autorun Exec=/usr/bin/autorun -l --interval=1000 --cdplayer=/usr/bin/kscd Icon=cdrom_unmount.png Type=Application ./bb/.bash_logout0100644002342100007640000000003007616533024011640 0ustar bbbb# ~/.bash_logout clear ./bb/.bash_profile0100644002342100007640000000027707616533024012004 0ustar bbbb# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH unset USERNAME ./bb/.bashrc0100644002342100007640000000017407616533024010605 0ustar bbbb# .bashrc # User specific aliases and functions # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi ./bb/.emacs0100644002342100007640000000152607616533024010435 0ustar bbbb;; Red Hat Linux default .emacs initialization file ;; Are we running XEmacs or Emacs? (defvar running-xemacs (string-match "XEmacs\\|Lucid" emacs-version)) ;; Set up the keyboard so the delete key on both the regular keyboard ;; and the keypad delete the character under the cursor and to the right ;; under X, instead of the default, backspace behavior. (global-set-key [delete] 'delete-char) (global-set-key [kp-delete] 'delete-char) ;; Turn on font-lock mode for Emacs (cond ((not running-xemacs) (global-font-lock-mode t) )) ;; Visual feedback on selections (setq-default transient-mark-mode t) ;; Always end a file with a newline (setq require-final-newline t) ;; Stop at the end of the file, not just add lines (setq next-line-add-newlines nil) ;; Enable wheelmouse support by default (cond (window-system (mwheel-install) )) ./bb/.gtkrc0100644002342100007640000000016607616533024010456 0ustar bbbb# -- THEME AUTO-WRITTEN DO NOT EDIT include "/usr/share/themes/Raleigh/gtk/gtkrc" # -- THEME AUTO-WRITTEN DO NOT EDIT ./bb/.Xauthority0100600002342100007640000000036407637613644011526 0ustar bbbbthpc45.fnal.gov12MIT-MAGIC-COOKIE-1¿…S4ƒ¦ÄVÆ1lthpc45.fnal.gov13MIT-MAGIC-COOKIE-1!·Ñ“#µpÚô¬ƒ/ÅŠthpc45.fnal.gov11MIT-MAGIC-COOKIE-1•É™©viSÿˆ>Dsdthpc45.fnal.gov10MIT-MAGIC-COOKIE-1QX[2eã8¡-§Pd0./bb/.k5login0100644000000000000000000000001707616533051011652 0ustar rootrootormes@FNAL.GOV ./bb/.ssh/0040700002342100007640000000000007616533070010205 5ustar bbbb./bb/.ssh/known_hosts0100644002342100007640000000052407616533070012514 0ustar bbbbthpc41,131.225.54.219 1024 35 146280843705676602616730323049326372171841087329824880671632970501177184759342344237947683059977003125173253829002462539685613857029437692711305304143229716069360246651245923018760107947389492603415594513686305670640127213408471457853769244252663467288872889283706064910363980087091893256772928810946685976937 ./bb/bb19c/0040755002342100007640000000000007640412211010232 5ustar bbbb./bb/bb19c/etc/0040755002342100007640000000000007616533071011020 5ustar bbbb./bb/bb19c/etc/bb-cputab.DIST0100644002342100007640000000234407616533070013343 0ustar bbbb# bb-cputab: configuration file for processor usage checking # # Format: # # host: misc settings : threshold value for yellow : threshold value for red # localhost: misc settings : threshold value for yellow : threshold value for red # : misc settings : threshold value for yellow : threshold value for red # # host can be FQDN (fully qualified domain name) or # just a plain hostname but it is preferred that you # use a FQDN. # localhost: using this specifies that the threshold # specified on the lines are to be tested on all clients # # misc settings contains variables for CPU test # daysup=XXX Generates an alert after XXX days up # # If a host is not found, then the value of localhost will be # used and if that's not defined then the values of # CPUWARN and CPUPANIC in bbdef.sh will be used. # # The values defined are tested against the 5 minutes load average # They are specified without the decimal point # # bb-cpu check will try to match against the current host and # if nothing is found then it will use the value specified by # localhost then finally use the default values in etc/bbdef.sh localhost : : 150 : 300 www.bb4.com : : 100 : 200 www.bobo.com : : 200 : 400 fourwaycpu.comp.com: : 500 : 750 ./bb/bb19c/etc/bbchkcfg.sh0100755002342100007640000001377207616533070013116 0ustar bbbb#!/bin/sh # # bbchkcfg.sh: Check the bbdef.sh/bbinc.sh/bbsys.sh file for invalid entries # # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Check if the BB program paths are correct # # exec < /dev/null echo echo "If any comments are displayed, please fix the entries in your configuration" echo OLDIFS=$IFS IFS='=' set `grep "^BBHOME" ../runbb.sh 2>/dev/null` >/dev/null 2>&1 IFS=$OLDIFS if [ "$#" -ne 2 ] then echo "BBHOME is not set in runbb.sh" else bbhome=`eval "echo $2"` if [ ! -d "$bbhome" ] then echo "\"$bbhome\" is not a valid directory for BBHOME" fi fi BBHOME=$bbhome $BBHOME/etc/bbchkcmds.sh . ./bbdef.sh if [ ! -z "${LOCKPREFIX}" ] then OLDIFS=$IFS IFS='/' set ${LOCKPREFIX} IFS=$OLDIFS # Add root / for Solaris # Thanks to Laurinda Chamberlin directory=/${1} shift while [ "$#" -gt 1 ] do directory=${directory}/${1} shift done if [ ! -d "${directory}" ] then echo "LOCKPREFIX=$LOCKPREFIX is not a valid entry" fi fi if [ -f bbwarnsetup.cfg ] then TTYLINE=`grep "^ttyline:" bbwarnsetup.cfg` 2>/dev/null if [ "$?" -ne 0 ] then echo "bbwarnsetup.cfg: ttyline token was not found" echo " Numeric paging notification will be disabled" else set $TTYLINE >/dev/null 2>&1 if [ "$#" -eq 1 ] then echo "bbwarnsetup.cfg: ttyline token is not defined" echo " Numeric paging notification will not work" else shift # remove token from line TTYLINE=$* for ttyline in $TTYLINE do if [ ! -c "$ttyline" ] then echo "bbwarnsetup.cfg: $ttyline is an invalid entry in the ttyline token" echo " This is a valid error only if this host is a BBPAGER host" fi done fi fi PAGEDELAY=`grep "^pagedelay:" $BBHOME/etc/bbwarnsetup.cfg` 2>/dev/null if [ "$?" -eq 0 ] then set $PAGEDELAY >/dev/null 2>&1 if [ "$#" -gt 1 ] then shift # remove pagedelay token from line PAGEDELAY="$1" # Check if it's a valid parameter expr "$PAGEDELAY" + 0 >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo "bbwarnsetup.cfg: The value \"$PAGEDELAY\" is invalid for the pagedelay token" fi else echo "bbwarnsetup.cfg: No value is set for the pagedelay token: 15 minutes will be used" fi else echo "bbwarnsetup.cfg: The pagedelay token has not been defined: 15 minutes will be used" fi PAGELEVELS="" pagelevelsline=`grep "^pagelevels:" $BBHOME/etc/bbwarnsetup.cfg` 2>/dev/null if [ "$?" -eq 0 ] then set $pagelevelsline >/dev/null 2>&1 if [ "$#" -gt 1 ] then shift # remove pagelevels token from line param="$*" # Check if it's a valid parameter, remove bad values for color in $param do case $color in yellow | red | purple ) PAGELEVELS="$PAGELEVELS $color" ;; * ) echo "bbwarnsetup.cfg: The value \"$color\" is invalid for the pagelevels token" ;; esac done else echo "bbwarnsetup.cfg: No value is set for the pagelevels token: \"red purple\" will be used" fi else echo "bbwarnsetup.cfg: No pagelevels token has been defined: \"red purple\" will be used" fi PAGELEVELSMAIL="" pageslevelsmailline=`grep "^pagelevelsmail:" $BBHOME/etc/bbwarnsetup.cfg` 2>/dev/null if [ "$?" -eq 0 ] then set $pagelevelsmailline >/dev/null 2>&1 if [ "$#" -gt 1 ] then shift # remove pagelevelsmail token from line param="$*" # Check if it's a valid parameter, remove bad values for color in $param do case $color in yellow | red | purple ) PAGELEVELSMAIL="$PAGELEVELSMAIL $color" ;; * ) echo "bbwarnsetup.cfg: The value \"$color\" is invalid for the pagelevelsmail token" ;; esac done fi fi for color in $PAGELEVELSMAIL do echo "$PAGELEVELS" | grep $color >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo "bbwarnsetup.cfg: The value \"$color\" specified in the pagelevelsmail token" echo " is not defined in the pagelevels token, it will be ignored" fi done pagetypeline=`grep "^pagetype:" $BBHOME/etc/bbwarnsetup.cfg` 2>/dev/null if [ "$?" -eq 0 ] then set $pagetypeline >/dev/null 2>&1 if [ "$#" -gt 1 ] then shift # remove pagertype token from line param="$1" # Check if it's a valid parameter, # Set it if it's valid case $param in RCPT | GROUP | HOST | EVENT ) ;; * ) echo "bbwarnsetup.cfg: The pagetype token is invalid - \"$param"\" ;; esac else echo "bbwarnsetup.cfg: The pagetype token has no value assigned" echo " RCPT based notification will be used" fi else echo "bbwarnsetup.cfg: The pagetype token has not been defined" echo " RCPT based notification will be used" fi cfgdelimline=`grep "^cfgdelim:" $BBHOME/etc/bbwarnsetup.cfg` 2>/dev/null if [ "$?" -eq 0 ] then set $cfgdelimline >/dev/null 2>&1 if [ "$#" -gt 1 ] then shift # remove cfgdelim token from line case $1 in ',' | ':' | '/' | '*' | '.' ) echo "bbwarnsetup.cfg: The cfgdelim token is invalid: \"$1\"" ;; * ) ;; esac else echo "bbwarnsetup.cfg: The cfgdelim token has no value associated with it" # echo " \";\" will be used" fi else echo "bbwarnsetup.cfg: The cfgdelim token has not been defined" # echo " \";\" will be used" fi else echo "bbwarnsetup.cfg: This configuration file does not exist !" fi exit 0 ./bb/bb19c/etc/bbsys.sh0100644002342100007640000000540607616533070012477 0ustar bbbb#!/bin/sh # # bbsys.sh # # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # BIG BROTHER # WHERE THINGS WE NEED LIVE... # # # STANDARD COMMANDS... # NSLOOKUP="/usr/bin/nslookup" # SMM NEW IN 1.06C PING="/sbin/ping" # CONNECTIVITY TEST LS="/bin/ls" FIND="/usr/bin/find" TOUCH="/usr/bin/touch" CAT="/bin/cat" GREP="/usr/bin/grep" SORT="/usr/bin/sort" UNIQ="/usr/bin/uniq" DATE="/bin/date" TAIL="/usr/bin/tail" SED="/usr/bin/sed" UPTIME="/usr/bin/uptime" WC="/usr/bin/wc -l" WHO="/usr/bin/who" RM="/bin/rm" MAIL="/usr/bin/mail -s" # MAIL WITH SUBJECT FOR PAGING set $MAIL MAILC="$1" KERMIT="/usr/local/bin/kermit" # WHERE kermit LIVES ALPHAPGR="/usr/local/bin/qpage" # WHERE qpage LIVES DF="/bin/df" EXPR="/usr/bin/expr" HEAD="/usr/bin/head" CP="/bin/cp" MV="/bin/mv" ID="/usr/bin/id" LN="/bin/ln" DIG="/usr/bin/dig" TOP="" CUT="/usr/bin/cut" AWK=/usr/bin/awk # Set AWK & GREP paths EGREP=/usr/bin/egrep # Make sure your egrep accepts -vx args and # compound expressions (xxx.*|yyy.*|zzz.*disk) # I think by default Solaris doesn't, so use the # one in xpg4 - use bbsys.solaris as bbsys.local # # DISK INFORMATION # DFSORT="4" # % COLUMN - 1 DFUSE="^/dev" # PATTERN FOR LINES TO INCLUDE DFEXCLUDE="cdrom" # PATTERN FOR LINES TO EXCLUDE # # PING PARAMETERS # Added by Gunnar Helliesen to accomodate different # styles of ping commands. # PINGPAR1="-c 1" PINGPAR2="" # # TOP ARGUMENTS # TOPARGS="" # # LOCKFILE PREFIX # added by Jacob Lundqvist to handle queued paging # LOCKPREFIX="/var/lock/LCK.." # # Lockfile indicating on-going kermit page # PAGINGLOCK=${BBTMP}/paginglock # # Qpage specific info # Based on code by Mike Volk # QPAGE="/usr/local/bin/qpage" QPAGEUSER="bb" QPAGEARGS="-f bb" # # sendpage specific info # SENDPAGE="/usr/local/bin/sendpage" SENDPAGEARGS="" # # LOCAL SYSTEM REDEFINES, BY OS... # . ${BBHOME}/etc/bbsys.local # DFCMD must always appear after DF & SED, so must be after bbsys.local # in case they were redefined # Thanks to Mark.Deiss@acs-gsg.com, bdf output on HP-UX may appear on 2 lines # For bbsys.sh, the default is that DFCMD is the same as DF if [ "$DFCMD" = "" ] then DFCMD="$DF" fi # # Define WCC by itself, never define WCC in bbsys.local # set $WC WCC="$1" # WC without the arguments # # MAKE ALL OF THIS AVAILABLE... # export PING LS FIND TOUCH CAT GREP SORT UNIQ DATE TAIL SED UPTIME WC WCC WHO RM EXPR HEAD CP MV ID DIG LN TOP CUT export DFCMD AWK EGREP MAIL MAILC KERMIT ALPHAPGR export DFSORT DFUSE DFEXCLUDE PS NSLOOKUP export PINGPAR1 PINGPAR2 TOPARGS export LOCKPREFIX PAGINGLOCK export QPAGE QPAGEUSER QPAGEARGS export SENDPAGE SENDPAGEARGS ./bb/bb19c/etc/bbdef.sh.DIST0100644002342100007640000002473207616533070013164 0ustar bbbb#!/bin/sh # # bbdef.sh # # BIG BROTHER DEFINITIONS AREA # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # OS TYPE BBOSTYPE="&BBOSTYPE" export BBOSTYPE # BB USER BBUSER="&BBUSER" export BBUSER # # NEW FOR 1.04... DISPLAY FULLY QUALIFED DOMAIN NAMES? # i.e. aaa.bbb.com instead of just aaa # # FQDN="TRUE" # YES... FQDN="&BBFQDN" # # PREVENT BB TO RUN AS root ? # STOPROOT="&STOPROOT" export STOPROOT # # USE lynx IF YOU MUST TEST PASSWORD PROTECTED PAGES # OR https TESTING... # LIKE Leif Ericksen # Can't put in bbsys.local as cUrl can also be defined as LYNX... case $BBOSTYPE in caldera | debian | redhat ) LYNXCMD="/usr/bin/lynx" ;; * ) LYNXCMD="/usr/local/bin/lynx" ;; esac LYNX="$LYNXCMD -dump -head" # # OR USE curl, WHICH IS BETTER... # # LYNX="/usr/local/bin/curl -s -m 20 -I" # # INTERNET SERVICES YOU DON'T WANT TO GET PAGED ON # WHEN THEY'RE DOWN... ASSUMPTION IS YOU WANT TO KNOW # ABOUT EVERYTHING RIGHT NOW... (pop3/smtp/ssh/...) # NONETPAGE="" export NONETPAGE # # WHERE tmp FILES LIVE - THIS IS GOOD FOR SECURITY # THANKS TO Alan Cox (alan@cymru.net) # BBTMP="$BBHOME/tmp" export BBTMP # LOCATION OF PIDs FILE # BBPID="$BBTMP/BBPID" export BBPID # # LOCATION OF BBOUT FILE # BBOUT="$BBHOME/BBOUT" export BBOUT # # REPORT FILE WARNING LEVEL # WHEN REPORTS ARE RUN, AVAILABILITY < BBREPWARN = RED # AND >= BBREPWARN IS YELLOW. # THIS MUST BE AN INTEGER... # BBREPWARN="97" export BBREPWARN # # LOCAL CLIENT MONITORING CONFIGURATION FOR bb-local.sh # # WARNING AND PANIC LEVELS FOR LOCAL SYSTEM INFOMRAION # YOU CAN SET VALUES ON A SPECIFIC FILESYSTEM BY USING # THE etc/bb-dftab FILE # DFWARN=90 # (YELLOW) DISK % TO WARN DFPANIC=95 # (RED) DISK % TO PANIC export DFWARN DFPANIC # # CPU LEVELS ARE THE 5 MINUTE LOAD AVERAGE x 100 # CPUWARN=150 # (YELLOW) WARN AT LOAD AVG OF 1.5 CPUPANIC=300 # (RED) PANIC AT LOAD AVG OF 3 DISPREALLOADAVG="FALSE" # DISPLAY THE LOAD AVERAGE AS FOUND IN UPTIME # BB REMOVES THE '.' BY DEFAULT export CPUPANIC CPUWARN DISPREALLOADAVG # # PROCESS MONITORING # THESE VALUES ARE OVERRIDDEN BY THE etc/bb-proctab FILE # PROCS="bbrun" # (YELLOW) WARN IF NOT RUNNING PAGEPROC="cron" # (RED) PAGE IF NOT RUNNING export PROCS PAGEPROC # # MESSAGE FILE MONITORING (/var/adm/messages or similar) # # SMM: NEW IN BB 1.4 # CHKMSGLEN IS SET TO TRUE BY DEFAULT. IT WILL SCREAM IF IT FINDS # AN EMPTY MESSAGES FILE. BETTER SAFE THAN SORRY. # # NOTE: AS OF VERSION 1.8 YOU CAN USE etc/bb-msgstab TO # CONFIGURE THE VALUES OF PAGEMSG, MSGS AND IGNMSGS # NOTE THAT KEYWORDS ARE SPACE SEPERATED HERE AS OPPOSED # TO ';' SEPERTATED IN etc/bb-msgstab # CHKMSGLEN="TRUE" # MAKE SURE MSG FILE IS NON-ZERO LEN PAGEMSG="NOTICE" # (RED) PAGE IF WE SEE THIS MESSAGE MSGS="$PAGEMSG WARNING" # (YELLOW) MESSAGES TO WATCH FOR # NOTE: WORDS IN PAGEMSG *MUST ALSO* # BE DEFINED IN MSGS IGNMSGS="" # List of messages to ignore if string(s) matches line # delimit each message with ; MSGEXPIRE="30:60" # EXPIRE WARNINGS IN 30 MIN, PANICS IN 60 YELLOWMSGSLINES=10 # Return the XX most recent WARNING messages REDMSGSLINES=20 # Return the XX most recent PANIC messages OLDSTYLEBBMSGS="FALSE" # Don't expire messages found # just like the old days (they must be cleared by hand) export MSGS PAGEMSG IGNMSGS CHKMSGLEN MSGEXPIRE YELLOWMSGSLINES REDMSGSLINES OLDSTYLEBBMSGS # # PATH TO WEB SERVER DISPLAY # INSERT THE PATH TO YOUR BBDISPLAY WEB SERVER # THIS IS USED ONLY IF YOU USE HTMLized STATUS LOGS # BBWEB AND BBWEBHOST SHOULDN'T END WITH A "/" # BBWEB="&BBWEB" BBWEBHOST="&BBWEBHOST" export BBWEB BBWEBHOST # BBWEB SHOULDN'T BE JUST "/", BECAUSE A LOT OF USE IN THE # ${BBWEB}/... THAT WOULD EVALUATE TO //... WHICH CAN THROW OFF SOME WEB SERVERS # BBWEB SHOULD START WITH A "/" if [ "$BBWEB" != "" ] then case "$BBWEB" in "/" ) BBWEB="" ;; /* ) ;; * ) BBWEB="/${BBWEB}" # MAKE SURE THERE'S A LEADING SLASH ;; esac fi if [ "$BBWEB" = "" ] then BBWEBHTMLLOGS="${BBWEBHOST}/html" BBWEBHOSTURL="${BBWEBHOST}" else BBWEBHTMLLOGS="${BBWEBHOST}${BBWEB}/html" BBWEBHOSTURL="${BBWEBHOST}${BBWEB}" fi export BBWEBHTMLLOGS BBWEBHOSTURL # # If you need a different value than BBWEB in mkbbwml.sh # just change the value here BBWAP="${BBWEB}/wml" export BBWAP # # URL OF THE CGI SCRIPTS # SHOULDN'T END WITH A "/" # CGIBINURL="&CGIBINURL" # e.g. /cgi-bin export CGIBINURL # # URL OF reports # BBREPURL="${BBWEB}/rep" export BBREPURL # # Default colors to send notification messages on # PAGELEVELS="red purple" # Default red purple # purple is always sent by the # BBDISPLAY. Clients shouldn't # send purple export PAGELEVELS # Will be overidden in bbinc.sh # with values found in # etc/bbwarnsetup.cfg # # GENERATE WEB BASED HISTORY OR USE HISTORY LOG FILE # WEBHISTORY="TRUE" # TRUE will show a web display for history # otherwise just the text history log BBHIST_IGNOREBLUE=FALSE # Don't count down time from BLUE export WEBHISTORY BBHIST_IGNOREBLUE # # SAVE THE NEW STATUS LOG IF IT CHANGES THE COLOR ? # THEY ARE STORED IN $HISTLOGS (bbinc.sh) # SAVESTATUSLOG="TRUE" export SAVESTATUSLOG # # BB creates a static HTML page for every incoming status ? # Otherwise, the status is generated with $CGIBINURL/bb-hostsvc.sh dynamically # values: STATIC/DYNAMIC/TEXT # STATIC - create an HTMLized status log, reverts to TEXT if www/html directory # is missing or unwritable # DYNAMIC - create a HTMLized status log on the fly when the admin clicks on # the colored dot in bb.html/bb2.html # TEXT - A simple text page will be displayed # If you chose this option then you must make a link # from $BBLOGS to $BBHOME/www/logs # ln -s $BBLOGS $BBHOME/www/logs # *NOTE* This option is not recommended, it represents # a security risk. Only use if you are in # a secure network and not attached to the Internet # BBLOGSTATUS="STATIC" export BBLOGSTATUS # # HOW LONG BEFORE SENDING A PURPLE REPORT # PURPLEDELAY="30" # THIS MUST BE A POSITIVE VALUE !!! SINCE v1.4c export PURPLEDELAY if [ "$PURPLEDELAY" != "" -a "$PURPLEDELAY" -le 0 ] then echo "PURPLEDELAY ($PURPLEDELAY) should be a positive value !!!" fi PINGTESTS=4 # How many tries for regular ping test PINGSLEEPFCT=3 # Sleep factor, how long to sleep between each # ping test, it is incremented every test: 3,6,9,... PINGWARN=1 # How many failed pings does it require # such the test wll be considered yellow ? export PINGTESTS PINGSLEEPFCT PINGWARN # Do you want clear dots for noping directive & 0.0.0.0 hosts ? # Set this to anything but TRUE and no clear dots will be # generated for hosts=0.0.0.0 and hosts with the noping directive # You can leave this to TRUE and you can disable the clear button # individually (by host) using the noconn directive on the host's line NOPINGCLEAR="TRUE" export NOPINGCLEAR # Do you want to see your failed IP tests (done in bb-network.sh) # to be displayed with a red dot or a clear dot # *** ONLY *** if the connectivity to that host failed. IPTEST_2_CLEAR_ON_FAILED_CONN="TRUE" export IPTEST_2_CLEAR_ON_FAILED_CONN # Specify scripts to execute while running bb-hist.sh # Echo from them will be displayed on the generated web page BBHISTEXT="" export BBHISTEXT # Specify scripts to execute while running mkbb.sh/mkbb2.sh # Echo from them will be displayed on the generated web page BBMKBBEXT="" BBMKBB2EXT="eventlog.sh acklog.sh" export BBMKBBEXT BBMKBB2EXT # Do we keep historical info by host ? for all ? BBHOSTHISTLOG=TRUE BBALLHISTLOG=TRUE export BBHOSTHISTLOG BBALLHISTLOG # Should bb-network.sh run the conn test ? CONNTEST=TRUE export CONNTEST # # Can summaries set the background color # SUMMARY_SET_BKG=TRUE export SUMMARY_SET_BKG # # How many concurrent bb-network.sh to run ? # BBNETTHREADS=1 export BBNETTHREADS # # What NET services to check (don't put in dns/dig/http) # BBNETSVCS="smtp telnet ftp pop pop3 pop-3 ssh imap ssh1 ssh2 imap2 imap3 imap4 pop2 pop-2 nntp" export BBNETSVCS # # Generate WML output for WAP enabled phones ? # WML_OUTPUT=FALSE WMLMAXCHARS=1500 # What's the most characters can you WAP device accept ? export WML_OUTPUT WMLMAXCHARS # # Control the color of the cpu dot when a host reboots # Note that the maximum of minutes definable is 60, anything over will be reset to 60 # WARNMINSONREBOOT=60 WARNCOLORONREBOOT=yellow export WARNMINSONREBOOT WARNCOLORONREBOOT # # THIS SETS A VALUE FOR IF YOU THINK MACHINES SHOULD BE REBOOTED EVERY X DAYS # BBTOOMANYDAYSUP=9999 export BBTOOMANYDAYSUP # # TIMERS FOR bbnet # bbnet TRIES TO COMMUNICATE UP TO 3 TIMES USING # INCREMENTAL TIMERS (by default). YOU CAN CHANGE # THE TIMEROUT VALUES IF SOME OF YOUR CONNECTIONS TAKE # LONGER THAN THE CUMULATIVE TIMER VALUES (DEFAULT 20secs) # BBNETTIMER1=3 # WAIT UP TO 3 SECONDS BBNETTIMER2=5 # 5 SECONDS BBNETTIMER3=12 # 12 SECONDS export BBNETTIMER1 BBNETTIMER2 BBNETTIMER3 # # EXECUTE LOCAL SCRIPTS FROM HERE... # SCRIPTS SHOULD LIVE IN $BBHOME/ext DIRECTORY # BBEXT CONTAINS THE FILENAMES TO EXECUTE # SEPERATE THE SCRIPTS WITH A SPACE: BBEXT="ext1.sh ext2.sh" # IT IS PREFERABLE THAT YOU USE THE etc/bb-bbexttab FILE # INSTEAD OF THIS. IT IS KEPT FOR BACKWARD COMPATIBILITY # BBEXT="" BBDEFSLEEP=300 # HOW OFTEN TO RUN EXTERNAL SCRIPTS (IN SECONDS) export BBEXT BBDEFSLEEP # # Variables to determine if local test is to be run # and if so, does it send a msg anyway # DOCPU="TRUE" DOMSGS="TRUE" DOPROCS="TRUE" DODISK="TRUE" NOCPUCOLOR="clear" # Set to "" if you don't want a message sent NOMSGSCOLOR="clear" # anything else will send a message to BBDISPLAY NODISKCOLOR="clear" NOPROCSCOLOR="clear" export DOMSGS DOPROCS DODISK DOCPU export NOCPUCOLOR NOMSGSCOLOR NODISKCOLOR NOPROCSCOLOR # # What's the largest message size that can be sent out # It should be the same value as in src/bb.h # MAXLINE=8192 export MAXLINE # # configuration variables associated with the combo message # DOCOMBO=TRUE # Do we use the combo message ? MAXCOMBOMSGS=999 # Maximum status logs in a single combo message MAXCOMBOTTL=120 # combo workfile maximum Time to live, in seconds export DOCOMBO MAXCOMBOMSGS MAXCOMBOTTL . ${BBHOME}/etc/bbsys.sh # INCLUDE SYSTEM DEFINITIONS . ${BBHOME}/etc/bbinc.sh # INCLUDE BB DEFINITIONS export FQDN DF MSGFILE LYNX ./bb/bb19c/etc/security.DIST0100644002342100007640000000106407616533070013351 0ustar bbbb# THE SECUIRTY FILE DETERMINES WHO CAN CONNECT TO A BIG BROTHER SERVER. # NO SECURITY FILE MEANS ANYONE CAN CONNECT, OTHERWISE ONLY THE IP ADDRS # AND NETWORKS LISTED HERE CAN CONNECT. # # THE FILE MUST BE NAMED "security" AND BE IN THIS DIRECTORY. # # IP ADDRESSES ENDING IN 0 ALLOW THE ENTIRE SUBNET TO CONNECT # # SAMPLE DATA # ----------------- # Ends in .0 , assumes 255.255.255.0 204.101.110.0 # Explicit 255.255.255.0 204.19.116.0/255.255.255.0 # Accept a range of 205.78.126.0/205.76.127.255 205.78.126.0/255.255.254.0 # Single host entry 206.45.34.12 ./bb/bb19c/etc/bbinc.sh0100644002342100007640000002157407616533070012436 0ustar bbbb#!/bin/sh # # bbinc.sh # # Sean MacGuire # Version 1.9c # May 15th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # BBREL="1.9c" BBRELDATE="Wed, 15 May 2002 11:00:00 GMT" export BBREL BBRELDATE # -------------------------------------------------- # Big Brother - Pager codes and system definitions # # NO CHANGES SHOULD BE NEEDED HERE # -------------------------------------------------- # if [ "$BBHOME" = "" ] then echo "bbinc.sh: BBHOME not set !" exit 1 fi BB="${BBHOME}/bin/bb" # WHERE bb LIVES BBHOSTS="${BBHOME}/etc/bb-hosts" # BIG BROTHER HOSTS FILE BBDFTAB="${BBHOME}/etc/bb-dftab" # LEVELS BY DISK PARTITION BBCPUTAB="${BBHOME}/etc/bb-cputab" # LEVELS BY DISK PARTITION BBPROCTAB="${BBHOME}/etc/bb-proctab" # LEVELS BY DISK PARTITION BBEXTTAB="${BBHOME}/etc/bb-bbexttab" # EXTERNAL SCRIPTS TO RUN LOCALLY BBMSGSTAB="${BBHOME}/etc/bb-msgstab" # MSGS KEYWORDS/PHRASES TO CHECK BBREP="${BBHOME}/www/rep" # WHERE GENERATED REPORTS LIVE BBNOTES="${BBHOME}/www/notes" # WHERE THE SYSTEM NOTES LIVE # OLDIFS=$IFS IFS="/" set $BBHOME IFS=$OLDIFS # Usually the BB saved logs lives in the directory on top the BBHOME BBTOP="" while [ "$#" -gt 1 ] do # Don't accept empty args if [ "$1" != "" ] then BBTOP="$BBTOP/$1" fi shift done BBVAR=$BBTOP/bbvar # If you want a different BBVAR just modify the next line and uncomment # BBVAR=/some/directory/structure BBLOGS="${BBVAR}/logs" # WHERE THE LOG FILES LIVE BBHISTLOGS="${BBVAR}/histlogs" # WHERE THE HISTLOG FILES LIVE BBHIST="${BBVAR}/hist" # WHERE THE HIST FILES LIVE BBDATA="${BBVAR}/data" # WHERE THE DATA FILES LIVE (data message type) BBACKS="${BBVAR}/acks" # WHERE THE ACKS/NOTIF LOGS LIVE BBDISABLED="${BBVAR}/disabled" # WHERE THE DISABLE TAG FILES LIVE export BB BBHOSTS BBDFTAB BBCPUTAB BBPROCTAB BBEXTTAB BBMSGSTAB BBNOTES export BBREP BBTOP BBVAR BBLOGS BBHISTLOGS BBHIST BBDATA BBACKS BBDISABLED NETERR="7" # NETWORK ERROR 7 + PORT NUMBER # KEEP FOR BACKWARD COMPATABILITY export NETERR # -------------------------------------------------- # SMM NEW IN 1.3 # TITLES FOR DISPLAY ELEMENTS USED BY mkbb.sh # THIS IS TO FACILITATE CHANGES AND TRANSLATION # -------------------------------------------------- MKBBLOCAL="Pages Hosted Locally" MKBBSUBLOCAL="Subpages Hosted Locally" MKBBREMOTE="Remote Status Display" export MKBBLOCAL MKBBREMOTE MKBBSUBLOCAL # YOU CAN CHANGE FONT ATTRIBUTES FOR ROWS AND COLUMNS HERE # THIS IS USED AS TITLES FOR THE TABLES MKBBTITLE="COLOR=ivory SIZE=+1" # THIS IS USED FOR THE MACHINE NAMES MKBBROWFONT="SIZE=+1 COLOR=\"#FFFFCC\" FACE=\"Tahoma, Arial, Helvetica\"" # THIS IS USED FOR COLUMN HEADINGS ACROSS THE TOP MKBBCOLFONT="COLOR=teal SIZE=-1" # THIS IS USED FOR THE ACK MESSAGE AT THE BOOTOM OF A STATUS MKBBACKFONT="COLOR=silver SIZE=-1" export MKBBROWFONT MKBBCOLFONT MKBBTITLE MKBBACKFONT MKBBMANAGE="Managed Instances" export MKBBMANAGE # 2.0 DAYS="days" HOURS="hours" MINS="minutes" STATUNCHMSG="Status unchanged in" RECVFROMMSG="Status message received from" export RECVFROMMSG STATUNCHMSG DAYS HOURS MINS MKBBEMPTYPAGE="There are no hosts defined on this page" export MKBBEMPTYPAGE # You can change the colored dots HEIGHT and WIDTH here DOTHEIGHT=16 DOTWIDTH=16 export DOTHEIGHT DOTWIDTH # You can change the entire look by changing the default gifs BBSKIN="${BBWEB}/gifs"; export BBSKIN #BBSKIN="${BBWEB}/gifs-bb13"; export BBSKIN # OLD 1.3 STYLE GIFS # # FIGURE OUT THE LOCAL MACHINE NAME # USE FULLY QUALIFIED MACHINE NAMES? # DOT -> COMMA -> DOT FOR WEB DISPLAY # if [ -f "$BBHOME/etc/bbaliasname" ]; then MACHINE=`$CAT $BBHOME/etc/bbaliasname` else MACHINE=`uname -n` fi # New code 1.09 - RAC # # Extract the host part if not FQDN if test "$FQDN" != "TRUE" then set `echo $MACHINE | $SED "s/\./ /"` >/dev/null 2>&1 MACHINE=$1 fi set "" # force a set or it will keep the old $* if it failed # Do we match: "255.255.255.255 ${MACHINE}" ? set `$GREP -i "^[0-9][0-9\.]*[ ][ ]*${MACHINE}$" $BBHOSTS` >/dev/null 2>&1 if [ "$#" -lt 2 -o "$2" = "" ] then # Do we match: "255.255.255.255 ${MACHINE} # blah blah blah" ? # Do we match: "255.255.255.255 ${MACHINE}.domain.com # blah blah blah" ? set `$GREP -i "^[0-9][0-9\.]*[ ][ ]*${MACHINE}[\. ].*$" $BBHOSTS` >/dev/null 2>&1 fi if [ "$#" -lt 2 -o "$2" = "" ] then echo "This host <${MACHINE}> was not found in the etc/bb-hosts file" echo "Please use the same name from 'uname -n'" exit 1 fi # End of new code 1.09 - RAC # SMM 1.09 - OFFLOAD CODE FROM RUNBB.SH # CHECK IF THIS MACHINE IS A BBDISPLAY # echo "TESTING RESULTS FROM $*" echo "$*" | $GREP BBDISPLAY > /dev/null 2>&1 if test "$?" = "0" then BBDISPLAY="TRUE" BBSERVER="TRUE" fi echo "$*" | $GREP BBPAGER > /dev/null 2>&1 if test "$?" = "0" then BBPAGER="TRUE" BBSERVER="TRUE" fi echo "$*" | $GREP BBNET > /dev/null 2>&1 if test "$?" = "0" then BBNET="TRUE" fi relayline=`echo "$*" | $GREP "BBRELAY:" 2>/dev/null` export BBDISPLAY BBPAGER BBNET MACHINE=$2 # GET FQDN NAME FROM etc/bb-hosts MACHIP=`echo $1 | $SED "s/\.//g"` # IP ADDRESS FOR PAGER DISPLAY # # MACHINEADDR REPRESENTS THE IP or THE NAME OF THE LOCAL HOST # USE NAME IF IP = 0.0.0.0 # if [ "$1" = "0.0.0.0" ] then MACHINEADDR="$2" else MACHINEADDR="$1" fi export MACHINEADDR if test "$FQDN" = "TRUE" then MACHINEDOTS=$MACHINE MACHINE=`echo $MACHINE | $SED "s/\./,/g"` else set `echo $MACHINE | $SED "s/\./ /"` MACHINE=$1 MACHINEDOTS=$MACHINE fi export MACHINE MACHIP MACHINEDOTS # # WHERE THE BIG BROTHER SERVERS LIVE # LOOK IN bb-hosts FOR DISPLAY AND PAGER HOSTS # SMM ADD SUPPORT FOR MULTIPLE BBDISPLAYS # bbline=`$GREP BBDISPLAY $BBHOSTS | $GREP "^[0-9]" | $GREP -v "^\#" | \ $AWK '{print $1 " " $2}'` 2>/dev/null if [ -z "$bbline" ] then echo "*** FATAL ERROR: BBDISPLAY not set in etc/bb-hosts!" exit 2 fi set $bbline BBDISPLAYS="" while [ "$#" -ne 0 ] do if test "$1" = "0.0.0.0" # SMM 1.10 DDNS SUPPORT then BBDISPLAYS="${BBDISPLAYS} $2" # USE THE NAME else BBDISPLAYS="${BBDISPLAYS} $1" # USE THE IP ADDR fi shift;shift # Advance to next BBDISPLAY done BBDISPLAYS=`echo $BBDISPLAYS` set $BBDISPLAYS if test "$#" -eq 1 then BBDISP="$1" # ORIGINAL FLAVOR... BBDISPLAYS="" else BBDISP="0.0.0.0" # DUMMY - DON'T USE... fi export BBDISP export BBDISPLAYS # bb EXECUTABLE USE THIS INSTEAD IF BBDISP = 0.0.0.0 # SMM ADD SUPPORT FOR MULTIPLE BBPAGERS bbline=`$GREP BBPAGER $BBHOSTS | $GREP "^[0-9]" | $GREP -v "^\#" | \ $AWK '{print $1 " " $2}'` 2>/dev/null if [ -z "$bbline" ] then # DEFAULT TO THE SAME THING AS BBDISPLAY BBPAGE=$BBDISP BBPAGERS=$BBDISPLAYS else set $bbline BBPAGERS="" while [ "$#" -ne 0 ] do if test "$1" = "0.0.0.0" # SMM 1.10 DDNS SUPPORT then BBPAGERS="${BBPAGERS} $2" # USE THE NAME else BBPAGERS="${BBPAGERS} $1" # USE THE IP ADDR fi shift;shift # Advance to next BBPAGER done BBPAGERS=`echo $BBPAGERS` set $BBPAGERS if test "$#" -eq 1 then BBPAGE="$1" # ORIGINAL FLAVOR... BBPAGERS="" else BBPAGE="0.0.0.0" # DUMMY - DON'T USE... fi fi unset bbline export BBPAGE export BBPAGERS # bb EXECUTABLE USE THIS INSTEAD IF BBPAGE = 0.0.0.0 # # Determine if any relay host has been defined # BBRELAYS="" for relay in $relayline do case $relay in BBRELAY:* ) OLDIFS=$IFS IFS=':' set $relay IFS=$OLDIFS shift # Remove BBRELAY from arg list if [ "$#" -eq 1 -a "$1" != "0.0.0.0" -a "$1" != "" ] then if [ "$BBRELAYS" = "" ] then BBRELAYS="$1" else echo "$BBRELAYS" | $GREP "$1" >/dev/null 2>&1 if [ "$?" -ne 0 ] then BBRELAYS="$BBRELAYS $1" fi fi fi ;; * ) ;; esac done if [ "$BBRELAYS" != "" ] then BBSERVER="TRUE" fi export BBRELAYS unset relayline export BBSERVER # # GET PAGELEVELS FROM etc/bbwarnsetup.cfg. IT CONTAINS THE COLOR # ON WHICH A NOTIFICATION SHOULD BE SENT # IF YOU CHANGE THE VALUE pagelevels IN etc/bbwarnsetup.cfg YOU # MUST RESTART BB. MAKE SURE THE pagelevels VALUE IS # IDENTICAL ON ALL CLIENTS # Default colors are in bbdef.sh pagelevelsline=`$GREP "^pagelevels:" $BBHOME/etc/bbwarnsetup.cfg` 2>/dev/null if [ "$?" -eq 0 ] then set $pagelevelsline >/dev/null 2>&1 if [ "$#" -gt 1 ] then shift # remove pagelevels token from line param="$*" # Check if it's a valid parameter, remove bad values PAGELEVELS="" for color in $param do case $color in yellow | red | purple ) PAGELEVELS="$PAGELEVELS $color" ;; * ) ;; esac done unset param fi fi export PAGELEVELS unset pagelevelsline unset OLDIFS #echo "=====> 1) $MACHINE 2) $MACHIP 3) $BBDISP 4) $BBPAGE 5) $BBDISPLAYS 6) $BBPAGERS" ./bb/bb19c/etc/sms.scr0100644002342100007640000000744107616533070012335 0ustar bbbb# # Kermit script that sends SMS messages through a Nokia SMSC server # using the CIMD protocoll # # By: Jacob Lundqvist jaclu@ibk.se # 1997-01-11 # # Tested with GSM provider: Europolitan (Sweden), using faked checksum # # Terms # ----- # SMS Short Message Service # SMSC Short Message Service Center # CIMD Computer Interface to Message Distribution # # # Modem --- SMSC --- GSM/PCN phone (with SMS capacity) # DEFINE \%a \&@[2] # modem line DEFINE \%b 123456 # number to your SMSC server DEFINE \%c cimd3 # login to access CIMD, to select kind of service # cimd3 = fake all checksums DEFINE \%d user # CIMD account, identifying application for Provider DEFINE \%e paswword # CIMD password DEFINE \%f \{9}11EE\10 # End of command sequence 11=Faked CRC EE=Stop # # other variables # # \%i loop # \%m message #====================================================== # # Macro deffinitions # # # Pressentation # define ABOUT_PGM \ echo, \ echo Kermit SMS ver 1.2 by Jacob Lundqvist - jaclu@ibk.se, \ echo # # Terminate script # define TERMINATE hangup,quit # # Help # define SHOW_HELP \ ABOUT_PGM, \ echo Syntax: kermit sms.scr line file number [number [number [...]]], \ echo (multiple numbers can be specified),\ echo only first line of file is used - file MUST be terminated with LF!!!, \ echo, \ echo Example: kermit sms.scr /dev/cua0 /tmp/smsc.msg 4670890510 4670812345, \ echo, TERMINATE # # No message # define NO_MSG echo ERROR: no message in file \%1, set exit status 3, TERMINATE # # To few Arguments # define TO_FEW_ARGS echo ERROR: to few arguments (try ?), \ set exit status 3, TERMINATE # # No such device # define NO_DEV echo ERROR: no such device: \%1, set exit status 1, TERMINATE # # Check if device exists # define CHECK_DEV if < \Ffiles(\%1) 1 NO_DEV \%1 # # No Connection # define NO_CONNECT echo ERROR: No Connection, set exit status 1, TERMINATE # # If No Ack is received, do a output, so this is noted in logfile, # hopefully remote end wont care, since it's gone anyhow # define NO_ACK echo ERROR: No ACK, set exit status 2, TERMINATE # # _ is not valid, remove # Actually it is a escape character, but we don't handle it for now... # define REMOVE_USCORE define \%i \Freplace(\%n,_,\32), \ assign \%n \%i, \ # # Collect message into variable, max 160 chars!! # define GET_MSG open read \&@[3], \ read \%n, \ REMOVE_USCORE, \ define \%m \Fsubstr(\%n,1,160), \ echo message is[\Flength(\%m)]: \%m, \ if < \Flength(\%m) 1 NO_MSG \&@[3], \ close read # # CIMD Login As User # define CIMD_LOGIN output AA01\{9}\%d\{9}\%e\%f, input 20 AAAck, \ if failure NO_ACK # # CIMD Submit A New Message # since remote end echoes output, we must catch our own Ack # # define CIMD_SUBMIT output AA03\{9}\%1\{9}\%m\%f, input 60 AAAck, \ if failure NO_ACK, \ input 10 11EE, sleep 1, output AAAck\%f, input 20 11EE # # CIMD Logout Of Session # define CIMD_LOGOUT output AA02\%f, input 10 AAAck if failure NO_ACK #======================================================== # # Main # # # Want help? # if equal \&@[2] ? SHOW_HELP ABOUT_PGM # # Check params # if < \v(args) 5 TO_FEW_ARGS CHECK_DEV \%a # # Check message # GET_MSG # # Set line params # set modem hayes # plain normal modem set line \&@[2] set flow xon/xoff # My SMSC server demands XON/XOFF set speed 9600 # # Debugging # #log session session.log new # # Connect to host # hangup # Make sure line is available dial \%b if failure NO_CONNECT sleep 5 # # Start CIMD application # output \%c\10 sleep 1 # # CIMD session starts # CIMD_LOGIN # # Send to all recipients # assign \%j \v(args) decrement \%j for \%i 4 \%j 1 { CIMD_SUBMIT \&@[\%i] } CIMD_LOGOUT # # Terminate kermit # set exit status 0 TERMINATE ./bb/bb19c/etc/numeric.scr0100644002342100007640000000353307616533070013173 0ustar bbbb# # Kermit script that sends a numeric message to a pager # # By: Jacob Lundqvist jaclu@ibk.se # 1997-01-10 # DEFINE \%a \&@[2] # modem line #====================================================== # # Macro deffinitions # # # Terminate script # define TERMINATE hangup,quit # # Pressentation # define ABOUT_PGM \ echo, \ echo Kermit numeric-paging ver 1.0 by Jacob Lundqvist - jaclu@ibk.se, \ echo # # Help # define SHOW_HELP \ ABOUT_PGM, \ echo First param should be a phonenumber, second a numeric message, \ echo, \ echo Example: kermit numeric.scr 4670890510 200192168510, \ echo, TERMINATE # # Terminate script # define TERMINATE hangup,quit # # Help # define SHOW_HELP \ ABOUT_PGM, \ echo syntax: kermit numeric.scr line number message, \ echo, \ echo Example: kermit numeric.scr /dev/cua0 46890510 200192168510, \ echo, set exit status 0, TERMINATE # # Wrong number of Arguments # define WRONG_NO_ARGS echo ERROR: wrong number of arguments (try ?), \ set exit status 3, TERMINATE # # No such device # define NO_DEV echo ERROR: no such device: \%1, set exit status 1, TERMINATE # # Check if device exists # define CHECK_DEV if < \Ffiles(\%1) 1 NO_DEV \%1 #======================================================== # # Main # # # Want help? # if equal \&@[2] ? SHOW_HELP ABOUT_PGM # # Check params # if < \v(args) 5 WRONG_NO_ARGS if > \v(args) 5 WRONG_NO_ARGS CHECK_DEV \%a # # Set line params # set modem hayes set line \%a set flow xon/xoff set speed 1200 set dial timeout 45 # # Debugging # #log session session.log new # # Send Message # hangup # Make sure line is available # # Since not given any "CONNECT" we cant do much to check for success. # if you loose messages, try adding some more ,,,,, (pause chars) # dial \&@[3],,,,,,,\&@[4] # # Exit kermit # set exit status 0 TERMINATE ./bb/bb19c/etc/numeric-k6.scr0100644002342100007640000000315507616533070013511 0ustar bbbb; ; THIS FILE SHOULD BE USE WITH C-KERMIT 6.0 AND UP ONLY ; ; Kermit script that sends a numeric message to a pager ; ; Based on the script by: ; Jacob Lundqvist jaclu@ibk.se, 1997-01-10 ; ; By: Mathieu Patenaude 1998-08-21 ; ; - Modified for C-Kermit 6.0 ; def \%a \&@[2] ; modem tty line def \%b \&@[3] ; Telephone number ex 580-4321 def \%c \&@[4] ; The numeric message ;====================================================== ; ; Macro deffinitions ; ;====================================================== ; No such device ; define NO_DEV { echo ERROR: no such device: \%1 set exit status 1 hangup quit } ; Check if device exists ; define CHECK_DEV { if < \Ffiles(\%1) 1 NO_DEV \%1 } ; Define the serial line and the modem ; define SET_COMM { set line \%a ; The ttyX line to use (serial line) set speed 1200 ; The bbs output ATZ\13 ; Reset and make shure the modem is responding input 5 OK ; Should receive OK from modem xif fail { echo echo No communication with the modem quit } else { echo echo Modem is responding } } ; Call the pager ; define SEND_MSG { output {ATD\%b,,,,\%c#;\13} input 60 OK xif fail { echo echo Error Dialing the modem echo Error Sendig the numeric message output {ATH0\13} output {ATZ\13} quit } else { echo echo Numeric Message: \%c sent output {ATH0\13} output {ATZ\13} } } ;====================================================== ; ; Main ; ;====================================================== set exit warning off CHECK_DEV \%a ; Set modem and line params ; SET_COMM ; Send Message ; SEND_MSG ; Exit kermit ; set exit status 0 quit ./bb/bb19c/etc/bb-proctab.DIST0100644002342100007640000000343507616533070013521 0ustar bbbb# bb-proctab: configuration file for process checking # # Format: # # host:proc list for yellow : proc list for red # localhost:proc list for yellow : proc list for red # # host can be FQDN (fully qualified domain name) or # just a plain hostname but it is preferred that you # use a FQDN. # localhost: using this specifies that the processes # specified on the line are to be tested on all clients # # To make matching more precise, try adding a part of the # path if possible (/usr/sbin/httpd) # # The ! can precede a process to specify that is must not # be running: i.e. !httpd # httpd;0 is equivalent to !httpd # # You can also specify a process with it's arguments using the # "" construct: i.e. "httpd -DSSL" # # The same host can be specified on multiple lines to aid readability # # You can add directives to specify how many processes # must be running. The directive is specified by delimiting # it with the process name with a ';'. Valid directives are: # httpd;999 - Exactly 999 instances of httpd must be running # httpd;=999 - same as httpd;999 # httpd;<=999 - Less or equal to 999 instances of httpd must be running # httpd;>=999 - More or equal to 999 instances of httpd must be running # httpd;<999 - Less than 999 instances of httpd must be running # httpd;>999 - More than 999 instances of httpd must be running # # Note: If you use this construct with a multi word entry: # i.e. ""httpd -DSSL;=999" # Make sure the ;=999 construct is withint the "" # # If you put a process with no directives then it is # test condition is that at least 1 process must be running # It keeps backward compatibility : sshd : localhost: sendmail;<=2 bbrun !xntpdd : httpd;>=16 localhost : :snmpd "sleep 30;<6" www.bobo.com : inetd : bbd www: inetdd : bbdd ./bb/bb19c/etc/bbwarnsetup.cfg0100644002342100007640000002065607616533070014042 0ustar bbbb # bbwarnsetup.cfg # # BIG BROTHER Notification setup configuration file # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # IMPORTANT *************** # # Tokens are defined on a single line in this format # # token: parameter(s) # # The ':' must always follow the token name # # IMPORTANT *************** # # # Scope: This means on which host(s) the variable is used # # Most of them are used on the BBPAGER host (obviously) # Others apply also on BBDISPLAY and all BB clients. # because they affect the behavior of the 'bbd' # and 'bb' programs # # Restart: Does BB needs to be restarted for this variable # to be reset # # # The "bbwarn" token specify if you want to use the notification feature or not # Set to TRUE if you want to enable the notification feature # anything else will disable it (FALSE,NO,NIET,...) # Also, if you decide to install this host as a failover BBPAGER # then set bbwarn: to FAILOVER (actually anything by TRUE) # At least this will remind you of that fact. see ext/failover for more info # # Scope: BBPAGER # Reset: No bbwarn: TRUE # # Each message that is sent has a numeric value associated with it. # This value is in the XXXYYYYYYYYYYYY format: # # XXX: service code associated with the column name as # defined in bbinc.sh by "svcerrlist" token # YYYYYYYYYYYY: IP address of host in error, the IP address is # expanded to 12digits to remove any ambiguity # # services are defined by pairs: # # service:code # # NOTE: Don't define any codes in the 7XX ranges because codes starting # with 7 defines TCP errors and is followed with the IP code # e.g. 725 - SMTP error # # Scope: BBPAGER # Reset: No svcerrlist: disk:100 cpu:200 procs:300 msgs:400 conn:500 http:600 dns:800 ERR:999 # # Define the codes sent out in SNMP traps # # Recoveries will send the code+1 (so always use even numbers here) # # Scope: BBPAGER # Reset: No trapcodes: disk:2 cpu:4 procs:6 msgs:8 conn:10 http:12 dns:14 dig:14 ftp:16 smtp:18 fping:20 imap:22 mq:24 mrtg:26 nntp:28 pop3:30 pop-3:30 ssh:32 swap:34 telnet:36 ERR:0 # # What is the Enterprise object ID for BB4 Technologies # # Scope: BBPAGER # Reset: No entoid: .1.3.6.1.4.1.7058 # # Where is the location of the SNMP trap sending program # # Scope: BBPAGER # Reset: No snmptrap_pgm: /usr/bin/snmptrap # # What type of SNMP distribution are you using # Valid values are: CMU # UCD # SOLARIS (located in /usr/sbin/snmp_trapsend I believe) # HPOV (not supported yet) # # Scope: BBPAGER # Reset: No snmptrap_type: CMU # # The "ignforall" token is used to discard all hosts.service that # matches the egrep regexp. # N.B. You build your own egrep regexp # # ignforall: .*.cpu|.*.msgs|host11.* # # Scope: BBPAGER # Reset: No ignforall: # # "pagehelpcode" is the numceric code associated with the # phone # of the user when requesting for help . 911 is the default but I've # requests for customizable code so here it is. # # Scope: BBPAGER # Reset: No pagehelpcode: 911 # # "ttyline" token list the device files that KERMIT uses # The 1st available device will be used # # ttyline: /dev/cuaa0 /dev/cuaa1 # # Scope: BBPAGER # Reset: No ttyline: /dev/cuaa0 # # The dialing "prefix" and "suffix" are defined in these tokens # # Note: for SMS paging please read the doc/README.SMS, also the # prefix defined here does not apply to SMS ... # # Scope: BBPAGER # Reset: No prefix: T9 suffix: # # The "pagedelay" token is used to specify how many minutes between pages # Set it really high to only be paged once... # "pagedelay" can be overridden in the 'bbwarnrules.cfg' file # # Scope: BBPAGER # Reset: No pagedelay: 15 # # The "pagelevels" token specifies on which colors should the 'bb' program # send notification messages to the BBPAGER server. # # e.g. pagelevels: red purple # # If the event color is either red or purple then send a page message # to BBPAGER server # # NOTE ******** This has to be set on all clients as it is used by # the 'bb' and 'bbd' program # # Scope: BBPAGER/BBDISPLAY/all BB clients # Reset: Yes pagelevels: red purple # # The "pagelevelsmail" token indicates that on that color level only # the email recipients get a notification (and that's only if that # particular event has a matching e-mail recipient in etc/bbwarnrules.cfg) # The color is active only if it is also defined in the "pagelevels" token # # **NOTE** Only mail recipient will receive the notifications, any recipients # of the form: ext-XXX-rcpt@somewhere, ep-rcpt@somewhere, ... # are NOT considered by BB to be e-mail recipient. Only rcpt@somewhere # will be considered # # e.g. pagelevelsmail: yellow purple # # If the event is of yellow or purple level, only an email notification # will be sent if the color is also defined in the "pagelevels" token. # # Scope: BBPAGER # Reset: No pagelevelsmail: yellow # # The "pagerecovered" token is set to TRUE when you want to be notify # when the state of the problem has come back to normal # (that is, it is not in the pagelevels colors) # This token is only valid when pagetype=EVENT, any other # pagetype would require lots of color status saving and I ain't # ready for it yet. # # e.g. pagerecovered: TRUE # # Scope: BBPAGER # Reset: No pagerecovered: FALSE # # The "pagetype" token describes how the delay between should be handled. # # RCPT - applicable on the recipient # The recipient (mail/page/sms) won't be # notified until the next "pagedelay" # regardless of event (host.service) error # # EVENT - applicable on the host.service combination (www.bb4.com|disk) # The recipient won't be notified on a specific # event (host.service) error until "pagedelay" # has expired. This will generate the most notifications # # HOST - applicable on the host that is in error # The recipient won't be notified on any # event error from the same HOST until "pagedelay" has expired. # # GROUP - applicable on the display GROUP # The recipient won't be notified on a specific # event within a bb-hosts group until "pagedelay" # has expired. Hosts that do not belong to any # group (defined before the first group/group-compress # directive in bb-hosts) are defined belonging to # the global-grp group # # NOTE: As soon as an error event is resolved (returned to a color not # defined in "pagelevels" then the "pagedelay" is expired # # Scope: BBPAGER # Reset: No pagetype: RCPT # # "pagemaster" token holds email recipients to be sent a warning message # if a notification (physical numeric page) can't be sent out # # If none are specified then no warning mail will be sent # # Scope: BBPAGER # Reset: No pagemaster: root@localhost # # "pageaddhtmlpath" token defines if the email notification will # have the path to the HTML status page # The path is defined in the BBWEBHTMLLOGS variable in bbdef.sh # # default is TRUE # # Scope: BBPAGER # Reset: No pageaddhtmlpath: TRUE # # The "cfgdelim" token specifies the delimiter to use in the rule lines # of the bbwarnrules.cfg file # # i.e. cfgdelim: ; # rule line *;;*;;*;*; 9,1,9999999999 # # ***** NOTE ***** # # Don't use '*' ':' '/' ',' '.' '!' for "cfgdelim" as they will cause the # notification feature to fail. Don't use characters that you # may use in a regular expression in the # hosts/exhosts/services/exservices columns of a rule line # # Scope: BBPAGER # Reset: No cfgdelim: ; # # The "briefrcpt" token specifies which recipients should receive # brief notification messages # # i.e. briefrcpt: robert@localhost 9999999 # # Scope: BBPAGER # Reset: No briefrcpt: # # The "hg-groupname" token specifies specifies that the hosts listed can # be referred to "hg-groupname" in the hosts field in the bbwarnrules.cfg # config file. You can define as many hostgroups that you need # # i.e. hg-routers: rt1 rt2 rt3 router* # in rules: hg-routers host1*;;*;;*;*;root@localhost # # it is the equivalent of # rt1 rt2 rt3 router* host1*;;*;;*;*;root@localhost # # Scope: BBPAGER # Reset: No # # The "pg-groupname" token specifies specifies that the recipients listed can # be referred to "pg-groupname" in the recipients field in the bbwarnrules.cfg # config file. You can define as many pagegroups that you need # # i.e. pg-routeradmins: joe@localhost joey@localhost joanne@localhost # in rules: *;;*;;*;*;pg-routeradmins root@localhost # # it is the equivalen of # *;;*;;*;*;joe@localhost joey@localhost joanne@localhost root@localhost # # Scope: BBPAGER # Reset: No ./bb/bb19c/etc/bb-hosts0100644002342100007640000000413707637613644012476 0ustar bbbb# # THE BIG BROTHER HOSTS FILE # # THIS FILE SHOULD BE THE SAME ON ALL SYSTEMS RUNNING BIG BROTHER # CHANGE THIS FILE TO REFLECT YOUR ENVIRONMENT! # group
My System

131.225.54.92 hellion.fnal.gov # BBDISPLAY BBPAGER BBNET page astro Astro Cluster (wh3w) 131.225.55.210 aida.fnal.gov 131.225.55.209 attila.fnal.gov 131.225.55.99 canis.fnal.gov 131.225.55.101 carina.fnal.gov 131.225.55.102 cetus.fnal.gov 131.225.55.22 falstaff.fnal.gov 131.225.53.158 giorno.fnal.gov 131.225.55.208 nabucco.fnal.gov 131.225.53.141 otello.fnal.gov 131.225.55.95 rigoletto.fnal.gov 131.225.54.75 simon.fnal.gov 131.225.55.21 traviata.fnal.gov 131.225.55.211 trovatore.fnal.gov page theory Theory Cluster (wh3e) 131.225.55.79 thpc01.fnal.gov 131.225.55.9 thpc02.fnal.gov 131.225.55.75 thpc03.fnal.gov 131.225.55.76 thpc04.fnal.gov 131.225.55.77 thpc05.fnal.gov 131.225.55.83 thpc07.fnal.gov 131.225.55.84 thpc08.fnal.gov 131.225.55.89 thpc09.fnal.gov 131.225.55.90 thpc10.fnal.gov 131.225.55.91 thpc11.fnal.gov 131.225.55.92 thpc12.fnal.gov 131.225.55.93 thpc13.fnal.gov 131.225.55.97 thpc15.fnal.gov 131.225.55.98 thpc16.fnal.gov 131.225.55.109 thpc17.fnal.gov 131.225.55.110 thpc18.fnal.gov 131.225.55.111 thpc19.fnal.gov 131.225.55.112 thpc20.fnal.gov 131.225.55.114 thpc21.fnal.gov 131.225.55.142 thpc22.fnal.gov 131.225.55.143 thpc23.fnal.gov 131.225.55.144 thpc24.fnal.gov 131.225.55.145 thpc25.fnal.gov 131.225.52.157 thpc26.fnal.gov 131.225.52.252 thpc27.fnal.gov 131.225.53.39 thpc28.fnal.gov 131.225.54.216 thpc40.fnal.gov 131.225.54.219 thpc41.fnal.gov 131.225.54.223 thpc42.fnal.gov 131.225.54.229 thpc43.fnal.gov 131.225.52.138 thpc44.fnal.gov 131.225.52.141 thpc45.fnal.gov 131.225.52.142 thpc46.fnal.gov 131.225.55.123 fnth41.fnal.gov page fasic Fasic Cluster (wh14w) 131.225.55.229 fasicsv1.fnal.gov 131.225.52.87 fasic12.fnal.gov 131.225.52.86 fasic13.fnal.gov 131.225.54.40 fasic14.fnal.gov 131.225.54.41 fasic15.fnal.gov page focus Focus Cluster (wh9e) 131.225.55.212 focuspc01.fnal.gov 131.225.55.213 focuspc02.fnal.gov 131.225.55.214 focuspc03.fnal.gov 131.225.52.88 focuspc04.fnal.gov 131.225.52.11 focuspc05.fnal.gov ./bb/bb19c/etc/bbchkhosts.sh0100755002342100007640000001052707616533070013512 0ustar bbbb#!/bin/sh # # bbchkhosts.sh: Check the host file for invalid entries # # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Check if the BB program paths are correct # exec < /dev/null OLDIFS=$IFS IFS='=' set `grep "^BBHOME" ../runbb.sh 2>/dev/null` >/dev/null 2>&1 IFS=$OLDIFS if [ "$#" -ne 2 ] then echo "BBHOME is not set in runbb.sh" else bbhome=`eval "echo $2"` if [ ! -d "$bbhome" ] then echo "\"$bbhome\" is not a valid directory for BBHOME" fi fi BBHOME=$bbhome;export BBHOME . ./bbdef.sh echo echo "If any comments are displayed, please fix the entries in your configuration" echo echo "Note that some error messages may be for tags of external scripts" echo grep "^[0-9]" ./bb-hosts |\ while read line do # A config line needs at least two parameters set $line if [ "$#" -lt 2 ] then echo "bb-hosts: \"$line\" -- missing information" echo "" contiue fi numargs=$# arg1=$1 shift arg99=$* OLDIFS=$IFS IFS=. set $arg1 IFS=$OLDIFS # Is it a valid ip address if [ "$#" -ne 4 ] then echo "bb-hosts: \"$line\" -- invalid IP address" echo "" continue fi ipmatch=`echo "$arg1" | grep "^[0-9.]*$" 2>/dev/null` if [ "$ipmatch" = "" ] then echo "bb-hosts: \"$line\" -- invalid IP address" echo "" continue fi if [ "$1" -lt 0 -o "$1" -gt 255 ] then echo "bb-hosts: \"$line\" -- invalid IP address" echo "" continue fi if [ "$2" -lt 0 -o "$2" -gt 255 ] then echo "bb-hosts: \"$line\" -- invalid IP address" echo "" continue fi if [ "$3" -lt 0 -o "$3" -gt 255 ] then echo "bb-hosts: \"$line\" -- invalid IP address" echo "" continue fi if [ "$4" -lt 0 -o "$4" -gt 255 ] then echo "bb-hosts: \"$line\" -- invalid IP address" echo "" continue fi set $arg99 arg1=$1 shift arg99=$* # If FQDN is set, is the hostname valid if [ "$FQDN" = TRUE ] then OLDIFS=$IFS IFS=. set $arg1 IFS=$OLDIFS if [ "$#" -lt 3 ] then echo "bb-hosts: \"$line\" -- invalid host name (FQDN=TRUE)" echo "" continue fi fi if [ "$numargs" -eq 2 ] then continue fi set $arg99 arg1=$1 shift arg99=$* # If the 3rd arg of cfg line is not a '#', then an alias was defined if [ "$arg1" != "#" ] then if [ "$FQDN" = "TRUE" ] then OLDIFS=$IFS IFS=. set $arg1 IFS=$OLDIFS if [ "$#" -lt 3 ] then echo "bb-hosts: \"$line\" -- invalid alias name (FQDN=TRUE)" echo "" continue fi fi fi # Any more arguments ? if [ -z "$arg99" ] then continue fi for param in $arg99 do case $param in http* | dns | dig | BBNET | BBDISPLAY | BBPAGER | BBRELAY:* | dialup | noping | testip | noconn ) case $param in BBRELAY:* ) echo "$line" | grep BBDISPLAY >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo "$line" | grep BBDISPLAY >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo "bb-hosts: directive ($param) not defined in an entry with a BBDISPLAY and/or BBPAGER directive" echo "" continue fi fi OLDIFS=$IFS IFS=":" set $param IFS=$OLDIFS if [ "$2" = "" ] then echo "bb-hosts: directive ($param) improperly defined should be BBRELAY:" echo "" continue fi ;; esac continue ;; *) OLDIFS=$IFS IFS=':' set ${param} IFS=$OLDIFS nettest=$1 echo " ${BBNETSVCS} " | grep "[ ]${nettest}[ ]" >/dev/null 2>&1 if [ "$?" -eq 0 ] then case $param in !* ) param=`echo $param | sed 's/!//1'` ;; \~* ) param=`echo $param | sed 's/~//1'` ;; \?* ) param=`echo $param | sed 's/?//1'` ;; esac OLDIFS=$IFS IFS=':' set ${param} IFS=$OLDIFS if [ "$#" -eq 2 ] then # Check for "svc:port" construct case $2 in [0-9]* ) continue ;; esac fi grep "^${1}[ ]" /etc/services >/dev/null 2>/dev/null if [ "$?" -ne 0 ] then echo "bb-hosts: \"$line\" -- unknown service ($param) -- ignore if it is an external script tag" echo "" fi shift while [ "$#" -gt 0 ] do case $1 in [qQs] ) ;; * ) echo "bb-hosts: \"$line\" -- invalid qualifier ($param) Valid qualifiers are [qQs]" echo "" ;; esac shift done else echo "bb-hosts: \"$line\" -- unknown directive ($param)" echo "" fi ;; esac done done ./bb/bb19c/etc/bbchkcmds.sh0100755002342100007640000001055407616533070013300 0ustar bbbb#!/bin/sh # # bbchkcmds.sh: Check that commands are in the right place. # # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # #-------------------------------------------------------- # FIGURE OUT WHERE WE ARE AND SET BBHOME #-------------------------------------------------------- echo "*** Verifying pathnames to necessary commands..." PROG="$0" XNAME=`basename $0` DIR=`echo $PROG | sed "s/${XNAME}$//"` cd $DIR # GET TO THE INSTALL DIRECTORY cd .. # GO UP TO BBHOME BBHOME=`pwd` # SET IT THE EASY WAY # Check if the BB program paths are correct # Most of them live in here read 'em in. . $BBHOME/etc/bbsys.sh 2> /dev/null . $BBHOME/etc/bbsys.local 2> /dev/null rm -f /tmp/BBCHK.$$ rm -f /tmp/BADCMDS.$$ rm -f /tmp/BBMISS.$$ # # TOOK LYNX OUT OF THE COMMAND TO CHECK SINCE IT'S SET IN bbdef.sh # AND NEEDS SPECIAL ARGUMENTS... # varset="MAIL NSLOOKUP PING LS FIND TOUCH CAT GREP SORT UNIQ DATE TAIL SED UPTIME WC WHO RM EGREP AWK EXPR HEAD CP MV ID DIG LN TOP DF PS" for var in $varset do varval="\$${var}" pathval=`eval echo $varval` if [ -z "$pathval" ] then if [ "$var" = "TOP" ] then continue else set "EMPTY" fi else set $pathval fi cmdpath=$1 if test "$#" -gt 1 # IF THERE ARE ANY ARGS, THEN then shift; ARGS="$*" # SAVE THE ARGUMENTS! else ARGS="" fi if [ ! -f "$cmdpath" ] # THE COMMAND DOESN'T EXIST... then cmd=`echo $var | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` CMDLINE=`type $cmd 2> /dev/null` if [ "$?" -eq 0 ] # FOUND IT - MOVE IT IN... then set $CMDLINE while test "$#" -gt 1 do shift; done if [ "$ARGS" != "" ] then NEWPATH="$1 $ARGS"; else NEWPATH="$1" fi echo "$var=\"$NEWPATH\"; export $var" >> /tmp/BBCHK.$$ if test "$pathval" then echo " --> $pathval changed to $NEWPATH" >> /tmp/BADCMDS.$$ else echo " --> added $NEWPATH" >> /tmp/BADCMDS.$$ fi else echo "$var" >> /tmp/BBMISS.$$ fi if [ "$var" = "DIG" ] then echo "DIG is unavailable, the directive \"dig\" cannot be used in bb-hosts" fi continue else case $var in EGREP ) echo xxx | $cmdpath -x xxx >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo "$var does not seem to understand the -x option, please replace" echo " with a version that understands the -x option" fi ;; * ) ;; esac fi done for file in $MSGFILE do if [ ! -f "$file" ] then echo "MSGFILE=$MSGFILE is incorrectly defined, fix in bbsys.local" fi done # # NOW FIX THE PROBLEMATIC ENTRIES - IF ANY # THE EASIEST WAY TO DO THIS IS BY TACKING THEM # ONTO bbsys.local if test -f /tmp/BBCHK.$$ -o -f /tmp/BBMISS.$$ then if [ -f /tmp/BBMISS.$$ ] then # # Tell the installer that some commands are missing # echo "" echo "You are missing these commands: " cat /tmp/BBMISS.$$ | \ while read cmd do echo $cmd done rm -f /tmp/BBMISS.$$ fi if [ -f /tmp/BBCHK.$$ ] then echo "*** The following changes need to be made..." cat /tmp/BADCMDS.$$ if test "$NAME" != "bbconfig" then ANS="" echo "*** Do you want to make these changes? [y/n]" read ANS else echo "*** Making changes..." ANS="y" fi if test "$ANS" = "y" then echo " # # *** PLEASE DO NOT EDIT BY HAND... # *** AUTOMATIC PATHNAME CORRECTIONS # *** ADDED BY bbchkcmds.sh # *** ON: `date` FOR `uname -a` # " >> $BBHOME/etc/bbsys.local cat /tmp/BBCHK.$$ >> $BBHOME/etc/bbsys.local # # SEE IF THEY'LL BE NICE ENOUGH TO ALLOW US TO UPDATE # OUR PATHNAME DATABASE WITH THIS INFO... # echo " *** We've noticed that we've set some of the pathnames wrong *** by default here. May we mail a summary of the paths we *** missed back to info@bb4.com so we can update our installs? [y/n]" read ANS if test "$ANS" = "y" then . $BBHOME/etc/bbsys.local # GET THE RIGHT PATHS... echo "*** Please enter the OS name and version:" read OSNAME # Add title in case MAIL can't send title, this may help echo "Corrections to $OSNAME" >> /tmp/BBCHK.$$ # We get the exact uname for further enhancements echo "uname: `uname -a`" >> /tmp/BBCHK.$$ $MAIL "Corrections to $OSNAME" bbconfig@bb4.com < /tmp/BBCHK.$$ echo "*** Mail sent, thanks!" fi fi rm -f /tmp/BBCHK.$$ rm -f /tmp/BADCMDS.$$ fi echo "*** Done." else echo "*** All pathnames OK". fi exit 0 ./bb/bb19c/etc/bb-dftab.DIST0100644002342100007640000000143007616533071013141 0ustar bbbb# # bb-dftab # BIG BROTHER CUSTOM DISK PARTITION MONITORING FILE # # bb-dftab: configuration file for disk space checking # # format: [host:]partition:warn%:panic% # # host can be FQDN (fully qualified domain name) or # just a plain hostname but it is preferred that you # use a FQDN. # # The same host can be specified on multiple lines to aid readability # # FOR THE SAME FILESYSTEMS ON EACH CLIENT USE EITHER # localhost:/mntpoint:XX:YY # or # /mntpoint:XX:YY # # COPY THIS FILE TO bb-dftab AND EDIT TO TASTE # ANY PARTITIONS NOT EXPLICITLY LISTED HERE WILL # USE THE VALUES SET BY DFWARN & DFPANIC SET IN # bbdef.sh. DEFAULTS IN bbdef.sh ARE # WARNING AT 90% AND PANIC AT 95% # # You can also use values > 100 to make it always green # /usr:92:98 /home:88:93 /db:100:101 ./bb/bb19c/etc/bbwarnrules.cfg.DIST0100644002342100007640000001172507616533071014574 0ustar bbbb# # bbwarnrules.cfg # # BIG BROTHER Notification rules configuration file # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # *** Please edit the bbwarnsetup.cfg file before editing # this file # # # *** This file is only required on the BBPAGER host *** # # # Rules are written in the following format: # # hosts;exhosts;services;exservices;day;time;recipients # # hosts: match on these hosts (* is a wildcard for all hosts) # exhosts: exclude these hosts # services: match on these services (* is wildcard for all hosts) # exservices: exclude these services # day: 0-6 (sunday-saturday) # time: 0000-2359 # recipients: email address, numeric pager, sms number # # NB The value set by "cfgdelim" (in bbwarnsetup.cfg) is your delimiter # In this case the value is ';' # NB Even though egrep regular expressions are allowed do not use # the .* construct, just set * It will be replaced with # .* in the regexp. It's just that * is more readable than .* # # e.g. # host1 host2;;conn disk;;2;0600-2000;mailuser@mailhost 999-9999 # Check for host1 and host2 (exact match) for conn and disk services on tuesday # between 6am-8pm and notify by mail only to mailuser and # page 999-9999 # # host1.* host2.*;;conn disk;;2;0600-2000;mailuser@mailhost 999-9999 # Check for all hosts that match the regular expression # host1.* and host2.* for conn and disk services on tuesday # between 6am-8pm and notify by mail only to mailuser and # page 999-9999 # # *;exhost3;*;disk;0-6;0000-2359;999-9999 # for all hosts except exhost3 (exact match) check all services but disk all # week and all day, no mail but page 999-9999 # # *;exhost3.*;*;disk;0-3 4 5-6;0000-1159 1200-2359;sms-999-9999 # Same as previous one but with different format (date,time) and # SMS message and it matches any host with exhost3.* # # Also the default "pagedelay" (see bbwarnsetup.cfg) which indicates how # long before the next notification occurs can be overridden on # the rule line # # *;;*;;*;*;root@localhost:0 # # This sets the "pagedelay" at 0 for this recipient. # It will always be notified ! # # Send at most one notification to 9999999 per "pagedelay" # *;;*;;*;*;9999999 # # Send at most one notification to 8888888 # per 120 minutes (overriding "pagedelay") # *;;*;;*;*;8888888:120 # # There are 3 types of overriding pagedelay # # XXX - a simple numeric value # ^XXX - an escalation delay (does not notify 'til the delay has passed) # This delay cannot be acknowledged by someone else # (which could delay it even more) # ~XXX - an initial delay (waits XXX minutes before an notificaition # can be sent to recipient). This delay CAN be acknowledged. # ^XXX & ~XXX can be specified with the overriding pagedelay when they # are notified: # ~XXX-YYY # ^XXX-YYY # e.g.: ~30-15 , wait 30 minutes then notify every 15 # ^60-30 , escalate after 60 minutes and then notify # every 30 minutes # You can also write rules to exclude recipients based on the # previous syntax. Just prefix with ! and any recipient # specified in the rule line will be removed from the # list of recipients that matches the regular rules # # for all hosts don't send any notifications from # 12AM to 6AM and 8PM to 12AM # # !*;;*;;*;0000-0600 2000-2359;* # # for all hosts that start with host, don't send any # notifications on sat & sun to robert@localhost # # !host*;;*;;0 6;*;robert@localhost # # To temporarely disable notifications for a host # # !host1;;*;;*;*;* # # # **** NOTE ***** # # If the same recipient is defined on multiple rules AND # it also has the overriding "pagedelay" value AND the event # matches multiples lines with that recipient then the # lowest pagedelay specification for that recipient will be used to notify ... # e.g. matching rules for that event # rule 1: ... robert@localhost:0 # rule 2: ... sean@localhost # rule 3: ... robert@localhost:15 sean@localhost:15 # real recipients will be robert@localhost:0 sean@localhost # # N.B. All rule lines are scanned to create the list of recipients # It does NOT stop on the first match... # # # Don't forget that you can create clean rule lines by using # the hg- (hostsgroup) and pg- (pagegroup) tokens in the # bbwarsetup.cfg file # # hg-mtlsvrs hg-tosvrs;;*;;*;*;pg-srvsadmins # ################################################################## # # Enter your rules here # *;;*;;*;*;&DEFAULTPAGE # This line is used to specify which admins gets to respond # at HTML form page request (from a BB web page) # Hopefully, you won't have any hosts called "notify-admin" ! # or you'll have some fiddling around to do # uncomment if you want to use the pagehelp facility #notify-admin;;pagehelp;;*;*;&DEFAULTPAGE # This line will always return unmatched hosts to # at least one recipient or to know when a host is not in the # bb-hosts file unmatched-*;;*;;*;*;&DEFAULTPAGE ./bb/bb19c/etc/bbchkwarnrules.sh.DIST0100755002342100007640000000113007616533071015125 0ustar bbbb#!/bin/sh # # bbchkwarnrules.cfg # # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Check integrity of the bbwarnrules.cfg file # if [ ! -r bbwarnrules.cfg ] then echo "Cannot read bbwarnrules.cfg" exit 1 fi rc=0 cat ./bbwarnrules.cfg | grep -v "^#" | \ while read line do set -f disable globber line=`echo $line | sed 's/;;/; ;/g'` if [ -z "$line" ] then continue fi OLDIFS=$IFS IFS=';' set $line IFS=$OLDIFS if [ "$#" -ne 7 ] then echo "invalid rule: <$line>" rc=2 fi set +f #reenable globber done exit $rc ./bb/bb19c/etc/bb-bbexttab.DIST0100644002342100007640000000220007616533071013650 0ustar bbbb# bb-bbexttab: configuration file for launching external scripts # # Format: # # host: misc settings : external scripts list # localhost: misc settings : external scripts list # : misc settings : external scripts list # # host can be FQDN (fully qualified domain name) or # just a plain hostname but it is preferred that you # use a FQDN. # localhost: using this specifies that the scripts # specified on the line are to be launched on all clients # # The same host can be specified on multiple lines to aid readability # # Misc settings field is unimplemented ... # For future use... # # You can override the default sleep between cycles # by addding a time qualifier to the script: # e.g.: localhost: script1;600 # **NOTE** The sleep delimiter in BBEXT of bbdef.sh was # ':' (script1:600) but here it is ';' # in order to keep the same format as the # other bb-*tab files (the : is used to delimit # file entry fields in all bb-*tab files) . # The time qualifier is specified in SECONDS # : : script1 localhost: : script2;600 localhost : : script3 www.bobo.com : : script4 script5 www: : script6 ./bb/bb19c/etc/bb-msgstab.DIST0100644002342100007640000000216707616533071013531 0ustar bbbb# bb-msgstab: configuration file for log files checking # # Format: # # host: log file(s) : misc settings : yellow strings : red strings : strings to ignore on # localhost: log file(s) : misc settings : yellow strings : red strings : strings to ignore on # # host can be FQDN (fully qualified domain name) or # just a plain hostname but it is preferred that you # use a FQDN. # localhost: using this specifies that the settings # specified on the line are to be tested on all clients # # Multiple Yellow/Red/Ignore strings must be ';' seperated # host: file : : this is yellow string 1 ; this is yellow string 2 : : # # You can also specify misc settings to override bbdef.sh defaults # NOT YET FUNCTIONAL, LEAVE EMPTY # # The same host can be specified on multiple lines to aid readability # Strings to match on will only be applied to logs defined on the same entry line # # You can also use regular expressions to define your search strings # www.bb4.com: /var/log/messages : : WARNING : NOTICE : www.bb4.com: /var/log/maillog : : refused.*from ; failed connection : error ERROR : from localhost ; 192.168.1.1 ./bb/bb19c/etc/bbsys.local0100644002342100007640000000115507616533071013155 0ustar bbbb#!/bin/sh # # bbsys.linux # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps ax" # LINUX DF="/bin/df -k" MSGFILE="/var/log/messages" TOUCH="/bin/touch" # SPECIAL TO LINUX # # *** PLEASE DO NOT EDIT BY HAND... # *** AUTOMATIC PATHNAME CORRECTIONS # *** ADDED BY bbchkcmds.sh # *** ON: Thu Aug 15 08:22:16 CDT 2002 FOR Linux attila.fnal.gov 2.4.9-31 #1 Tue Feb 26 07:11:02 EST 2002 i686 unknown # MAIL="/bin/mail -s"; export MAIL PING="/bin/ping"; export PING GREP="/bin/grep"; export GREP SORT="/bin/sort"; export SORT SED="/bin/sed"; export SED EGREP="/bin/egrep"; export EGREP ./bb/bb19c/etc/bbdef.sh0100644002342100007640000002476507616533071012431 0ustar bbbb#!/bin/sh # # bbdef.sh # # BIG BROTHER DEFINITIONS AREA # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # OS TYPE BBOSTYPE="linux" export BBOSTYPE # BB USER BBUSER="bb" export BBUSER # # NEW FOR 1.04... DISPLAY FULLY QUALIFED DOMAIN NAMES? # i.e. aaa.bbb.com instead of just aaa # # FQDN="TRUE" # YES... FQDN="TRUE" # # PREVENT BB TO RUN AS root ? # STOPROOT="TRUE" export STOPROOT # # USE lynx IF YOU MUST TEST PASSWORD PROTECTED PAGES # OR https TESTING... # LIKE Leif Ericksen # Can't put in bbsys.local as cUrl can also be defined as LYNX... case $BBOSTYPE in caldera | debian | redhat ) LYNXCMD="/usr/bin/lynx" ;; * ) LYNXCMD="/usr/local/bin/lynx" ;; esac LYNX="$LYNXCMD -dump -head" # # OR USE curl, WHICH IS BETTER... # # LYNX="/usr/local/bin/curl -s -m 20 -I" # # INTERNET SERVICES YOU DON'T WANT TO GET PAGED ON # WHEN THEY'RE DOWN... ASSUMPTION IS YOU WANT TO KNOW # ABOUT EVERYTHING RIGHT NOW... (pop3/smtp/ssh/...) # NONETPAGE="" export NONETPAGE # # WHERE tmp FILES LIVE - THIS IS GOOD FOR SECURITY # THANKS TO Alan Cox (alan@cymru.net) # BBTMP="$BBHOME/tmp" export BBTMP # LOCATION OF PIDs FILE # BBPID="$BBTMP/BBPID" export BBPID # # LOCATION OF BBOUT FILE # BBOUT="$BBHOME/BBOUT" export BBOUT # # REPORT FILE WARNING LEVEL # WHEN REPORTS ARE RUN, AVAILABILITY < BBREPWARN = RED # AND >= BBREPWARN IS YELLOW. # THIS MUST BE AN INTEGER... # BBREPWARN="97" export BBREPWARN # # LOCAL CLIENT MONITORING CONFIGURATION FOR bb-local.sh # # WARNING AND PANIC LEVELS FOR LOCAL SYSTEM INFOMRAION # YOU CAN SET VALUES ON A SPECIFIC FILESYSTEM BY USING # THE etc/bb-dftab FILE # DFWARN=90 # (YELLOW) DISK % TO WARN DFPANIC=95 # (RED) DISK % TO PANIC export DFWARN DFPANIC # # CPU LEVELS ARE THE 5 MINUTE LOAD AVERAGE x 100 # CPUWARN=400 # (YELLOW) WARN AT LOAD AVG OF 1.5 CPUPANIC=800 # (RED) PANIC AT LOAD AVG OF 3 DISPREALLOADAVG="TRUE" # DISPLAY THE LOAD AVERAGE AS FOUND IN UPTIME # BB REMOVES THE '.' BY DEFAULT export CPUPANIC CPUWARN DISPREALLOADAVG # # PROCESS MONITORING # THESE VALUES ARE OVERRIDDEN BY THE etc/bb-proctab FILE # PROCS="bbrun" # (YELLOW) WARN IF NOT RUNNING PAGEPROC="cron" # (RED) PAGE IF NOT RUNNING export PROCS PAGEPROC # # MESSAGE FILE MONITORING (/var/adm/messages or similar) # # SMM: NEW IN BB 1.4 # CHKMSGLEN IS SET TO TRUE BY DEFAULT. IT WILL SCREAM IF IT FINDS # AN EMPTY MESSAGES FILE. BETTER SAFE THAN SORRY. # # NOTE: AS OF VERSION 1.8 YOU CAN USE etc/bb-msgstab TO # CONFIGURE THE VALUES OF PAGEMSG, MSGS AND IGNMSGS # NOTE THAT KEYWORDS ARE SPACE SEPERATED HERE AS OPPOSED # TO ';' SEPERTATED IN etc/bb-msgstab # CHKMSGLEN="TRUE" # MAKE SURE MSG FILE IS NON-ZERO LEN PAGEMSG="NOTICE" # (RED) PAGE IF WE SEE THIS MESSAGE MSGS="$PAGEMSG WARNING" # (YELLOW) MESSAGES TO WATCH FOR # NOTE: WORDS IN PAGEMSG *MUST ALSO* # BE DEFINED IN MSGS IGNMSGS="" # List of messages to ignore if string(s) matches line # delimit each message with ; MSGEXPIRE="30:60" # EXPIRE WARNINGS IN 30 MIN, PANICS IN 60 YELLOWMSGSLINES=10 # Return the XX most recent WARNING messages REDMSGSLINES=20 # Return the XX most recent PANIC messages OLDSTYLEBBMSGS="FALSE" # Don't expire messages found # just like the old days (they must be cleared by hand) export MSGS PAGEMSG IGNMSGS CHKMSGLEN MSGEXPIRE YELLOWMSGSLINES REDMSGSLINES OLDSTYLEBBMSGS # # PATH TO WEB SERVER DISPLAY # INSERT THE PATH TO YOUR BBDISPLAY WEB SERVER # THIS IS USED ONLY IF YOU USE HTMLized STATUS LOGS # BBWEB AND BBWEBHOST SHOULDN'T END WITH A "/" # BBWEB="/bb" BBWEBHOST="http://hellion.fnal.gov" export BBWEB BBWEBHOST # BBWEB SHOULDN'T BE JUST "/", BECAUSE A LOT OF USE IN THE # ${BBWEB}/... THAT WOULD EVALUATE TO //... WHICH CAN THROW OFF SOME WEB SERVERS # BBWEB SHOULD START WITH A "/" if [ "$BBWEB" != "" ] then case "$BBWEB" in "/" ) BBWEB="" ;; /* ) ;; * ) BBWEB="/${BBWEB}" # MAKE SURE THERE'S A LEADING SLASH ;; esac fi if [ "$BBWEB" = "" ] then BBWEBHTMLLOGS="${BBWEBHOST}/html" BBWEBHOSTURL="${BBWEBHOST}" else BBWEBHTMLLOGS="${BBWEBHOST}${BBWEB}/html" BBWEBHOSTURL="${BBWEBHOST}${BBWEB}" fi export BBWEBHTMLLOGS BBWEBHOSTURL # # If you need a different value than BBWEB in mkbbwml.sh # just change the value here BBWAP="${BBWEB}/wml" export BBWAP # # URL OF THE CGI SCRIPTS # SHOULDN'T END WITH A "/" # CGIBINURL="/cgi-bin" # e.g. /cgi-bin export CGIBINURL # # URL OF reports # BBREPURL="${BBWEB}/rep" export BBREPURL # # Default colors to send notification messages on # PAGELEVELS="red purple" # Default red purple # purple is always sent by the # BBDISPLAY. Clients shouldn't # send purple export PAGELEVELS # Will be overidden in bbinc.sh # with values found in # etc/bbwarnsetup.cfg # # GENERATE WEB BASED HISTORY OR USE HISTORY LOG FILE # WEBHISTORY="TRUE" # TRUE will show a web display for history # otherwise just the text history log BBHIST_IGNOREBLUE=FALSE # Don't count down time from BLUE export WEBHISTORY BBHIST_IGNOREBLUE # # SAVE THE NEW STATUS LOG IF IT CHANGES THE COLOR ? # THEY ARE STORED IN $HISTLOGS (bbinc.sh) # SAVESTATUSLOG="TRUE" export SAVESTATUSLOG # # BB creates a static HTML page for every incoming status ? # Otherwise, the status is generated with $CGIBINURL/bb-hostsvc.sh dynamically # values: STATIC/DYNAMIC/TEXT # STATIC - create an HTMLized status log, reverts to TEXT if www/html directory # is missing or unwritable # DYNAMIC - create a HTMLized status log on the fly when the admin clicks on # the colored dot in bb.html/bb2.html # TEXT - A simple text page will be displayed # If you chose this option then you must make a link # from $BBLOGS to $BBHOME/www/logs # ln -s $BBLOGS $BBHOME/www/logs # *NOTE* This option is not recommended, it represents # a security risk. Only use if you are in # a secure network and not attached to the Internet # BBLOGSTATUS="STATIC" export BBLOGSTATUS # # HOW LONG BEFORE SENDING A PURPLE REPORT # PURPLEDELAY="30" # THIS MUST BE A POSITIVE VALUE !!! SINCE v1.4c export PURPLEDELAY if [ "$PURPLEDELAY" != "" -a "$PURPLEDELAY" -le 0 ] then echo "PURPLEDELAY ($PURPLEDELAY) should be a positive value !!!" fi PINGTESTS=4 # How many tries for regular ping test PINGSLEEPFCT=3 # Sleep factor, how long to sleep between each # ping test, it is incremented every test: 3,6,9,... PINGWARN=1 # How many failed pings does it require # such the test wll be considered yellow ? export PINGTESTS PINGSLEEPFCT PINGWARN # Do you want clear dots for noping directive & 0.0.0.0 hosts ? # Set this to anything but TRUE and no clear dots will be # generated for hosts=0.0.0.0 and hosts with the noping directive # You can leave this to TRUE and you can disable the clear button # individually (by host) using the noconn directive on the host's line NOPINGCLEAR="TRUE" export NOPINGCLEAR # Do you want to see your failed IP tests (done in bb-network.sh) # to be displayed with a red dot or a clear dot # *** ONLY *** if the connectivity to that host failed. IPTEST_2_CLEAR_ON_FAILED_CONN="TRUE" export IPTEST_2_CLEAR_ON_FAILED_CONN # Specify scripts to execute while running bb-hist.sh # Echo from them will be displayed on the generated web page BBHISTEXT="" export BBHISTEXT # Specify scripts to execute while running mkbb.sh/mkbb2.sh # Echo from them will be displayed on the generated web page BBMKBBEXT="" BBMKBB2EXT="eventlog.sh acklog.sh" export BBMKBBEXT BBMKBB2EXT # Do we keep historical info by host ? for all ? BBHOSTHISTLOG=TRUE BBALLHISTLOG=TRUE export BBHOSTHISTLOG BBALLHISTLOG # Should bb-network.sh run the conn test ? CONNTEST=TRUE export CONNTEST # # Can summaries set the background color # SUMMARY_SET_BKG=TRUE export SUMMARY_SET_BKG # # How many concurrent bb-network.sh to run ? # BBNETTHREADS=1 export BBNETTHREADS # # What NET services to check (don't put in dns/dig/http) # BBNETSVCS="smtp telnet ftp pop pop3 pop-3 ssh imap ssh1 ssh2 imap2 imap3 imap4 pop2 pop-2 nntp" export BBNETSVCS # # Generate WML output for WAP enabled phones ? # WML_OUTPUT=FALSE WMLMAXCHARS=1500 # What's the most characters can you WAP device accept ? export WML_OUTPUT WMLMAXCHARS # # Control the color of the cpu dot when a host reboots # Note that the maximum of minutes definable is 60, anything over will be reset to 60 # WARNMINSONREBOOT=60 WARNCOLORONREBOOT=yellow export WARNMINSONREBOOT WARNCOLORONREBOOT # # THIS SETS A VALUE FOR IF YOU THINK MACHINES SHOULD BE REBOOTED EVERY X DAYS # BBTOOMANYDAYSUP=9999 export BBTOOMANYDAYSUP # # TIMERS FOR bbnet # bbnet TRIES TO COMMUNICATE UP TO 3 TIMES USING # INCREMENTAL TIMERS (by default). YOU CAN CHANGE # THE TIMEROUT VALUES IF SOME OF YOUR CONNECTIONS TAKE # LONGER THAN THE CUMULATIVE TIMER VALUES (DEFAULT 20secs) # BBNETTIMER1=3 # WAIT UP TO 3 SECONDS BBNETTIMER2=5 # 5 SECONDS BBNETTIMER3=12 # 12 SECONDS export BBNETTIMER1 BBNETTIMER2 BBNETTIMER3 # # EXECUTE LOCAL SCRIPTS FROM HERE... # SCRIPTS SHOULD LIVE IN $BBHOME/ext DIRECTORY # BBEXT CONTAINS THE FILENAMES TO EXECUTE # SEPERATE THE SCRIPTS WITH A SPACE: BBEXT="ext1.sh ext2.sh" # IT IS PREFERABLE THAT YOU USE THE etc/bb-bbexttab FILE # INSTEAD OF THIS. IT IS KEPT FOR BACKWARD COMPATIBILITY # BBEXT="bb-memory.sh bb-root.sh bb-top-3_2.sh" BBDEFSLEEP=300 # HOW OFTEN TO RUN EXTERNAL SCRIPTS (IN SECONDS) export BBEXT BBDEFSLEEP # # Variables to determine if local test is to be run # and if so, does it send a msg anyway # DOCPU="TRUE" DOMSGS="TRUE" DOPROCS="TRUE" DODISK="TRUE" NOCPUCOLOR="clear" # Set to "" if you don't want a message sent NOMSGSCOLOR="clear" # anything else will send a message to BBDISPLAY NODISKCOLOR="clear" NOPROCSCOLOR="clear" export DOMSGS DOPROCS DODISK DOCPU export NOCPUCOLOR NOMSGSCOLOR NODISKCOLOR NOPROCSCOLOR # # What's the largest message size that can be sent out # It should be the same value as in src/bb.h # MAXLINE=8192 export MAXLINE # # configuration variables associated with the combo message # DOCOMBO=TRUE # Do we use the combo message ? MAXCOMBOMSGS=999 # Maximum status logs in a single combo message MAXCOMBOTTL=120 # combo workfile maximum Time to live, in seconds export DOCOMBO MAXCOMBOMSGS MAXCOMBOTTL . ${BBHOME}/etc/bbsys.sh # INCLUDE SYSTEM DEFINITIONS . ${BBHOME}/etc/bbinc.sh # INCLUDE BB DEFINITIONS export FQDN DF MSGFILE LYNX ./bb/bb19c/etc/bb-dftab0100644002342100007640000000306607637613644012416 0ustar bbbb# # bb-dftab # BIG BROTHER CUSTOM DISK PARTITION MONITORING FILE # # bb-dftab: configuration file for disk space checking # # format: [host:]partition:warn%:panic% # # host can be FQDN (fully qualified domain name) or # just a plain hostname but it is preferred that you # use a FQDN. # # The same host can be specified on multiple lines to aid readability # # FOR THE SAME FILESYSTEMS ON EACH CLIENT USE EITHER # localhost:/mntpoint:XX:YY # or # /mntpoint:XX:YY # # COPY THIS FILE TO bb-dftab AND EDIT TO TASTE # ANY PARTITIONS NOT EXPLICITLY LISTED HERE WILL # USE THE VALUES SET BY DFWARN & DFPANIC SET IN # bbdef.sh. DEFAULTS IN bbdef.sh ARE # WARNING AT 90% AND PANIC AT 95% # # You can also use values > 100 to make it always green # # /usr:92:98 # /home:88:93 fasicsv1.fnal.gov:/scratch1:101:101 fasicsv1.fnal.gov:/scratch2:101:101 fasicsv1.fnal.gov:/export/home:100:100 fasicsv1.fnal.gov:/usr/local:100:100 aida.fnal.gov:/d/scratch2:101:101 attila.fnal.gov:/d/scratch3:101:101 cetus.fnal.gov:/d/lynx:99:99 falstaff.fnal.gov:/d/scratch6:101:101 falstaff.fnal.gov:/d/scratch15:101:101 nabucco.fnal.gov:/d/scratch4:101:101 otello.fnal.gov:/d/scratch7:101:101 otello.fnal.gov:/d/scratch8:101:101 rigoletto.fnal.gov:/d/scratch5:101:101 simon.fnal.gov:/d/scratch9:101:101 simon.fnal.gov:/d/scratch14:101:101 traviata.fnal.gov:/d/scratch11:101:101 traviata.fnal.gov:/d/scratch10:101:101 trovatore.fnal.gov:/d/scratch13:101:101 trovatore.fnal.gov:/d/scratch12:101:101 thpc25.fnal.gov:/backups:101:101 thpc25.fnal.gov:/mnt/zip:101:101 thpc26.fnal.gov:/olddisk/Users:101:101 ./bb/bb19c/bin/0040755002342100007640000000000007616533072011016 5ustar bbbb./bb/bb19c/bin/bbrun.old0100755002342100007640000000204207616533071012623 0ustar bbbb#!/bin/sh # # bbrun # # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Execute BB shell scripts # loop them forever # if test ! -x "$1" then echo "Can't execute $1, exiting" exit 1 fi if test "$BBSLEEP" = "" then echo "BBSLEEP not set, exiting" exit 2 fi # Save the pid of this bbrun for runbb.sh stop processing echo "$$" >> $BBPID while true do START=`$BBHOME/bin/touchtime -e` $1 END=`$BBHOME/bin/touchtime -e` BBTIME=`$EXPR $END - $START` if [ "$BBTIME" -lt "$BBSLEEP" ] then # Fix for invalid BBTIME # If xntpd/ntpdate changes date back a few # seconds/mins/hours may cause this if [ "$BBTIME" -lt 0 ] then echo "`$DATE` bbrun ($1) Runtime $BBTIME is invalid" BBTIME=`$EXPR 0 - $BBTIME` BBTIME=`$EXPR $BBTIME % $BBSLEEP` fi # echo "BBTIME is $BBTIME" SLEEPYTIME=`$EXPR $BBSLEEP - $BBTIME` # echo "SLEEPYTIME is $SLEEPYTIME" sleep $SLEEPYTIME else echo "`$DATE` bbrun: ($1) Runtime $BBTIME longer than Sleeptime $BBSLEEP" fi done ./bb/bb19c/bin/bb-network.sh0100755002342100007640000005141307616533071013427 0ustar bbbb#!/bin/sh # bb-network.sh # # BIG BROTHER NETWORK MONITORING SCRIPT # Sean MacGuire # Version 1.9c # May 03rd, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # SEND THE TEST RESULTS TO THE DISPLAY SERVER USING bb # echo "***** BBHOME IS SET TO $BBHOME IN bb-net" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # Create multiple threads of bb-network.sh as requested if [ "$BBNETTHREADS" != "" -a "$BBNETHOSTS" = "" ] then if [ "$BBNETTHREADS" -gt 1 ] then # NUMBER OF LINES IN etc/bb-hosts BBHOSTLINES=`$GREP "^[0-9]" $BBHOSTS | $WC` BBHOSTLINES=`echo $BBHOSTLINES` # YOU CAN'T HAVE MORE THREADS THAN LINES if [ "$BBHOSTLINES" -lt "$BBNETTHREADS" ] then BBNETTHREADS=$BBHOSTLINES fi # HOW MANY LINES FROM etc/bb-hosts TO SAVE # IN TEMPORARY HOSTS FILE NUMLINES=`$EXPR $BBHOSTLINES / $BBNETTHREADS` # SAVE EACH TEMPORARY HOSTS FILE AND CALL bb-network.sh AGAIN LOOPS=1 while [ "$LOOPS" -le "$BBNETTHREADS" ] do TEMPLINES=`$EXPR $LOOPS \* $NUMLINES` BBNETHOSTS=$BBTMP/bb-hosts.$$.$LOOPS export BBNETHOSTS $GREP "^[0-9]" $BBHOSTS | $HEAD -$TEMPLINES | $TAIL -$NUMLINES > $BBNETHOSTS $BBHOME/bin/bb-network.sh & LOOPS=`$EXPR $LOOPS + 1` done # ANY LINES LEFT TO DO REMAINLINES=`$EXPR $BBHOSTLINES - $TEMPLINES` if [ "$REMAINLINES" -gt 0 ] then BBNETHOSTS=$BBTMP/bb-hosts.$$.$LOOPS export BBNETHOSTS $GREP "^[0-9]" $BBHOSTS | $TAIL -$REMAINLINES > $BBNETHOSTS $BBHOME/bin/bb-network.sh & LOOPS=`$EXPR $LOOPS + 1` fi # Do dialups on their own BBNETHOSTS=$BBTMP/bb-hosts.$$.$LOOPS export BBNETHOSTS $GREP "^dialup" $BBHOSTS >> $BBNETHOSTS if [ "$?" -eq 0 ] then $BBHOME/bin/bb-network.sh & else $RM -f $BBNETHOSTS fi # Wait for all child processes to terminate wait exit 0 fi fi # IF # OF THREADS WAS 1 OR UNSPECIFIED THEN USE etc/bb-hosts # SUCH THAT BBNETHOSTS WAS NEVER SET if [ "$BBNETHOSTS" = "" ] then BBNETHOSTS="$BBTMP/bbnethosts.$$.1" $CAT $BBHOSTS > $BBNETHOSTS fi # # SMM - NEW FOR 1.05 # ALLOW TESTING OF BANKS OF CONNECTIONS ONLY # FORMAT OF THE LINE IS # dialup name IP-ADDRESS COUNT # dialup modem-bank1 132.220.50.1 16 # $GREP "^dialup" $BBNETHOSTS | while read line do set $line if test "$#" != "4" then echo "MISSING ARGUMENTS FOR dialup" echo "Line format is:" echo "dialup pool-name start-ip count" exit 1 fi NAME="$2" TTL="$4" set `echo $3 | $SED "s/\./ /g"` BASE="$1.$2.$3" START="$4" END=`$EXPR $START + $TTL - 1` # echo "NAME IS $NAME" # echo "TTL IS $TTL" # echo "BASE IS $BASE" # echo "START IS $START" # echo "END IS $END" LINE="FROM $BASE.$START TO $END DATA " while test "$START" -le "$END" do TEST="${BASE}.$START" # echo $TEST $PING $PINGPAR1 $TEST $PINGPAR2 2>/dev/null | $SED 's/octet/byte/g' | $GREP -v SO_TIMESTAMP > $BBTMP/BBPING.$$ 2>&1 bytesfrom=`$GREP "bytes from" $BBTMP/BBPING.$$ | $GREP -vi "unreachable" | $GREP -vi "exceeded" | $GREP -vi "prohibited" 2>/dev/null` if [ "$bytesfrom" = "" ] then LINE="$LINE clear " else LINE="$LINE green " fi START=`$EXPR $START + 1` $RM -f $BBTMP/BBPING.$$ done # echo "LINE IS $LINE" $BB $BBDISP "status dialup.${NAME} green `date` $LINE" done # # Initialize bbcombo.sh, without BBCOMBOID, # bb-combo.sh sends the status immediately # at least not here :) # BBCOMBOID="$$" export BBCOMBOID $BBHOME/bin/bb-combo.sh start $GREP "^[0-9]" $BBNETHOSTS | while read line do set $line HOSTIP=$1 # HOST IP ADDRESS FULLNAME=$2 IPADDR=`echo $1 | $SED "s/\.//g"` # # SMM - NEW FOR 1.07c # IMPLICIT SUPPORT FOR dhcp STATIONS WHEN LISTED AS 0.0.0.0 # if test "$HOSTIP" = "0.0.0.0" then PINGHOST=$FULLNAME # SUPPORT PING BY NAME FOR DHCP ONLY else PINGHOST=$HOSTIP fi # # SMM - NEW FOR 1.04 # USE FULLY QUALIFIED MACHINE NAMES? # DOT -> COMMA -> DOT FOR WEB DISPLAY # if test "$FQDN" = "TRUE" then set `echo $FULLNAME | $SED "s/\./,/g"` else set `echo $FULLNAME | $SED "s/\./ /"` fi MACHINE=$1 # # SMM 1.09d - SUPPORT FOR ALIAS DISPLAY # echo "$line" | $GREP "[ ]testip" > /dev/null 2>&1 if [ "$?" = "0" ] then HOSTSTRING=$HOSTIP else HOSTSTRING=$FULLNAME fi CONN_TEST_FAILED="FALSE" DIALUP=FALSE # # is the dialup directive defined in the entry # echo "$line" | $GREP "[^ ]*[ ]*[^ ]*[ ]*dialup" > /dev/null 2>&1 if test $? = "0" then DIALUP=TRUE fi # Check if we do the connection test # Enabled by default if [ "$CONNTEST" = "TRUE" ] then # #================================================ # CONNECTIVITY TEST # Added support for non-standard pings. gunnar@bitcon.no # # SMM: PING BY IP ADDRESS INSTEAD OF BY NAME. (v1.04a) # SMM: TRY THREE TIMES BEFORE PAGING (v1.06b) # BB SHOULD NOT BE A 3AM WAKE UP CALL... #================================================ # # SMM 1.07 # TO PING OR NOT TO PING # FIXED FALSE POSITIVES THANKS TO consult@netcom.com # SMM ADDED noconn KEYWORD # echo "$line" | $GREP "[^ ]*[ ]*[^ ]*[ ]*noconn" > /dev/null 2>&1 ERR=$? NOCONN=$ERR if test "$ERR" != "0" then echo "$line" | $GREP "noping" > /dev/null 2>&1 ERR=$? fi if test $ERR = "0" then COLOR="clear" # PING TEST DISABLED BY REQUEST LINE="Ping test disabled by request (noping)" else COLOR="green" # INNOCENT UNTIL PROVEN GUILTY LINE=`$BBHOME/bin/bb-ping.sh $PINGHOST $DIALUP` ERR="$?" fi if test $ERR != "0" then if test "$DIALUP" = "TRUE" then COLOR="clear" LINE="bb-network.sh: $FULLNAME offline (dialup)" CONN_TEST_FAILED="TRUE" else CONN_TEST_FAILED="TRUE" echo "$NONETPAGE" | $GREP "ping" >/dev/null 2>&1 if test $? = "1" # NOT FOUND - PAGE then COLOR="red" else COLOR="yellow" LINE="$LINE - configured not to page" fi fi else echo "$LINE" | grep "WARNING" > /dev/null 2>&1 if test "$?" = "0" then COLOR="yellow" fi fi # # SMM 1.2c # IF THERE'S A noconn SYMBOL - NO REPORT! # if test "$NOCONN" != 0 then # Do we send clear status for noping & 0.0.0.0 ? # If so, continue on (we always send message when color != clear) if [ "$DIALUP" = "TRUE" -o "$COLOR" = "clear" -a "$NOPINGCLEAR" = "TRUE" -o "$COLOR" != "clear" ] then #$BB $BBDISP "status ${MACHINE}.conn $COLOR `date` $LINE" $BBHOME/bin/bb-combo.sh add "status ${MACHINE}.conn $COLOR `date` $LINE" fi fi fi # # THIS IS NEW WITH 1.04... TEST FOR OTHER SERVICES HERE... # SEND THE RESULTS TO THE USUAL PLACE... # set $line # GET ALL THE LINE ARGS shift; shift; # SKIP THE IP-ADDR AND NAME if [ "$#" -ne 0 ] then newline="" httparg="" # REWRITE THE ARGUMENTS SUCH THAT http DIRECTIVES ARE BUNCHED TOGETHER while [ "$#" -ne 0 ] do case $1 in http* ) if [ "$httparg" = "" ] then httparg="$1" else httparg="${httparg}|${1}" fi ;; * ) newline="$newline $1" ;; esac shift done set $newline $httparg fi while test "$1" # AS LONG AS WE HAVE ARGS do if [ "$1" = "#" ] then shift continue fi line="$*" # SAVE THIS.. case $1 in *!* ) arg=`echo $1 | $SED 's/!//g'` TESTREVERSED=TRUE ;; *) arg=$1 TESTREVERSED=FALSE ;; esac # Any service that has the ? sign in it signifies # to consider this service as dialup case $arg in http* ) # http arg may contain a ? # e.g. http://www.yyy.zzz/abc.cgi?qwerty=123 # Thanks to csmith@interactcommerce.com arg=$arg SVCDIALUP=FALSE ;; *\?* ) arg=`echo "$arg" | $SED 's/?//1'` SVCDIALUP=TRUE ;; *) arg=$arg SVCDIALUP=FALSE ;; esac case $arg in *~* ) # does it start with ~ ? echo "$arg" | $GREP '^~.*' >/dev/null 2>&1 if [ "$?" -eq 0 ] then # it does, remove it, caveat: it removes all ~ from the string arg=`echo "$arg" | $SED 's/~//1'` REVERSE_IP_CLEAR=TRUE fi ;; *) arg=$arg REVERSE_IP_CLEAR=FALSE ;; esac # Is the directive a NET service defined in BBNETSVCS tmparg="" OLDIFS=$IFS IFS=":" set $arg IFS=$OLDIFS echo " $BBNETSVCS " | $GREP "[ ]${1}[ ]" >/dev/null 2>&1 if [ "$?" -eq 0 ] then tmparg=$arg arg=NETSVC fi case $arg in # # Add telnet test Tony DeJoie (tony@bellcore.com) # Add ssh test Kim Shrier (kim@tinker.com) # NETSVC ) # # OK... GET THE SERVICE NUMBER OUT OF /etc/services # CAN BE SEPERATED BY SPACES/TABS... (v1.04a) # arg=$tmparg OLDIFS=$IFS IFS=":" set $arg IFS=$OLDIFS SVCNAME=$1 USEIP=$2 # WAS A SERVICE NAME DEFINED # CHECK FOR :22 instead of ssh:22 if [ "$SVCNAME" = "" ] then continue fi if [ "$USEIP" != "" ] then # We could have multiple : entries: i.e. port:1234:q:s # Just keep 1234:q:s for USEIP USEIP=`echo $arg | $SED "s/"$SVCNAME"//g"` fi SVC="" bbnetargs="" notdone=1 while [ "$notdone" -eq 1 ] do case "$USEIP" in *:s* ) # Silent - just connect to port bbnetargs="${bbnetargs} -s " USEIP=`echo "$USEIP" | $SED 's/:s//g'` ;; *:q* ) # Don't return timing statistics bbnetargs="${bbnetargs} -q " USEIP=`echo "$USEIP" | $SED 's/:q//g'` ;; *:Q* ) # Don't report errors bbnetargs="${bbnetargs} -Q " USEIP=`echo "$USEIP" | $SED 's/:Q//g'` ;; * ) USEIP=`echo "$USEIP" | $SED 's/://g'` notdone=0 ;; esac done # ONLY SERVICE NAME WAS SPECIFIED if [ "$USEIP" = "" ] then # # SMM 1.07a - 21 JUN 98 # A LITTLE FRIENDLY CHECK HERE WILL SAVE LOTS OF GRIEF # SVCLINE=`$GREP "^${SVCNAME}[ ]" /etc/services | $GREP "/tcp"` if test "$SVCLINE" = "" # HOUSTON, WE HAVE A PROBLEM then echo "bb-network.sh: ERROR on bb-hosts line: $FULLNAME" echo "$SVCNAME NOT in /etc/services (CHECK SPELLING)" set $line shift continue fi set $SVCLINE while test "$SVC" = "" do echo $1 | $GREP "/tcp" > /dev/null if test "$?" = "0" then SVC=`echo $1 | $SED "s/\/tcp//"` #echo "FOUND SERVICE: $SVCNAME: $SVC" break fi shift done else # SERVICE PORT NUMBER SPECIFIED # IS IT VALID ? USEIPTMP=`echo "$USEIP" | $SED 's/[^0-9]//g'` if [ "$USEIP" != "$USEIPTMP" ] then # NOPE continue fi SVC="$USEIP" fi # echo "SETTING UP PROTOCOL SPECIFIC DATA" # By default bbnet sends "quit" case $SVCNAME in imap* ) # Added tag as per RFC-2060, it was "* LOGOUT" but that's invalid # thanks to Dave Carrigan textmsg="ABC123 LOGOUT" ;; ssh*) # Make it connect with a recognizable token # Suggested by scott@PacketPushers.com textmsg="Big-Brother-Monitor-$BBREL" ;; smtp* ) # To get rid of NOQUEUE messages # try this # Thanks to Douwe Dijkstra # uncomment next two lines and comment out the ones below # textmsg="MAIL #QUIT" # For now the old way textmsg="QUIT" ;; *) textmsg="DONTUSEARGS" ;; esac # echo "TESTING SERVICE $SVC" # if "" don't send any argument, use bbnet default RC=0 if [ "$textmsg" != "DONTUSEARGS" ] then if [ "$TESTREVERSED" != "TRUE" -a "$SVCDIALUP" != "TRUE" -a "$DIALUP" != "TRUE" ] then OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTSTRING}:${SVC}" "$textmsg"` RC=$? else OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTSTRING}:${SVC}" "$textmsg" 2>/dev/null` RC=$? fi else if [ "$TESTREVERSED" != "TRUE" -a "$SVCDIALUP" != "TRUE" -a "$DIALUP" != "TRUE" ] then OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTSTRING}:${SVC}" ` RC=$? else OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTSTRING}:${SVC}" 2>/dev/null` RC=$? fi fi # # SMM - 1.09d # SUPPORT SERVICES EVEN WHEN THEY'RE NOT IN THE DNS # if test "$RC" = "1" -a "$HOSTSTRING" = "$FULLNAME" # HOST NOT FOUND... TRY IP... then if [ "$textmsg" != "DONTUSEARGS" ] then if [ "$TESTREVERSED" != "TRUE" -a "$SVCDIALUP" != "TRUE" -a "$DIALUP" != "TRUE" ] then OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTIP}:${SVC}" "$textmsg" ` RC=$? else OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTIP}:${SVC}" "$textmsg" 2>/dev/null` RC=$? fi else if [ "$TESTREVERSED" != "TRUE" -a "$SVCDIALUP" != "TRUE" -a "$DIALUP" != "TRUE" ] then OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTIP}:${SVC}" ` RC=$? else OUTPUT=`$BBHOME/bin/bbnet $bbnetargs "${HOSTIP}:${SVC}" 2>/dev/null` RC=$? fi fi OUTPUT="$OUTPUT *** Note: $FULLNAME not found in DNS... Tested using IP addr directly..." fi # Check if service must NOT be running if [ "$TESTREVERSED" = "TRUE" ] then if [ "$RC" -ne 0 ] then RC=0 else RC=1 fi fi if test "$RC" != "0" then # echo "SERVICE IS BROKEN" # # IF IT'S BROKEN, THEN SCREAM IF WE HAVE TO # if [ "$TESTREVERSED" = "TRUE" ] then LINE="SERVER - $SVCNAME UP" else LINE="SERVER - $SVCNAME DOWN" fi # Set the individual dialup tests (? flag) to clear # Fake a failed conn test OLD_CONN_TEST_FAILED=$CONN_TEST_FAILED if [ "$SVCDIALUP" = "TRUE" ] then CONN_TEST_FAILED=TRUE OFFLINE="(service offline)" else OFFLINE="(host offline)" fi # # NO MORE RED DOTS FOR DIALUP NETWORK STUFF # WHEN THE CONNECTION TEST FAILED # TESTREVERSED WILL ALWAYS YIELD YELLOW/RED HAS THE TEST REALLY CONNECTED ... # SET_TO_CLEAR="FALSE" if [ "$IPTEST_2_CLEAR_ON_FAILED_CONN" = "TRUE" -a "$REVERSE_IP_CLEAR" != "TRUE" ] then SET_TO_CLEAR="TRUE" elif [ "$IPTEST_2_CLEAR_ON_FAILED_CONN" = "FALSE" -a "$REVERSE_IP_CLEAR" = "TRUE" ] then SET_TO_CLEAR="TRUE" fi if [ "$CONN_TEST_FAILED" = "TRUE" -a "$TESTREVERSED" != "TRUE" -a "$SET_TO_CLEAR" = "TRUE" ] then COLOR="clear" LINE="$LINE $OFFLINE" else # # SMM NEW IN 1.07b # CORRECT TEST FOR NETWORK SERVICE PAGING # THANKS TO: Patrick Hopewell # echo "$NONETPAGE" | $GREP "$SVCNAME" > /dev/null 2>&1 if test $? = "1" # NOT FOUND - PAGE then COLOR="red" else COLOR="yellow" LINE="$LINE - configured not to page" fi fi CONN_TEST_FAILED=$OLD_CONN_TEST_FAILED else COLOR="green" if [ "$TESTREVERSED" = "TRUE" ] then LINE="$SVCNAME OK: SERVICE IS NOT RUNNING" else LINE="$SVCNAME OK: $OUTPUT" fi # echo $OUTPUT fi #$BB $BBDISP "status ${MACHINE}.${SVCNAME} $COLOR `date` $LINE" $BBHOME/bin/bb-combo.sh add "status ${MACHINE}.${SVCNAME} $COLOR `date` $LINE" ;; # NEW IN 1.6 - A TEST FOR BB ITSELF # USEFUL FOR MULTIPLE INSTANCES bbd ) # echo "looking for bbd server" if test "$HOSTIP" = "0.0.0.0" # SMM 1.10 DDNS then $BB ${FULLNAME} "dummy" > /dev/null else $BB ${HOSTIP} "dummy" > /dev/null fi if test "$?" != "0" then LINE="BBD Server on ${FULLNAME} down" echo "$NONETPAGE" | $GREP "bbd" > /dev/null 2>&1 if test $? = "1" # NOT FOUND - PAGE then COLOR="red" else COLOR="yellow" LINE="$LINE - configured not to page" fi else COLOR="green" LINE="BBD Server OK" fi #$BB $BBDISP "status ${MACHINE}.$arg $COLOR `date` $LINE" $BBHOME/bin/bb-combo.sh add "status ${MACHINE}.$arg $COLOR `date` $LINE" ;; # # NEW IN 1.06C # DNS TESTING FROM Frank T. Kujawski # dns | dig ) # echo "looking for domain server" if [ "$arg" = "dns" ] then if test "$HOSTIP" = "0.0.0.0" # SMM 1.10 DDNS then RCSTR=`$NSLOOKUP ${FULLNAME} ${FULLNAME} 2>&1` else RCSTR=`$NSLOOKUP ${FULLNAME} ${HOSTIP} 2>&1` fi RC="$?" # Sometimes nslookup will return 0 even on failure # Mostly in new versions of bind if [ "$RC" -eq 0 ] then echo "$RCSTR" | $GREP -i "can't find" >/dev/null 2>&1 if [ "$?" -eq 0 ] then RC=1 fi fi else if test "$HOSTIP" = "0.0.0.0" # SMM 1.10 DDNS then RCSTR=`$DIG @${FULLNAME} ${FULLNAME} 2>&1` else RCSTR=`$DIG @${HOSTIP} ${FULLNAME} 2>&1` fi RC="$?" # Sometimes nslookup will return 0 even on failure # Mostly in new versions of bind if [ "$RC" -eq 0 ] then echo "$RCSTR" | $GREP -i "Bad server" >/dev/null 2>&1 if [ "$?" -eq 0 ] then RC=1 fi fi # Look for the status of the query in the # returned string if [ "$RC" -eq 0 ] then # Query was successful only if status = NOERROR RC=1 set $RCSTR while [ "$#" -gt 0 ] do arg1=`echo "$1" | $SED 's/[^a-zA-Z:]//g' 2>/dev/null` if [ "$arg1" = "status:" -o "$arg1" = "Status:" ] then arg2=`echo "$2" | $SED 's/[^a-zA-Z:]//g' 2>/dev/null` if [ "$#" -gt 1 -a "$arg2" = "NOERROR" ] then RC=0 fi break fi shift done fi fi if test "$RC" != "0" then LINE="DNS Server on ${FULLNAME} down" # IT HELPS TO SEARCH FOR THE RIGHT SERVICE! # Takahiro Yugawa if [ "$arg" = "dns" ] then echo "$NONETPAGE" | $GREP "dns" > /dev/null 2>&1 else echo "$NONETPAGE" | $GREP "dig" > /dev/null 2>&1 fi if test $? = "1" # NOT FOUND - PAGE then COLOR="red" else COLOR="yellow" LINE="$LINE - configured not to page" fi else COLOR="green" LINE="DNS Server OK" fi #$BB $BBDISP "status ${MACHINE}.$arg $COLOR `date` $LINE" $BBHOME/bin/bb-combo.sh add "status ${MACHINE}.$arg $COLOR `date` $LINE" ;; # # SMM 1.2c - SUPPORT FOR https TESTING (finally) # http* ) # echo "DOING HTTP/HTTPS TEST..." newarg=`echo "$arg" | $SED 's/|http/ http/g'` set $newarg URLS=$* COLOR="green" LINE="" for URL in $URLS do echo "$URL" | $GREP "^https" > /dev/null 2>&1 if test "$?" = "0" # USE LYNX FOR SECURE TESTING then HTTP="https" # echo "USING LYNX TO TEST $URL " $LYNX "$URL" > $BBTMP/HTTP.$$ 2>&1 else HTTP="http" # echo "USING BBNET TO TEST $URL " $BBHOME/bin/bbnet "$URL" > $BBTMP/HTTP.$$ fi if test "$?" != 0 then TMPLINE="$URL - No connection `cat $BBTMP/HTTP.$$` " echo "$NONETPAGE" | $GREP "http" > /dev/null 2>&1 if test $? = "1" # NOT FOUND - PAGE then echo "$line" | $GREP "[^ ]*[ ]*[^ ]*[ ]*dialup" > /dev/null 2>&1 if test $? = "0" then if [ "$COLOR" = "green" ] then COLOR="yellow" fi LINE="${LINE} &yellow $TMPLINE (no page on dialup)" else COLOR="red" LINE="${LINE} &red $TMPLINE" fi else if [ "$COLOR" = "green" ] then COLOR="yellow" fi LINE="${LINE} &yellow $TMPLINE (configured not to page)" fi else # # CHECK FOR A SERVER ERROR HIDING HERE... CHECK FOR IT # # # THANKS TO: Douwe Dijkstra # Version 1.04b # read HTTPVER RC STATUSMESSAGE < $BBTMP/HTTP.$$ # GET RID OF CRAP IN RC JUST IN CASE # Thanks to Marc.Pohl@wwf-gruppe.de RC=`echo "$RC" | $SED 's/[^0-9]//g'` case $RC in '200'|'401'|'301'|'302') TMPCOLOR="green" TMPLINE="Server OK" ;; '400'|'403'|'404') COLOR="red" TMPCOLOR="red" TMPLINE="Trouble getting page" ;; # From Christian.Perrier@onera.fr '500'|'501'|'503') COLOR="red" TMPCOLOR="red" TMPLINE="Server Error" ;; *) if [ "$COLOR" = "green" ] then COLOR="yellow" fi TMPCOLOR="yellow" TMPLINE="Server **NOT** OK" ;; esac # # SMM 1.07c - SEND http HEADERS ALONG # LINE="${LINE} &$TMPCOLOR $URL - $TMPLINE `cat $BBTMP/HTTP.$$` " fi done $RM -f $BBTMP/HTTP.$$ #$BB $BBDISP "status ${MACHINE}.http $COLOR `date` $LINE" $BBHOME/bin/bb-combo.sh add "status ${MACHINE}.http $COLOR `date` $LINE" ;; \# | BBPAGER | BBDISPLAY | BBNET | dialup | noping | testip ) # These tags do nothing here ;; * ) # At one point this message will be enabled # NOPE, the directives will probably for external tests # echo "Invalid bb-hosts directive: $1" ;; esac set $line # RESTORE... shift; # GET NEXT ARGUMENT done done $BBHOME/bin/bb-combo.sh end $RM -f $BBNETHOSTS exit 0 ./bb/bb19c/bin/sendmsg0100755002342100007640000001004507616533071012400 0ustar bbbb#!/bin/sh # # sendmsg # Version 1.7b # Mar 20th, 2001 # # kermit paging script # SMM - moved Jacob's stuff here, 'cause real shells have no functions! # RAC - Delete temp file here # # Code by Jacob Lundqvist jaclu@ibk.se # # Updated 97-01-11 # # Modification by Robert-Andre Croteau robert@bb4.com # # Bugs: Mssages can be lost if several processes tries to access kermit # at the same second, I have tried to reduce this risk by # introducing some randomness in the sleeptimes. # However if one sleeps 22, and some other sleep 73 they might # still wake upp at the same second, if thats the case, one or # both messages might get lost. This is hopefully not all that serious, # If the error is still there the next time bb checks, a new message # will be sent, the risk that the same message would be lost twice, # can't be that high... # # A1=$1 # FIRST ARG shift; A2="$*" # ALL THE REST. DON'T ASK. REALLY. if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi #----------------------------------------------------------------------------- # Wait for device to be available #----------------------------------------------------------------------------- # Get the available devices TTYLINE=`$GREP "^ttyline:" $BBHOME/etc/bbwarnsetup.cfg 2>/dev/null` if [ "$?" -ne 0 ] then echo "ttyline token was not setup in bbwarnsetup.cfg" echo "Numeric paging will not work" exit 1 else set $TTYLINE >/dev/null 2>&1 if [ "$#" -eq 1 ] then echo "ttyline token does not have an entry in bbwarnsetup.cfg" echo "Numeric paging will not work" exit 1 else shift # remove token from line TTYLINE="" for ttyline in $* do if [ -c "$ttyline" ] then TTYLINE="$TTYLINE $ttyline" fi done if [ "$TTYLINE" = "" ] then echo "ttyline token does not have a valid entry in bbwarnsetup.cfg" echo "Numeric paging will not work" exit 1 fi fi fi # Get the pagemaster users PAGEMASTER=`$GREP "^pagemaster:" $BBHOME/etc/bbwarnsetup.cfg 2>/dev/null` if [ "$?" -eq 0 ] then set $PAGEMASTER >/dev/null 2>&1 PAGEMASTER="" if [ "$#" -gt 1 ] then shift # remove pagemaster token from line PAGEMASTER="$*" fi fi # # To separate page-requests arriving the same second, # we give sleep-times depending on PID # I=`$EXPR $$ % 10` # last digit of PID SLEEPTIME=`$EXPR $I + 1` # plus 1 second MAXSLEEPS=`$EXPR 60 / $SLEEPTIME + 2` # # always do one sleep, to separate processes # starting same second in time # # echo initial sleep of:$SLEEPTIME sleep $SLEEPTIME foundtty=FALSE while [ "$foundtty" = "FALSE" ] do for ttyline in $TTYLINE do TTYDEV=`echo "$ttyline" | $SED "s/\/dev\///"` if test -f ${LOCKPREFIX}${TTYDEV} || test -f ${PAGINGLOCK}_${TTYDEV} then # echo "page: line busy, sleeping $SLEEPTIME" sleep $SLEEPTIME MAXSLEEPS=`$EXPR $MAXSLEEPS - 1` if [ "$MAXSLEEPS" -lt 0 ] then if [ "$PAGEMASTER" != "" ] then echo "Couldn't send page, locks weren't freed: $A1 $ttyline $A2" | $MAIL "BB Pager problem" $PAGEMASTER fi echo "Couldn't send page, locks weren't freed: $A1 $ttyline $A2" exit 1 fi # Try next modem line in TTYLINE else foundtty=TRUE break; fi done done $BBHOME/bin/touchtime ${PAGINGLOCK}_${TTYDEV} # prevent race-conditions #----------------------------------------------------------------------------- # Send a message using a kermit script, multiple attempts #----------------------------------------------------------------------------- # I=1 while test $I -le 10 do # echo "page; trying to send, attempt: $I" I=`$EXPR $I + 1` $KERMIT $A1 $ttyline $A2 > /dev/null if test "$?" = "0" then I=999 # make sure loop ends... fi done $RM -f ${PAGINGLOCK}_${TTYDEV} # Debuging... # if test "$I" = "999" # then # echo "msg delivered" # else # echo "msg failed" # fi if [ "$I" -ne 999 ] then exit 1 else exit 0 fi ./bb/bb19c/bin/bb-display.sh0100755002342100007640000000110007616533071013367 0ustar bbbb#!/bin/sh # bb-display.sh # # BIG BROTHER NETWORK MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # CREATE THE BIG BROTHER WEB PAGES # echo "*** MAKING WEB PAGES ***" $BBHOME/web/mkbb.sh > ${BBTMP}/BB.$$ # MAKE BB PAGE mv ${BBTMP}/BB.$$ $BBHOME/www/bb.html # MOVE IT IN $BBHOME/web/mkbb2.sh > ${BBTMP}/BB.$$ # MAKE QUICK VIEW mv ${BBTMP}/BB.$$ $BBHOME/www/bb2.html # MOVE IT IN if [ "$WML_OUTPUT" = "TRUE" ] then $BBHOME/web/mkbbwml.sh # MAKE WML VIEW fi ./bb/bb19c/bin/getipaddr.sh0100755002342100007640000000346207616533071013321 0ustar bbbb#!/bin/sh # # bbgetipaddr.sh # # BIG BROTHER script to retrieve IP address from bb-hosts file # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Get the associated IP address with the host name # # Usage: bbgetipaddr.sh # # argument: hostname must be in the form xxx.yyy.zzz # if [ "$#" -ne 1 ] then exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi HOSTNAME="$1" # Are we using Fully Qualified Domain Naming (FQDN) ? if [ "$FQDN" = TRUE ] then # Try with bb-hosts lines comprised of only IP address and host name FQDNLINE=`$GREP "[ ]${HOSTNAME}$" $BBHOSTS | $GREP "^[0-9]" 2>/dev/null` if [ "$?" -ne 0 ] then # Try with bb-hosts lines comprised of of more than only IP address and host name FQDNLINE=`$GREP "[ ]${HOSTNAME}[ ]" $BBHOSTS | $GREP "^[0-9]" 2>/dev/null` fi else OLDIFS=$IFS IFS='.' set $HOSTNAME IFS=$OLDIFS HOSTNAME=$1 # Try with bb-hosts lines comprised of only IP address and host name FQDNLINE=`$GREP "[ ]${HOSTNAME}$" $BBHOSTS | $GREP -v "^[0-9]" 2>/dev/null` if [ "$?" -ne 0 ] then # Try with bb-hosts lines comprised of of more than only IP address and host name FQDNLINE=`$GREP "[ ]${HOSTNAME}[\. ]" $BBHOSTS | $GREP -v "^[0-9]" 2>/dev/null` fi fi # Do we have a match ? if [ "$FQDNLINE" != "" ] then # Yes, then retrieve IP address # Hummm, what happens if FQDNLINE is more than a single entry in bb-hosts ? can it ? OLDIFS=$IFS IFS=' ' set $FQDNLINE >/dev/null 2>&1 IFS=$OLDIFS # If set was successful and at least 2 args we defined (which should always be the case) if [ "$?" -eq 0 -a "$#" -gt 1 ] then echo "$1" exit 0 fi fi # Made it this far, then no good exit 1 ./bb/bb19c/bin/bb-local.sh0100755002342100007640000000475107616533071013033 0ustar bbbb#!/bin/sh # bb-local.sh # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # For each system we monitor we watch # disk USES df # cpu USES uptime # msgs LOOKS FOR WARNINGS # procs CHECKS A LIST # # For the network we care about # telnet USES telnet and checks the results # http USES lynx to check for valid output # # THEN SEND THE RESULTS TO THE DISPLAY SERVER USING bb # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # Setup the name of the local host # Save a version of the machine name with '.' instead of ',', if any are there MACHINEDOTS=`echo $MACHINE | $SED 's/,/\./g'` if [ "$FQDN" != "TRUE" ] then OLDIFS=$IFS IFS='.' set $MACHINEDOTS >/dev/null IFS=$OLDIFS MACHINEMASK="${1}" else MACHINEMASK="${MACHINEDOTS}" fi export MACHINEDOTS MACHINEMASK BBCOMBOID="$$" export BBCOMBOID $BBHOME/bin/bb-combo.sh start if [ "$DODISK" = TRUE ] then . $BBHOME/bin/bb-disk.sh # THE DISK TEST else # Do we still send out a dummy message ? # If NODISKCOLOR is not empty then use the contents as # the color of the message if [ "$NODISKCOLOR" != "" ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.disk $NODISKCOLOR `date` Disk test disabled" fi fi if [ "$DOCPU" = TRUE ] then . $BBHOME/bin/bb-cpu.sh # THE CPU TEST else # Do we still send out a dummy message ? # If NOCPUCOLOR is not empty then use the contents as # the color of the message if [ "$NOCPUCOLOR" != "" ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.cpu $NOCPUCOLOR `date` Cpu test disabled" fi fi if [ "$DOMSGS" = TRUE ] then . $BBHOME/bin/bb-msgs.sh # THE MESSAGES TEST else # Do we still send out a dummy message ? # If NOMSGSCOLOR is not empty then use the contents as # the color of the message if [ "$NOMSGSCOLOR" != "" ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.msgs $NOMSGSCOLOR `date` Msgs test disabled" fi fi if [ "$DOPROCS" = TRUE ] then . $BBHOME/bin/bb-procs.sh # THE PROCESSES TEST else # Do we still send out a dummy message ? # If NOPROCSCOLOR is not empty then use the contents as # the color of the message if [ "$NOPROCSCOLOR" != "" ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.procs $NOPROCSCOLOR `date` Procs test disabled" fi fi $BBHOME/bin/bb-combo.sh end ./bb/bb19c/bin/bb-cpu.sh0100755002342100007640000001305507616533071012525 0ustar bbbb#!/bin/sh # bb-cpu.sh # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! "$MACHINEDOTS" # THIS SHOULD ALREADY BE SET... then # Setup the name of the local host # Save a version of the machine name with '.' # instead of ',', if any are there MACHINEDOTS=`echo $MACHINE | $SED 's/,/\./g'` if [ "$FQDN" != "TRUE" ] then OLDIFS=$IFS IFS='.' set $MACHINEDOTS >/dev/null IFS=$OLDIFS MACHINEMASK="${1}" else MACHINEMASK="${MACHINEDOTS}" fi export MACHINEDOTS MACHINEMASK fi #===================================================================== # CPU TEST AND UPTIME WARNINGS # AUTOMATIC WARNING IF THE SYSTEM IS UP FOR LESS THAN 1 HOUR #===================================================================== # # echo "*** CPU TEST ***" if [ -f "$BBHOME/etc/bb-cputab" ] then # a line can start with # :.... # :.... # localhost:... # www:.... # www.bb4.com:... # # All mask should allow for spaces/tabs before : # Grep for each mask $RM -f $BBTMP/BBCPU.$$ for mask in "[ ]*${MACHINEMASK}[ ]*:" "[ ]*${MACHINEMASK}\..*:" "[ ]*localhost[ ]*:" "[ ]*:" do # Save values in FILE # Stop on 1st match $GREP "^${mask}" $BBHOME/etc/bb-cputab | $HEAD -1 >>$BBTMP/BBCPU.$$ 2>/dev/null if [ -s $BBTMP/BBCPU.$$ ] then break fi done # If any line matched then process if [ -s $BBTMP/BBCPU.$$ ] then # If any ":" are found, force spaces around it to # make Solaris happy :( # Thanks to Larry Parmelee cpuline=`$CAT "$BBTMP/BBCPU.$$" | $SED 's/:/ : /g' 2>/dev/null` OLDIFS=$IFS IFS=':' set $cpuline 2>/dev/null IFS=$OLDIFS if [ $# -eq 4 ] then # Get rid of spaces ARG2=`echo $2` ARG3=`echo $3` ARG4=`echo $4` # Do we need to reset BBTOOMANYDAYSUP ? daysup=`echo $ARG2 | $GREP daysup | $SED 's/daysup=//g' | $SED 's/[^0-9]//g'` if [ "$daysup" != "" ] then BBTOOMANYDAYSUP=$daysup fi # Get CPUWARN / CPUPANIC values WARN=`echo "$ARG3" | $SED 's/[^0-9]//g' 2>/dev/null` PANIC=`echo "$ARG4" | $SED 's/[^0-9]//g' 2>/dev/null` if [ "$ARG3" != "$WARN" -o "$ARG4" != "$PANIC" ] then echo "`$DATE` bb-cpu.sh Invalid WARN/PANIC entry: $cpuline" else CPUWARN=$WARN CPUPANIC=$PANIC fi else echo "`$DATE` bb-cpu.sh Invalid config line: $cpuline" fi fi $RM -f $BBTMP/BBCPU.$$ fi set `$UPTIME` echo $3 | $GREP "," > /dev/null 2>&1 if test "$?" = 0 then UP=`echo $3 | $SED "s/,//"` UPVAL="-1" else UP=`echo $3 $4 | $SED "s/,//"` UPVAL="$3" fi shift;shift;shift;shift; ARG=`$EXPR $# - 2` # 5 MINUTE LOAD AVERAGE COUNT=1 while test "$COUNT" -le "$ARG" do shift; COUNT=`$EXPR $COUNT + 1` done # DISPLAY REAL LOAD AVG IF REQUESTED # FROM A SUGGESTION BY adam@wesolveit.com.au REALAVG=`echo $1 | $SED "s/\,//g"` AVG=`echo $REALAVG | $SED "s/\.//" ` AVG=`$EXPR $AVG + 0` # echo "LOAD AVERAGE: $AVG" if [ "$DISPREALLOADAVG" = "TRUE" ] then DISPAVG=$REALAVG else DISPAVG=$AVG fi LINE="LOAD AVG on $MACHINE is ${DISPAVG}" if test "$AVG" -ge "$CPUPANIC" then COLOR="red" elif test "$AVG" -ge "$CPUWARN" then COLOR="yellow" else COLOR="green" fi # echo "*** PS COMMAND $PS ***" $PS > $BBTMP/bb.$$ # GET A PS LISTING P=`$CAT $BBTMP/bb.$$ | $WC` # NUMBER OF PROCESSES P=`echo $P` U=`$WHO | $WC` # GET NUMBER OF USERS U=`echo $U` # # AUTOMATIC WARNING IF A SYSTEM HAS BEEN UP LESS THAN AN HOUR # THIS WILL HELP US NOTICE SPONTANEOUS REBOOTS! # # Mark yellow only if non red already # Thanks to jim LINE1="" echo $UP | $GREP "min" > /dev/null 2>&1 if test "$?" = "0" then if [ "$UPVAL" -gt -1 -a "$UPVAL" -le "$WARNMINSONREBOOT" ] then case "$WARNCOLORONREBOOT" in [Rr][Ee][Dd] ) COLOR=red ;; [Yy][Ee][Ll][Ll][Oo][Ww] ) if [ "$COLOR" != "red" ] then COLOR=yellow fi ;; # disregard any other color esac LINE1=" Warning: Machine recently rebooted" fi fi # # HAS THIS MACHINE BEEN UP SO LONG IT NEEDS TO BE REBOOTED? # IF NOT NECESSARY, DON'T SET BBTOOMANYDAYSUP IN bbdef.sh # Thanks to jim LINE2="" if test -n "$BBTOOMANYDAYSUP" then echo $UP | $GREP "day" > /dev/null 2>&1 if test "$?" = "0" then NUMDAYS="$UPVAL" if [ "$NUMDAYS" -ge 0 -a "$NUMDAYS" -gt "$BBTOOMANYDAYSUP" ] then if test "$COLOR" != "red" then COLOR="yellow" fi LINE2=" Warning: This machine has been up for $NUMDAYS days, which is greater than $BBTOOMANYDAYSUP, the number of days (BBTOOMANYDAYSUP) you have specified as when a machine should be rebooted." fi fi fi set bogus $TOP >/dev/null 2>&1 shift if test -x "$1" then unset TOP # SIDESTEP DUMB TOP PROB ON SUN $1 $TOPARGS > $BBTMP/TOP.$$ if [ "$?" -ne 0 ] then echo $LINE > $BBTMP/TOP.$$ else if test -f "$BBTMP/TOP" then $MV $BBTMP/TOP $BBTMP/TOP.$$ fi fi else echo $LINE > $BBTMP/TOP.$$ fi # # NOW SEND THIS INFORMATION TO THE BIG BROTHER DISPLAY UNIT # $BBHOME/bin/bb-combo.sh add "status $MACHINE.cpu $COLOR `date` up: $UP, $U users, $P procs, load=${DISPAVG} $LINE1 $LINE2 `cat $BBTMP/TOP.$$` " $RM -f $BBTMP/TOP.$$ $RM -f $BBTMP/bb.$$ ./bb/bb19c/bin/bb-disk.sh0100755002342100007640000001433507616533071012672 0ustar bbbb#!/bin/sh # bb-disk.sh # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # For each system we monitor we watch # disk USES df # cpu USES uptime # procs CHECKS A LIST # msgs LOOKS FOR WARNINGS # # For the network we care about # telnet USES telnet and checks the results # http USES lynx to check for valid output # # THEN SEND THE RESULTS TO THE DISPLAY SERVER USING bb # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! "$MACHINEDOTS" # THIS SHOULD ALREADY BE SET... then # Setup the name of the local host # Save a version of the machine name with '.' # instead of ',', if any are there MACHINEDOTS=`echo $MACHINE | $SED 's/,/\./g'` if [ "$FQDN" != "TRUE" ] then OLDIFS=$IFS IFS='.' set $MACHINEDOTS >/dev/null IFS=$OLDIFS MACHINEMASK="${1}" else MACHINEMASK="${MACHINEDOTS}" fi export MACHINEDOTS MACHINEMASK fi # #===================================================================== # DISK TEST #===================================================================== # # echo "*** DISK TEST 1 ***" COLOR="green" REDLINE="" YELLOWLINE="" eval "$DFCMD | $EGREP \"$DFUSE\" | $EGREP -v \"$DFEXCLUDE\" | $SORT \"+${DFSORT}\" > $BBTMP/DFOUT.$$" if [ ! -f $BBTMP/DFOUT.$$ ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.disk red `date` - BB cannot create $BBTMP/DFOUT.$$ (permissions problem ?)" elif [ ! -r $BBTMP/DFOUT.$$ ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.disk red `date` - BB cannot read $BBTMP/DFOUT.$$" elif [ ! -w $BBTMP/DFOUT.$$ ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.disk red `date` - BB cannot write to $BBTMP/DFOUT.$$" elif [ ! -s $BBTMP/DFOUT.$$ ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.disk red `date` - Filesystem of $BBTMP is FULL" else wclen1=`eval "$DFCMD | $EGREP \"$DFUSE\" | $EGREP -v \"$DFEXCLUDE\" | $SORT \"+${DFSORT}\" | $WC"` wclen2=`$CAT $BBTMP/DFOUT.$$ | $WC` if [ "$wclen1" -ne "$wclen2" ] then $BBHOME/bin/bb-combo.sh add "status $MACHINE.disk red `date` - Filesystem of $BBTMP might be FULL" else $CAT $BBTMP/DFOUT.$$ | { while read line do set $line DISKNAME=$6 DISKDEV=$1 DISKPCT=`echo $5 | $SED "s/%//"` # echo "*** DISK TEST 2 ***" # # SUPPORT FOR NON-STANDARD df'S # Richard Dansereau # Thanks to Thomas Alex # case "$BBOSTYPE" in sco3) DISKNAME=$1 DISKPCT=`echo $6 | $SED "s/%//"` DISKDEV=$7 # Is this true ? ;; irix) # Thanks to: David Brandon # and Jeff Younker - jeff@mdli.com DISKNAME=$7 DISKPCT=`echo $6 | $SED "s/%//"` ;; esac # echo "$DISKNAME $DISKPCT" DFWARNVAL=$DFWARN # USE DEFAULT WARN VALUE DFPANICVAL=$DFPANIC # USE DEFAULT PANIC VALUE # # NEW IN 1.08a # Robert Andre Croteau's custom disk file # IF WE HAVE A CUSTOM PARTITION FILE, USE IT. # DEFAULTS TO etc/bb-dftab # FORMAT: partition:warn%:panic% # I.E.: /usr:96:99 # # multihost bb-dftab based on an idea of Jeff Younker if test -f "${BBDFTAB}" then # File format: [host:]partition:WARN:PANIC # Set precedence levels, suggested by Larry Parmelee # Check for the partition without the leading host # echo "*** CHECKING FOR PARTITION $DISKNAME IN $BBDFTAB" # If highest precedence if host is defined DISKLINE=`$GREP "^${MACHINEMASK}[ ]*:[ ]*${DISKNAME}[ ]*:" $BBDFTAB` # echo "*** DISKLINE: $DISKLINE" if test "$DISKLINE" = "" then DISKLINE=`$GREP "^${MACHINEMASK}\..*:[ ]*${DISKNAME}[ ]*:" $BBDFTAB` fi # Then look for localhost: if test "$DISKLINE" = "" then DISKLINE=`$GREP "^localhost[ ]*:[ ]*${DISKNAME}[ ]*:" $BBDFTAB` fi # Then look for a line that starts with : (equivalent of localhost:) if test "$DISKLINE" = "" then DISKLINE=`$GREP "^[ ]*:[ ]*${DISKNAME}[ ]*:" $BBDFTAB` if test "$DISKLINE" != "" then DISKLINE="localhost${DISKLINE}" fi fi # Finally look for a line that starts with the filesystem if test "$DISKLINE" = "" then DISKLINE=`$GREP "^[ ]*${DISKNAME}[ ]*:" $BBDFTAB` # echo "*** DISKLINE: $DISKLINE" if test "$DISKLINE" != "" then DISKLINE="localhost:${DISKLINE}" fi fi # We have a match if test "$DISKLINE" != "" then # echo "*** DISKLINE NOT NULL" set `echo $DISKLINE | $SED "s/:/ /g"` DFWARNVAL=$3 # GET CURRENT FS WARNING LEVEL DFPANICVAL=$4 # GET CURRENT FS PANIC LEVEL # echo "*** WARN AT $DFWARNVAL - PANIC AT $DFPANICVAL" fi fi MARK="" if test "$DISKPCT" -ge "$DFWARNVAL" # ABOVE WARNING LEVEL then if test "$DISKPCT" -ge "$DFPANICVAL" # ABOVE PANIC, RED ALERT !!! then COLOR="red" MARK="PANIC" MARKLEVEL=$DFPANICVAL HIGHMARK="PANIC" GIFCOLOR="&red" REDLINE="${GIFCOLOR} ${DISKNAME} (${DISKPCT}%) has reached the defined disk space ${MARK} level (${MARKLEVEL}%) ${REDLINE}" else if test "$COLOR" = "green" # ONLY IF NOT ALREADY SET then COLOR="yellow" HIGHMARK="WARNING" fi MARK="WARNING" MARKLEVEL=$DFWARNVAL GIFCOLOR="&yellow" YELLOWLINE="${GIFCOLOR} ${DISKNAME} (${DISKPCT}%) has reached the defined disk space ${MARK} level (${MARKLEVEL}%) ${YELLOWLINE}" fi fi done # # NOW SEND THIS INFORMATION TO THE BIG BROTHER DISPLAY UNIT # if [ "$COLOR" = "green" ] then LINE="status $MACHINE.disk $COLOR `date` - Disk partitions on $MACHINE OK `cat $BBTMP/DFOUT.$$`" else LINE="status $MACHINE.disk $COLOR `date` - Disk on $MACHINE at $HIGHMARK level ${REDLINE}${YELLOWLINE} `cat $BBTMP/DFOUT.$$`" fi $BBHOME/bin/bb-combo.sh add "$LINE" } fi fi $RM -f $BBTMP/DFOUT.$$ ./bb/bb19c/bin/bb-procs.sh0100755002342100007640000001517007616533071013064 0ustar bbbb#!/bin/sh # bb-procs.sh # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi $PS > $BBTMP/bb.$$ # GET A PS LISTING if test ! "$MACHINEDOTS" # THIS SHOULD ALREADY BE SET... then # Setup the name of the local host # Save a version of the machine name with '.' # instead of ',', if any are there MACHINEDOTS=`echo $MACHINE | $SED 's/,/\./g'` if [ "$FQDN" != "TRUE" ] then OLDIFS=$IFS IFS='.' set $MACHINEDOTS >/dev/null IFS=$OLDIFS MACHINEMASK="${1}" else MACHINEMASK="${MACHINEDOTS}" fi export MACHINEDOTS MACHINEMASK fi #===================================================================== # PROCESSES THAT MUST EXIST #===================================================================== # # echo "*** PROCESSES TEST ***" GREENLINES="" YELLOWLINES="" REDLINES="" STATLINE="No processes to check" COLOR="green" # if bb-proctab override defaults from bbdef.sh # bb-proctab based on an idea of Jeff Younker # Thanks Jeff ! if [ -f "$BBHOME/etc/bb-proctab" ] then # a line can start with # :.... # :.... # localhost:... # www:.... # www.bb4.com:... # # All mask should allow for spaces/tabs before : # Grep for each mask $RM -f $BBTMP/BBPROCS.$$ for mask in "[ ]*:" "[ ]*localhost[ ]*:" "[ ]*${MACHINEMASK}[ ]*:" "[ ]*${MACHINEMASK}\..*:" do # Save procs in FILE procsline=`$GREP "^${mask}" $BBHOME/etc/bb-proctab >>$BBTMP/BBPROCS.$$ 2>/dev/null` done # IF any line matched then process if [ -s $BBTMP/BBPROCS.$$ ] then # Get rid of defaults PROCS="" PAGEPROC="" $RM -f $BBTMP/PROCS.$$ $RM -f $BBTMP/PAGEPROC.$$ cat $BBTMP/BBPROCS.$$ | $SORT -u | while read line do # If any ":" are found, force spaces around it to # make Solaris happy :( # Thanks to Larry Parmelee line=`echo "$line" | $SED 's/:/ : /g'` # line=`echo "$line" | $SED 's/::/: :/g'` OLDIFS=$IFS IFS=':' set bogus $line shift IFS=$OLDIFS # Results are sent to a file because some shells go into a subshell # during a while preceded by a pipe such that variables set within # that while will not be visible after exiting the while. The {} should # not send it within a subshell but I'm wary (especially SUN & DIGITAL) echo " $2 " >> $BBTMP/PROCS.$$ echo " $3 " >> $BBTMP/PAGEPROC.$$ done PROCS=`$CAT $BBTMP/PROCS.$$` PAGEPROC=`$CAT $BBTMP/PAGEPROC.$$` $RM -f $BBTMP/PROCS.$$ $RM -f $BBTMP/PAGEPROC.$$ fi $RM -f $BBTMP/BBPROCS.$$ else PROCS=" ${PROCS} " PAGEPROC=" ${PAGEPROC} " fi # # All this crap is to be able to handle processes specified # with "": snmmpd "syslogd -s" xntpd # The string "syslogd -s" will be matched against the PS output # # The ' ' in the "" construct is replaced with '&_' temporarely # until the string is actually used which is reverted back to ' ' # # That's because a constrcut like "syslogd -s" in BBPROCS would # appear as "syslogd and -s" in the for loop if no substitution # was done: # for proc in $BBPROCS -> would become for proc in "syslogd -s" # but proc instead of being "syslogd -s" there would be 2 proc # iteration: one for "syslogd and the other -s" # # Any clearer ? # # Must inverse !" " to "! " also BBPROCS=`echo $PROCS $PAGEPROC | $SED 's/\![ ]*"/"\!/g'` if [ -n "$BBPROCS" ] then OLDIFS=$IFS IFS='"' set " "$BBPROCS >/dev/null 2>&1 IFS=$OLDIFS BBPROCS="" while [ $# -gt 0 ] do BBPROCS="$BBPROCS $1" if [ $# -gt 1 ] then BBPROCS="$BBPROCS "`echo $2 | $SED 's/ /\&_/g'` shift fi shift done fi for proc in $BBPROCS do OLDIFS=$IFS IFS=";" set bogus $proc 2>/dev/null shift IFS=$OLDIFS proc=$1 if [ "$#" -gt 1 ] then NUMPROCSEXPR=$2 else NUMPROCSEXPR=999999 fi proc=`echo "$proc" | $SED 's/\&_/ /g'` case $proc in *!* ) proc=`echo "$proc" | $SED 's/!//g'` TESTREVERSED=TRUE NUMPROCSEXPR=0 ;; *) TESTREVERSED=FALSE ;; esac # No need to exclude grep from # process list # thanks to Paul Gluhosky # $GREP "$proc" $BBTMP/bb.$$ > $BBTMP/bb-procs.$$ 2>/dev/null if [ -s $BBTMP/bb-procs.$$ ] then NUMPROCS=`$CAT $BBTMP/bb-procs.$$ | $WC` NUMPROCS=`echo $NUMPROCS` else NUMPROCS=0 fi $RM -f $BBTMP/bb-procs.$$ RC=0 ERRMSG1="" if [ "$NUMPROCS" -lt 1 ] then ERRMSG="not running" elif [ "$NUMPROCS" -eq 1 ] then ERRMSG="$NUMPROCS instance running" else ERRMSG="$NUMPROCS instances running" fi # Get the number of procs defined in the expression NUMPROCSVAL=`echo $NUMPROCSEXPR | $SED 's/[^0-9]//g'` case $NUMPROCSEXPR in 999999 ) if [ $NUMPROCS -eq 0 ] then RC=1 fi ERRMSG1="at least 1" ;; [0-9]* | \=[0-9]* ) if [ $NUMPROCS -ne "$NUMPROCSVAL" ] then RC=1 fi ERRMSG1="$NUMPROCSVAL" ;; \<\=[0-9]* | \=\<[0-9]* ) if [ $NUMPROCS -gt "$NUMPROCSVAL" ] then RC=1 fi ERRMSG1="at most $NUMPROCSVAL" ;; \>\=[0-9]* | \=\>[0-9]* ) if [ $NUMPROCS -lt "$NUMPROCSVAL" ] then RC=1 fi ERRMSG1="at least $NUMPROCSVAL" ;; \>[0-9]* ) if [ $NUMPROCS -le "$NUMPROCSVAL" ] then RC=1 fi ERRMSG1="more than $NUMPROCSVAL" ;; \<[0-9]* ) if [ $NUMPROCS -ge "$NUMPROCSVAL" ] then RC=1 fi ERRMSG1="less than $NUMPROCSVAL" ;; * ) ;; esac case $NUMPROCSEXPR in 0 ) DISPEXPR="=0" ;; 999999 ) DISPEXPR=">=1" ;; * ) DISPEXPR="(${NUMPROCSEXPR})" ;; esac if test "$RC" != "0" then STATLINE="Some processes are in error" # # NOW SEE IF THIS IS A PROCESS WE SHOULD NOTIFY ON... # case $NUMPROCSEXPR in 999999 | 0 ) echo "$PAGEPROC" | $GREP "[ \"]$proc[ \"]" > /dev/null 2>&1 ;; * ) echo "$PAGEPROC" | $GREP "[ \"]$proc;$NUMPROCSEXPR[ \"]" > /dev/null 2>&1 ;; esac if test "$?" = "0" then COLOR="red" REDLINES="&red $proc $DISPEXPR - $ERRMSG, requires ${ERRMSG1} $REDLINES" else if test "$COLOR" != "red" # WASN'T A PANIC then COLOR="yellow" # SO JUST WARN fi YELLOWLINES="&yellow $proc $DISPEXPR - $ERRMSG, requires ${ERRMSG1} $YELLOWLINES" fi else if [ "$COLOR" = "green" ] then STATLINE="All processes are OK" fi GREENLINES="&green $proc $DISPEXPR - $ERRMSG $GREENLINES" fi done # # NOW SEND THIS INFORMATION TO THE BIG BROTHER DISPLAY UNIT # $BBHOME/bin/bb-combo.sh add "status $MACHINE.procs $COLOR `date` $STATLINE ${REDLINES}${YELLOWLINES}${GREENLINES}" $RM -f $BBTMP/bb.$$ ./bb/bb19c/bin/bb-ping.sh0100755002342100007640000000266007616533071012673 0ustar bbbb#!/bin/sh # bb-ping.sh # # SIMPLE CONNECTIVITY TEST, TAKES AN IP ADDRESS OR NAME AS ARGUMENT # RETURNS TEXT AND EXITS WITH AN ERROR CODE # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # if test "$#" != "2" then echo "ERROR - WRONG NUMBER OF ARGUMENTS" exit 1 fi PINGHOST=$1 DIALUP=$2 STATUS="Connection OK" TESTCOUNT="1" if [ "$DIALUP" = "TRUE" ] then TESTS=1 # ONLY TRY ONCE FOR dialup HOSTS else TESTS=$PINGTESTS # HOW MANY TIMES DO WE TEST BEFORE FAILING fi while test "$TESTCOUNT" -le "$TESTS" do $PING $PINGPAR1 $PINGHOST $PINGPAR2 2>/dev/null | $SED 's/octet/byte/g' | $GREP -v SO_TIMESTAMP > $BBTMP/BBPING.$$ 2>&1 bytesfrom=`$GREP "bytes from" $BBTMP/BBPING.$$ | $GREP -vi "unreachable" | $GREP -vi "exceeded" | $GREP -vi "prohibited" 2>/dev/null` if [ "$bytesfrom" = "" ] then SLEEPTIME=`expr $TESTCOUNT \* $PINGSLEEPFCT` # Don't sleep on last test if [ "$TESTCOUNT" -lt "$TESTS" ] then #echo "Sleeping for $SLEEPTIME @ $PINGHOST" sleep $SLEEPTIME fi TESTCOUNT=`expr $TESTCOUNT + 1` STATUS="ERROR: Can't connect to $PINGHOST" ERR=1 else if test "$TESTCOUNT" -le "$PINGWARN" then STATUS="Connection OK" else STATUS="WARNING - Connection OK on attempt $TESTCOUNT" fi TESTCOUNT=99 # IT'S OK, WE'RE DONE ERR=0 fi done echo "$STATUS `cat $BBTMP/BBPING.$$`" $RM -f $BBTMP/BBPING.$$ # GET RID OF THE LEFTOVERS exit $ERR ./bb/bb19c/bin/sendsms0100755002342100007640000000156007616533071012416 0ustar bbbb#!/bin/sh # sendsms # sms_client wrapper # By Andrew Dalgleish if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi SMS_CLIENT=/bin/sms_client if [ ! -x "$SMS_CLIENT" ] then echo "SMS_CLIENT not set properly in $BBHOME/bin/sendsms" exit 1 fi #----------------------------------------------------------------------------- # Send a message using sms_client, multiple attempts #----------------------------------------------------------------------------- # I=1 while test $I -le 10 do # echo "page; trying to send, attempt: $I" I=`$EXPR $I + 1` # Make sure the message is wrapped in quotes, else sms_client will send it one word per SMS $SMS_CLIENT "$1" "$2" > /dev/null if test "$?" = "0" then I=999 # make sure loop ends... fi done ./bb/bb19c/bin/bb-msgs.sh0100755002342100007640000002354607616533071012715 0ustar bbbb#!/bin/sh # bb-msgs.sh # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi PID="$$" if test ! "$MACHINEDOTS" # THIS SHOULD ALREADY BE SET... then # Setup the name of the local host # Save a version of the machine name with '.' # instead of ',', if any are there MACHINEDOTS=`echo $MACHINE | $SED 's/,/\./g'` if [ "$FQDN" != "TRUE" ] then OLDIFS=$IFS IFS='.' set $MACHINEDOTS >/dev/null IFS=$OLDIFS MACHINEMASK="${1}" else MACHINEMASK="${MACHINEDOTS}" fi export MACHINEDOTS MACHINEMASK fi #===================================================================== # NOTIFY ON BAD MESSAGES #===================================================================== # # echo "*** MESSAGES TEST ***" # # SET UP EXPIRY INFO # if test ! "$MSGEXPIRE" then MSGEXPIRE="10:20" # EXPIRE WARNINGS IN 10 MIN, PANICS IN 20 fi set `echo $MSGEXPIRE | $SED "s/:/\ /g"` EXPIREWARN="$1" # EXPIRATION IN MINUTES EXPIREPANIC="$2" CHKDATE=`$DATE` # # REMOVE EXPIRED BAD MESSAGES FILES # if [ "$OLDSTYLEBBMSGS" = "TRUE" ] then $RM -f $BBTMP/.expire $BBTMP/MSG.* else $BBHOME/bin/touchtime 0 $BBTMP/.expire $FIND $BBTMP/. -name "MSG*" ! -newer $BBTMP/.expire -exec $RM -f {} \; 2> /dev/null fi # # YOU CAN OVERRIDE VALUES SET IN etc/bbdef.sh # IF THE CURRENT HOST HAS MATCHING ENTRIES IN etc/bb-msgstab # $RM -f $BBTMP/BBMSGS.$PID $BBTMP/BBMSGS.1.$PID $BBTMP/BBMSGS.2.$PID $BBTMP/BBMSGS.3.$PID $BBTMP/BBMSGS.4.$PID if [ -f "$BBMSGSTAB" ] then # a line can start with # :.... # :.... # localhost:... # www:.... # www.bb4.com:... # # All mask should allow for spaces/tabs before : # Grep for each mask for mask in "[ ]*:" "[ ]*localhost[ ]*:" "[ ]*${MACHINEDOTS}[ ]*:" "[ ]*${MACHINEDOTS}\..*:" do # SAVE MATCHING LINES in BBMSGS.$PID bbmsgsline=`$GREP "^${mask}" $BBMSGSTAB >>$BBTMP/BBMSGS.$PID 2>/dev/null` done # IF any line matched then continue if [ -s $BBTMP/BBMSGS.$PID ] then # If any ":" are found, force spaces around it to # make Solaris happy :( # Thanks to Larry Parmelee # Remove the host also (last SED) - Douwe.Dijkstra@I-Pay.com $CAT $BBTMP/BBMSGS.$PID | $SORT -u | $SED 's/:/ : /g' | $SED 's/[^:]*://' | \ while read line do OLDIFS=$IFS IFS=':' set bogus $line 2>/dev/null shift IFS=$OLDIFS # Results are sent to a file because some shells go into a subshell # during a while preceded by a pipe such that variables set within # that while will not be visible after exiting the while. The {} should # not send it within a subshell but I'm wary (especially SUN & DIGITAL) echo "${1} : ${2} : ${3} : ${4} : ${5}" >> $BBTMP/BBMSGS.1.$PID # Save the file names by themselves echo "${1}" >> $BBTMP/BBMSGS.2.$PID done fi $RM -f $BBTMP/BBMSGS.$PID fi # # Build the list of message files # if [ -s $BBTMP/BBMSGS.2.$PID ] then $CAT $BBTMP/BBMSGS.2.$PID | \ while read file do if [ "$file" = "" ] then continue fi set $file while [ "$#" -ge 1 ] do echo $1 >> $BBTMP/BBMSGS.3.$PID shift done done if [ -s $BBTMP/BBMSGS.3.$PID ] then $SORT -u $BBTMP/BBMSGS.3.$PID > $BBTMP/BBMSGS.4.$PID fi $RM -f $BBTMP/BBMSGS.2.$PID $BBTMP/BBMSGS.3.$PID fi if [ -s $BBTMP/BBMSGS.4.$PID ] then # # OK, entries in bb-msgstab overrides bbdef.sh entries # MSGFILE=`$CAT $BBTMP/BBMSGS.4.$PID 2>/dev/null` fi # Use defaults if undefined if [ "$REDMSGSLINES" = "" ] then REDMSGSLINES=20 fi if [ "$YELLOWMSGSLINES" = "" ] then YELLOWMSGSLINES=10 fi BADMSGFILE="" for file in $MSGFILE do MFILE=`echo $file | $SED "s:/:_:g"` if [ ! -f $file ] then echo " &red $file has vanished" >> $BBTMP/MSG.red.file $BBHOME/bin/touchtime $EXPIREPANIC $BBTMP/MSG.red.file elif [ ! -r $file ] # UNREADABLE then echo " &red $file is unreadable" >> $BBTMP/MSG.red.file $BBHOME/bin/touchtime $EXPIREPANIC $BBTMP/MSG.red.file elif test "$CHKMSGLEN" = "TRUE" && test ! -s "$file" then echo " &red $file is empty" >> $BBTMP/MSG.red.file $BBHOME/bin/touchtime $EXPIREPANIC $BBTMP/MSG.red.file BADMSGFILE="$BADMSGFILE $file" else # PROCESS THE FILE NORMALLY $BBHOME/bin/touchtime $EXPIREPANIC $BBTMP/MSG.red.file # echo "Processing $file" if [ -f "$BBTMP/$MFILE" -a "$OLDSTYLEBBMSGS" != "TRUE" ] then LINES=`$CAT $BBTMP/$MFILE` LINES=`echo $LINES` else LINES="0" fi set bogus $WC shift TMPWC=$1 set bogus `$TMPWC -c $file` shift NEWLINES="$1" if test "$NEWLINES" != "$LINES" then echo "$NEWLINES" > $BBTMP/$MFILE if test "$NEWLINES" -lt "$LINES" # ROTATED! then LINES="0" # SO RESET # REMOVE RED/YELLOW TEMP FILES FOR RECENT MESSAGES AS FILE HAS BEEN ROTATED $RM -f $BBTMP/MSG.red.$MFILE.* $BBTMP/MSG.yellow.$MFILE.* else LINES=`expr $LINES + 1` fi # # Are we using MSGS and PAGEMSG values from bb-msgstab ? # if $BBTMP/BBMSGS.4.$PID exists, then we are # if [ -s $BBTMP/BBMSGS.4.$PID ] then MSGS="" PAGEMSG="" IGNMSGS="" $RM -f $BBTMP/BBMSGS.PAGEMSG.$PID $BBTMP/BBMSGS.MSGS.$PID $BBTMP/BBMSGS.IGNMSGS.$PID $TOUCH $BBTMP/BBMSGS.PAGEMSG.$PID $BBTMP/BBMSGS.MSGS.$PID $BBTMP/BBMSGS.IGNMSGS.$PID $GREP "^${file}[ ]*:" $BBTMP/BBMSGS.1.$PID |\ while read line do OLDIFS=$IFS IFS=':' set bogus $line 2>/dev/null shift IFS=$OLDIFS echo "$3;" >> $BBTMP/BBMSGS.MSGS.$PID echo "$4;" >> $BBTMP/BBMSGS.PAGEMSG.$PID echo "$5;" >> $BBTMP/BBMSGS.IGNMSGS.$PID done PAGEMSG=`$CAT $BBTMP/BBMSGS.PAGEMSG.$PID | $GREP -v "^[ ]*;$" | $SORT -u 2>/dev/null` MSGS=`$CAT $BBTMP/BBMSGS.MSGS.$PID | $GREP -v "^[ ]*;$" | $SORT -u 2>/dev/null` # PAGEMSG must be in MSGS MSGS="$PAGEMSG;$MSGS" IGNMSGS=`$CAT $BBTMP/BBMSGS.IGNMSGS.$PID | $GREP -v "^[ ]*;$" | $SORT -u 2>/dev/null` $RM -f $BBTMP/BBMSGS.PAGEMSG.$PID $BBTMP/BBMSGS.MSGS.$PID $BBTMP/BBMSGS.IGNMSGS.$PID # NEW WAY, DELIMITER IS ";" OLDIFS=$IFS IFS=";" else # OLD WAY, DELIMITER IS " " OLDIFS=$IFS fi # NOW CHECK THIS PORTION OF THE MESSAGES FILE FOR # BAD WORDS. IF WE FIND SOME, PUT THEM IN A MSG # TEMP FILE WITH AN EXPIRATION DATE set -f $RM -f $BBTMP/MSG.red.$PID.1 $BBTMP/MSG.yellow.$PID.1 $BBTMP/MSG.regex.checked.$PID for word in $MSGS do IFS=$OLDIFS word="`echo $word | $SED 's/^[ ]*//g' | $SED 's/[ ]*$//g'`" set +f if [ "$word" = "" ] then continue fi # Don't test twice for the same regular expression if [ -f $BBTMP/MSG.regex.checked.$PID ] then match="`$GREP \"$word\" $BBTMP/MSG.regex.checked.$PID 2>/dev/null`" if [ "$match" = "$word" ] then continue fi fi echo "$word" >> $BBTMP/MSG.regex.checked.$PID echo "$PAGEMSG" | $GREP "$word" > /dev/null 2>&1 if test "$?" = "0" then MBAD="$BBTMP/MSG.red.$PID.1" else MBAD="$BBTMP/MSG.yellow.$PID.1" fi # Scan only the required lines in the log file $RM -f $BBTMP/MSG.tail.$PID $TAIL +${LINES}c $file 2>$BBTMP/MSG.tail.$PID | $GREP "$word" >> $MBAD # Did tail +c fail ? if so , try tail -c if [ -s $BBTMP/MSG.tail.$PID ] then $TAIL -c +${LINES} $file 2>$BBTMP/MSG.tail.$PID | $GREP "$word" >> $MBAD fi $RM -f $BBTMP/MSG.tail.$PID # NOW GET RID OF ANY MESSAGES TO IGNORE if [ -s $MBAD ] then OLDIFS1=$IFS IFS=";" for ignmsg in $IGNMSGS do IFS=$OLDIFS set -f ignmsg="`echo $ignmsg | $SED 's/^[ ]*//g' | $SED 's/[ ]*$//g'`" set +f if [ "$ignmsg" = "" ] then continue fi # Save in a file to keep new lines $GREP -v "$ignmsg" $MBAD > ${MBAD}.tmp $MV ${MBAD}.tmp ${MBAD} done IFS=$OLDIFS1 fi done $RM -f $BBTMP/MSG.regex.checked.$PID set +f IFS=$OLDIFS # # Put filename & color on its own line # if [ -s $BBTMP/MSG.red.$PID.1 ] then echo " &red $file (scanned at $CHKDATE)" >> $BBTMP/MSG.red.$MFILE.$PID $CAT $BBTMP/MSG.red.$PID.1 | $TAIL -$REDMSGSLINES >> $BBTMP/MSG.red.$MFILE.$PID $BBHOME/bin/touchtime $EXPIREPANIC $BBTMP/MSG.red.$MFILE.$PID fi if [ -s $BBTMP/MSG.yellow.$PID.1 ] then echo " &yellow $file (scanned at $CHKDATE)" >> $BBTMP/MSG.yellow.$MFILE.$PID $CAT $BBTMP/MSG.yellow.$PID.1 | $TAIL -$YELLOWMSGSLINES >> $BBTMP/MSG.yellow.$MFILE.$PID $BBHOME/bin/touchtime $EXPIREWARN $BBTMP/MSG.yellow.$MFILE.$PID fi $RM -f $BBTMP/MSG.red.$PID.1 $BBTMP/MSG.yellow.$PID.1 fi fi done $RM -f $BBTMP/BBMSGS.1.$PID $BBTMP/BBMSGS.4.$PID COLOR="green" MSGLINE="All message files OK" # Return the most recent red messages redfiles=`$LS -t $BBTMP/MSG.red* 2>/dev/null` if [ "$redfiles" != "" ] then $CAT $redfiles 2>/dev/null > $BBTMP/MSGSTATUS.$PID if test -s "$BBTMP/MSGSTATUS.$PID" then MSGLINE="Urgent message file problems reported " COLOR="red" fi fi # Return the most recent yellow messages yellowfiles=`$LS -t $BBTMP/MSG.yellow* 2>/dev/null` if [ "$yellowfiles" != "" ] then $CAT $yellowfiles 2>/dev/null >> $BBTMP/MSGSTATUS.$PID if test -s "$BBTMP/MSGSTATUS.$PID" then if test "$COLOR" = "green" then MSGLINE="Message file problems reported " COLOR="yellow" fi fi fi if [ ! -f $BBTMP/MSGSTATUS.$PID ] then $TOUCH $BBTMP/MSGSTATUS.$PID fi $BBHOME/bin/bb-combo.sh add "status $MACHINE.msgs $COLOR `date` ${MSGLINE} `$CAT $BBTMP/MSGSTATUS.$PID` " $RM -f $BBTMP/MSGSTATUS.$PID if [ "$OLDSTYLEBBMSGS" = "TRUE" ] then $RM -f $BBTMP/.expire $BBTMP/MSG.* fi $RM -f $BBTMP/MSG.red.file ./bb/bb19c/bin/bbrm.DIST0100755002342100007640000000517407616533071012433 0ustar bbbb#!/bin/sh # # bbrm # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # REMOVE MACHINE DATA - USE WITH EXTREME CAUTION # # You'll have to do the bb-hosts file yourself, and BB shouldn't be # running when you do this. # # Format: bbrm machine1 [service] # i.e.: bbrm bozo.bb4.com # bbrm bozo.bb4.com ftp # BBHOME="&&BBHOME" export BBHOME if [ "$#" -lt 1 -o "$#" -gt 2 ] then echo "bbrm: incorrect number of arguments" echo "bbrm name [service]" exit 1 else BX1="$1" if [ "$#" -eq 1 ] then BX2="*" else BX2="${2}" fi fi # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! -d "$BBVAR" then echo "I can't access BBVAR ($BBVAR)... exiting" exit 1 fi # echo $BBVAR BBX1="`echo "$BX1" | $SED 's/[^a-zA-Z0-9_\.,:-]//g' | $SED 's/\.\./\./g'`" if [ "$BBX1" != "$BX1" ] then echo "bbrm: Invalid hostname" echo "bbrm hostname [service]" exit 1 fi # We're only removing a service, make sure service is valid if [ "$BX2" != "*" ] then BBX2="`echo "$BX2" | $SED 's/[^a-zA-Z0-9_-]//g'`" if [ "$BBX2" != "$BX2" ] then echo "bbrm: Invalid service" echo "bbrm hostname [service]" exit 1 fi fi # # logs, hist CONTAINS MACHINES IN THE FORM aaa,bbb,ccc.test # hist also contains a file in the form aaa.bbb.ccc WITH ALL INFO # histlogs contains directories named in the form aaa_bbb_ccc # BOX1=`echo $BX1 | $SED "s/\./,/g"` BOX1="./${BOX1}" # ANCHOR IT # DO THE logs DIRECTORY cd $BBVAR/logs for file in `$LS ${BOX1}.${BX2} 2>/dev/null` do echo "Removing status log: $file" $RM -f $file done # DO THE hist DIRECTORY cd $BBVAR/hist for file in `$LS ${BOX1}.${BX2} 2>/dev/null | $GREP "${BOX1}\.[^.]*$" 2>/dev/null` do echo "Removing history service file: $file" $RM -f $file done if [ -f "$BX1" -a "$BX2" = "*" ] then echo "Removing history host file: $BX1" $RM -f $BX1 # REMOVE THE SUMMARY FILE AS WELL fi # DO THE histlogs DIRECTORY cd $BBVAR/histlogs BOX1=`echo $BX1 | $SED "s/\./_/g"` if test -d "$BOX1" then if [ "$BX2" = "*" ] then echo "Removing host history logs directory: $BOX1" $RM -rf $BOX1 else echo "Removing service history logs directory: $BOX1/$BX2" $RM -rf $BOX1/$BX2 fi fi # Don't forget to remove the HTML status files cd $BBHOME/www/html for file in `$LS ${BX1}.${BX2}.html 2>/dev/null | $GREP "${BX1}\.[^.]*$" 2>/dev/null` do echo "Removing HTML file: $file" $RM -f $file done exit 0 ./bb/bb19c/bin/bb-mailack.sh0100755002342100007640000001250307616533071013334 0ustar bbbb#!/bin/sh # # bb-mailack.sh - E-MAIL ACKS TO BB NOTIFICATIONS # # Sean MacGuire # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # HOW IT WORKS # # BB-generated e-mail messages all have the security code and problem # in the subject line. Since the user bb is running as shouldn't ever # get mail (unless maybe it's bouncing), replies can be acked automatically # by parsing the subject line and sending BB and ACK message. This user # can still receive mail, this script will disregard non-ack message # and save the mail message in the folder # # To set up: (do read note #1 and #2 as setup may differ) # # On the BBPAGER host, create a .forward file under the # user BB is running as: # |/bin/bb-mailack.sh # Adjust BBHOME to your own BBHOME # # Note #1, recent version of sendmail will only execute # programs that are located in /etc/smrsh (check your # sendmail config for the proper directory). Save # The solution is to put a symlink in the smrsh home # to the bb-mailack.sh, then use an alias rather than # a .forward. Thanks to mw@nextjet.com. # # Note #2, words of wisdom from John Alexander # a) If you have later versions of SendMail (8.11) install Procmail. # b) Put a .procmailrc file in the bbuser home directory to redirect the mail # c) Ensure .procmailrc has permissions of 600 or it will gripe and fail. # d) Ensure the bbuser home directory has perms of 755 or Procmail # will gripe and fail # e) Procmail will fail with a "suspicious rcfile" error if the home # directory or .procmailrc is writable by anything more than the owner. # f) /var/log/syslog is your friend ;) # # Set the following variables to the required values # BBUSER User name # BBHOME Location of the BB tree # MAILFILE Location of the user's mailbox # REPLYPFX Prefix returned with the mail message # DELAY Default delay value # ACK Send confirmation message ? # # To use: # Just reply th the e-mail notifications sent by your bbuser # # You can set a different DELAY value than the default # Type in DELAY=XXX right after the !BB - XXXXXYY! # !BB - XXXXXYY! DELAY=30 # # You can put a defaut ###################################################### # CONFIGURATION # # SET SOME VARIABLES WE NEED. SEASON TO TASTE... # Yes, we could have tried "who am i", whoami, id -u -n # for BBUSER but instead to figure out what's portable # it's easier to ask you for 30secs to set them up ;) # Also applies to MAILFILE BBUSER="bbuser" BBHOME="/home/sean/bb/bb"; export BBHOME MAILFILE="/var/mail/$BBUSER" REPLYPFX="[RrAa][EeWw]:" DELAY=60 ACK="" # Set to Y if you want a confirmation message by default ####################################################### # START SCRIPT # First store the incoming message... FILE="/tmp/ACKME.$BBUSER.$$" FILESUBJ="/tmp/ACKME.SUBJECT.$BBUSER.$$" set -f rm -f $FILE rm -f $FILESUBJ dd of=$FILE 2>/dev/null SAVEMAIL="FALSE" if [ -d "$BBHOME" ] then . $BBHOME/etc/bbdef.sh # Keep only valid characters $GREP -i "^Subject:[ ]*$REPLYPFX" $FILE | $HEAD -1 | $SED 's/[^a-zA-z0-9.= ]//g' > $FILESUBJ 2>/dev/null # If it's a valid BB reply # We should have something in this format # Subject Re BB 9999999 Host.service 999999999999999 NUMBER="" if [ -s $FILESUBJ ] then set `$CAT "$FILESUBJ"` 2>&1 >/dev/null while [ "$#" -gt 1 ] do # echo $1 if [ "$1" = "BB" ] then NUMBER=`echo "$2" | $SED "s/[^0-9]//g"` # echo $NUMBER if [ "$2" = "$NUMBER" ] then break; fi fi shift done if test "$NUMBER" then DELAYVAL=`$CAT $FILESUBJ | $GREP -i "DELAY" | $SED 's/^.*[Dd][Ee][Ll][][Aa][Yy]=\([0-9]*\).*$/\1/' 2>/dev/null` if [ "$DELAYVAL" != "" ] then DELAY="$DELAYVAL" fi # Note that spaces are converted to + and will be converted back to spaces # after the message has been processes MESSAGE=`$CAT $FILESUBJ | $GREP -i "MSG=" | $SED 's/^.*[Mm][Ss][Gg]=\(.*\)$/\1/' | $SED 's/[ ]/+/g' 2>/dev/null` # Get the mail Id of the sender FROM=`$GREP -i "^From:" $FILE | $HEAD -1 | $SED 's/[^a-zA-Z0-9.@_<> "-]//g' | $SED 's/^From[ ]*\(.*$\)/\1/g' 2>/dev/null` if [ "$MESSAGE" = "" ] then MESSAGE=`echo "$FROM" | $SED 's/[ ]/+/g' 2>/dev/null` fi # ack_event must go to all BBPAGERS... RAC OLDBBDISPLAYS=$BBDISPLAYS BBDISPLAYS=$BBPAGERS $BB $BBPAGE "ack ack_event ${NUMBER} ${DELAY} ${MESSAGE}" BBDISPLAYS=$OLDBBDISPLAYS ACKVAL=`$CAT $FILESUBJ | $GREP -i "ACK" | $SED 's/^.*[Aa][Cc][Kk]=\([YyNn]\).*$/\1/' 2>/dev/null` if [ "$ACKVAL" != "" ] then ACK="$ACKVAL" fi if [ "$ACK" = "Y" -o "$ACK" = "y" ] then FROMMAIL=`echo $FROM | $SED 's/\([a-zA-Z0-9._-]*@[a-zA-Z0-9._-]*\)/<<<&>>>/1' |\ $SED 's/^.*\(<<<[a-zA-Z0-9._-]*@[a-zA-Z0-9._-]*>>>\).*$/\1/g' |\ $SED 's/["<>]//g' 2>/dev/null` if [ "$FROMMAIL" != "" ] then echo "This message is an acknowledgment of the reception of the ACK message for the notification ID $NUMBER It does not guarantee success of the acknowledgment" |\ $MAIL "Received ACK for !BB - $NUMBER!" "$FROMMAIL" fi fi else SAVEMAIL="TRUE" fi else SAVEMAIL="TRUE" fi else SAVEMAIL="TRUE" fi if [ -f "$MAILFILE" -a "$SAVEMAIL" = "TRUE" ] then cat $FILE >> $MAILFILE fi rm -f $FILE rm -f $FILESUBJ exit 0 ./bb/bb19c/bin/bb-combo.sh0100755002342100007640000001072007616533071013031 0ustar bbbb#!/bin/sh # bb-combo.sh # # BIG BROTHER COMBO SCRIPT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Build a list of green status messages into work files # and send as a combo message # any other color than green is sent immediately # if [ "$#" -lt 1 ] then echo "bb-combo.sh called with no arguments" echo "Usage: bb-combo.sh add \"message\"" echo " bb-combo.sh end" exit 1 fi # echo "***** BBHOME IS SET TO $BBHOME IN bb-combo.sh" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi case $1 in add) # if message is green add to work file # Otherwise send status immediately if [ "$DOCOMBO" != "TRUE" ] then $BB $BBDISP "$2" elif [ "$BBCOMBOID" = "" ] then echo "bb-combo.sh: BBCOMBOID variable is not set or has not been exported" echo " combo add request ignored, sending status immediately" $BB $BBDISP "$2" else MSG="$2" set -f set bogus $2 >/dev/null 2>&1 set +f shift host=$2 color=$3 if [ "$color" != "green" ] then # # Also send what you have already saved, # if there's a non-green, there's some chances # others will follow so better send the good ones too # Only send if there's a workfile if [ -f $BBTMP/combo.${BBCOMBOID} ] then $BB $BBDISP "`$CAT $BBTMP/combo.${BBCOMBOID}`" $RM -f $BBTMP/combo.${BBCOMBOID} # remove the combo.msgs / combo.ttl / combo.$host files $RM -f $BBTMP/combo.*.${BBCOMBOID} fi # # Now send the non-green # $BB $BBDISP "$MSG" else # # If the previous check was non-green # Send immediately # SENDCOMBO="FALSE" # # Has the workfile exceed its time to live ? # if [ -f $BBTMP/combo.ttl.${BBCOMBOID} -a "$MAXCOMBOTTL" -ge 0 ] then NOWTIME=`$BBHOME/bin/touchtime -e 2>/dev/null` TTLTIME=`$CAT $BBTMP/combo.ttl.${BBCOMBOID}` DIFFTIME=`$EXPR $NOWTIME - $TTLTIME` if [ "$DIFFTIME" -ge "$MAXCOMBOTTL" ] then SENDCOMBO="TRUE" fi fi # # Has the # of messages in the workfile # exceeded the allowed maximum ? # if [ "$SENDCOMBO" != "TRUE" -a -f $BBTMP/combo.msgs.${BBCOMBOID} -a "$MAXCOMBOMSGS" -ge 1 ] then NUMMSGS=`$CAT $BBTMP/combo.msgs.${BBCOMBOID}` if [ "$NUMMSGS" -ge "$MAXCOMBOMSGS" ] then SENDCOMBO="TRUE" fi fi # # Would the updated workfile exceed the maximun # message size (MAXLINE) # if [ "$SENDCOMBO" != "TRUE" -a -f $BBTMP/combo.${BBCOMBOID} ] then # Don't redefine WCC in bbsys.local, it won't work # WCC is determined from WC set -f set `echo "$MSG" | $WCC -c 2>/dev/null` >/dev/null 2>&1 set +f MSGSIZE=`echo $1` set `$WCC -c $BBTMP/combo.${BBCOMBOID} 2>/dev/null` >/dev/null 2>&1 FILESIZE=`echo $1` TOTALSIZE=`$EXPR $MSGSIZE + $FILESIZE` if [ $TOTALSIZE -gt $MAXLINE ] then SENDCOMBO="TRUE" fi fi if [ "$SENDCOMBO" = "TRUE" ] then $BB $BBDISP "`$CAT $BBTMP/combo.${BBCOMBOID}`" $RM -f $BBTMP/combo.${BBCOMBOID} # remove the combo.msgs / combo.ttl / combo.$host files $RM -f $BBTMP/combo.*.${BBCOMBOID} fi if [ ! -f $BBTMP/combo.${BBCOMBOID} ] then echo "combo" > $BBTMP/combo.${BBCOMBOID} $BBHOME/bin/touchtime -e > $BBTMP/combo.ttl.${BBCOMBOID} echo "1" > $BBTMP/combo.msgs.${BBCOMBOID} fi echo "$MSG " >> $BBTMP/combo.${BBCOMBOID} fi fi ;; end ) # send remaining contents of work file if any if [ "$DOCOMBO" = "TRUE" ] then if [ "$BBCOMBOID" = "" ] then echo "bb-combo.sh: BBCOMBOID variable is not set or has not been exported" echo " combo end request ignored" exit 1 else # Only send if there's a workfile if [ -f $BBTMP/combo.${BBCOMBOID} ] then $BB $BBDISP "`$CAT $BBTMP/combo.${BBCOMBOID}`" $RM -f $BBTMP/combo.${BBCOMBOID} # remove the combo.msgs / combo.ttl / combo.$host files $RM -f $BBTMP/combo.*.${BBCOMBOID} fi fi fi ;; start ) # Clean up before 1st message, just in case if [ "$DOCOMBO" = "TRUE" ] then if [ "$BBCOMBOID" = "" ] then echo "bb-combo.sh: BBCOMBOID variable is not set or has not been exported" echo " combo end request ignored" exit 1 else $RM -f $BBTMP/combo.${BBCOMBOID} # remove the combo.msgs / combo.ttl / combo.$host files $RM -f $BBTMP/combo.*.${BBCOMBOID} fi fi ;; esac exit 0 ./bb/bb19c/bin/bbmv.DIST0100755002342100007640000001354407616533071012437 0ustar bbbb#!/bin/sh # # bbmv # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # RENAME ALL OF ONE MACHINE'S INFO TO ANOTHER... # # You'll have to do the bb-hosts file yourself, and BB shouldn't be # running when you do this. # # Format: bbmv machine1 -> machine2 # bbmv machine.service1 -> machine.service2 # i.e.: bbmv www.bb4.com bozo.bb4.com # bbmv www.bb4.com bozo bizi # BBHOME="&&BBHOME" export BBHOME if [ "$#" -lt 2 -o "$#" -gt 3 ] then echo "bbmv: incorrect number of arguments" echo "bbmv old-hostname new-hostname" echo "bbmv hostname old-service new-service" exit 1 else BX1="$1" if [ "$#" -eq 2 ] then BX2="$2" OLDSVC="" NEWSVC="" else BX2="" OLDSVC="$2" NEWSVC="$3" fi fi # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! -d "$BBVAR" then echo "I can't access BBVAR ($BBVAR)... exiting" exit 1 fi # echo $BBVAR BBX1="`echo "$BX1" | $SED 's/[^a-zA-Z0-9_\.,:-]//g' | $SED 's/\.\./\./g'`" if [ "$BBX1" != "$BX1" ] then echo "bbmv: Invalid hostname" echo "Usage: bbmv old-hostname new-hostname" echo " bbmv hostname old-service new-service" exit 1 fi if [ "$BX2" != "" ] then BBX2="`echo "$BX2" | $SED 's/[^a-zA-Z0-9_\.,:-]//g' | $SED 's/\.\./\./g'`" if [ "$BBX2" != "$BX2" ] then echo "bbmv: Invalid hostname" echo "Usage: bbmv hostname" exit 1 fi else # We're only renaming a service, make sure service is valid TMPSVC="`echo "$OLDSVC" | $SED 's/[^a-zA-Z0-9_-]//g'`" if [ "$TMPSVC" != "$OLDSVC" ] then echo "bbmv: Invalid service" echo "Usage: bbmv old-hostname new-hostname" echo " bbmv hostname old-service new-service" exit 1 fi TMPSVC="`echo "$NEWSVC" | $SED 's/[^a-zA-Z0-9_-]//g'`" if [ "$TMPSVC" != "$NEWSVC" ] then echo "bbmv: Invalid service" echo "Usage: bbmv old-hostname new-hostname" echo " bbmv hostname old-service new-service" exit 1 fi fi # # If we're renaming a host # if [ "$BX2" != "" ] then # # logs, hist CONTAINS MACHINES IN THE FORM aaa,bbb,ccc.test # hist also contains a file in the form aaa.bbb.ccc WITH ALL INFO # histlogs contains directories named in the form aaa_bbb_ccc # BOX1=`echo $BX1 | $SED "s/\./,/g"` BOX2=`echo $BX2 | $SED "s/\./,/g"` COUNT=`$LS $BBVAR/logs/$BOX2.* 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" != "0" then echo "Can't move $BX1 - $BX2 data already exists" exit 1 fi COUNT=`$LS $BBVAR/hist/$BOX2.* 2>/dev/null | $GREP "${BOX2}\.[^.]*$" 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" != "0" then echo "Can't move $BX1 - $BX2 already exists" exit 1 fi #COUNT=`$LS $BBVAR/logs/$BOX1.* 2>/dev/null | $WC` #COUNT=`echo $COUNT` #if test "$COUNT" = "0" #then # echo "Can't move $BX1 - no data to move" # exit 1 #fi COUNT=`$LS $BBVAR/hist/$BOX1.* 2>/dev/null | $GREP "${BOX1}\.[^.]*$" 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" = "0" then echo "Can't move $BX1 - no data to move" exit 1 fi # DO THE logs DIRECTORY cd $BBVAR/logs for file in `$LS ./$BOX1.* 2>/dev/null` do set `echo $file | $SED "s/\./\ /g"` TEST="$2" echo "Moving logfile $file to $BOX2.$TEST" $MV -f $file $BOX2.$TEST done # DO THE hist DIRECTORY cd $BBVAR/hist for file in `$LS ./$BOX1.* 2>/dev/null | $GREP "${BOX1}\.[^.]*$" 2>/dev/null` do set `echo $file | $SED "s/\./\ /g"` TEST="$2" echo "Moving hist $file to $BOX2.$TEST" $MV -f $file $BOX2.$TEST done if test -f "./$BX1" then echo "Moving hist summary file $BX1 to $BX2" $MV -f ./$BX1 ./$BX2 # MOVE THE SUMMARY FILE AS WELL fi # DO THE histlogs DIRECTORY cd $BBVAR/histlogs BOX1=`echo $BX1 | $SED "s/\./_/g"` BOX2=`echo $BX2 | $SED "s/\./_/g"` if test -d "./$BOX1" then echo "Moving histlogs directory $BOX1 to $BOX2" $MV -f ./$BOX1 ./$BOX2 fi # Don't forget to remove the HTML status files cd $BBHOME/www/html for file in `$LS $BX1.*.html 2>/dev/null | $GREP "${BX1}\.[^.]*.html" 2>/dev/null` do set `echo $file | $SED "s/\./\ /g"` # host.service.html shiftval=`$EXPR "$#" - 2` shift $shiftval TEST="$1" echo "Moving html status from $file to $BX2.$TEST.html" $MV -f $file ./$BX2.$TEST.html done else # # logs, hist CONTAINS MACHINES IN THE FORM aaa,bbb,ccc.test # hist also contains a file in the form aaa.bbb.ccc WITH ALL INFO # histlogs contains directories named in the form aaa_bbb_ccc # BOX1=`echo $BX1 | $SED "s/\./,/g"` COUNT=`$LS $BBVAR/logs/$BOX1.${NEWSVC} 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" != "0" then echo "Can't move $OLDSVC service for $BX1 - $NEWSVC service already exists" exit 1 fi COUNT=`$LS $BBVAR/hist/$BOX1.${OLDSVC} 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" = "0" then echo "Can't move $OLDSVC service for $BX1 - service does not exists" exit 1 fi # DO THE logs DIRECTORY cd $BBVAR/logs echo "Moving status log $BOX1.${OLDSVC} to $BOX1.${NEWSVC}" $MV -f $BOX1.${OLDSVC} $BOX1.${NEWSVC} # DO THE hist DIRECTORY cd $BBVAR/hist echo "Moving history file $BOX1.${OLDSVC} to $BOX1.${NEWSVC}" $MV -f $BOX1.${OLDSVC} $BOX1.${NEWSVC} # DO THE histlogs DIRECTORY cd $BBVAR/histlogs BOX1=`echo $BX1 | $SED "s/\./_/g"` if test -d "./$BOX1/${OLDSVC}" then echo "Moving history log directory $BOX1/${OLDSVC} to $BOX1/${NEWSVC}" $MV -f ./$BOX1/${OLDSVC} ./$BOX1/${NEWSVC} fi # Don't forget to remove the HTML status files cd $BBHOME/www/html echo "Moving html file from $BX1.${OLDSVC}.html to $BX1.${NEWSVC}.html" $MV -f $BX1.${OLDSVC}.html $BX1.${NEWSVC}.html fi exit 0 ./bb/bb19c/bin/bbprune.DIST0100755002342100007640000002052307616533071013141 0ustar bbbb#!/bin/sh # # bbprune # # PROGRAM TO PRUNE BB LOGFILES BY DATE # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # WE COULD DO THIS BY DAY, BUT IT WOULD MAKE DATA INPUT CONFUSING # BETWEEN US/EUROPE MMDD FORMATS, WHICH IN TURN COULD LEAD TO REALLY # HORRIBLE RESULTS # # Format: prune YYYY MM (i.e. 2000 06 will archive everything before June 2000) # # # FIRST, MAKE SURE WE KNOW WHERE BBHOME IS # BBHOME="&&BBHOME" export BBHOME if test "$#" != "2" then echo "Format: prune YYYY MM" exit 1 else DA="01" # BY DEFINITION! YR=$1 MO=$2 case $MO in 1|01) MON="Jan" ;; 2|02) MON="Feb" ;; 3|03) MON="Mar" ;; 4|04) MON="Apr" ;; 5|05) MON="May" ;; 6|06) MON="Jun" ;; 7|07) MON="Jul" ;; 8|08) MON="Aug" ;; 9|09) MON="Sep" ;; 10) MON="Oct" ;; 11) MON="Nov" ;; 12) MON="Dec" ;; *) MON="" ;; esac if test "$MON" = "" then echo "Error - invalid month $MO" exit 2 fi # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! -d "$BBVAR" then echo "I can't access BBVAR ($BBVAR)... exiting" exit 1 fi # echo $BBVAR PDATE=`$BBHOME/bin/touchtime -x "$MON $DA $YR"` echo "Archiving data prior to $MON $YR [$PDATE]" fi ARCHIVE="$BBVAR/archive" # # NEXT, MAKE SURE WE HAVE AN ARCHIVE DIRECTORY AVAILABLE # if test ! -d $ARCHIVE then mkdir $ARCHIVE if test "$?" != "0" then echo "Couldn't make archive directory - perms trouble?" exit 1 fi fi # # NOW THE WORK BEGINS # YRMO="${YR}${MO}" mkdir $ARCHIVE/$YRMO if test "$?" != "0" then echo "Couldn't make directory - can't continue" exit 3 fi # # THIS PILE OF UGLINESS IS BECAUSE touchtime CAN'T ACCEPT AN epoch date # AS AN ARGUMENT, i.e. TO CREATE A FILE WITH A PARTICULAR TIMETICK... # OFFSET=`$BBHOME/bin/touchtime -d "$MON $DA $YR"` OFFSET=`$EXPR \-1 \* $OFFSET` OFFSET=`$EXPR $OFFSET \/ 60` #echo "OFFSET IS $OFFSET" $BBHOME/bin/touchtime $OFFSET $ARCHIVE/.$YRMO # ARCHIVE HISTLOGS # # NOTICE - I'M USING cpio SINCE I CAN'T REMEMBER HOW TO GET # tar TO READ A REALLY LONG LIST FROM stdin (THE `cat LIST` # THING BLOWS UP WHEN THERE ARE A LOT OF FILES TO ARCHIVE # # TO RESTORE: cpio -idumBcv < FILENAME # echo "*** Processing histlogs" cd $BBVAR/histlogs $FIND . ! -newer $ARCHIVE/.$YRMO -type f -print > $BBTMP/histlogs.$$ $CAT $BBTMP/histlogs.$$ | cpio -ocvB > $ARCHIVE/$YRMO/histlogs.$YRMO gzip $ARCHIVE/$YRMO/histlogs.$YRMO echo "*** Removing old histlogs, this is very slow, be patient!" # NOW TOAST 'EM for file in `$CAT $BBTMP/histlogs.$$` do $RM $file done $RM $BBTMP/histlogs.$$ # AND REMOVE THE TAG FILE $RM $ARCHIVE/.$YRMO # NOW ARCHIVE THE REST OF THE IMPORTANT STUFF IN acks and hist # THIS IS A LITTLE TRICKIER BECAUSE WE HAVE TO SPLIT EACH FILE # BY TIMESTAMP... EACH OF WHICH HAS THEM IN A DIFFERENT POSITION. cd $BBVAR/acks # FIGURE OUT WHERE notifications.log SHOULD BE SPLIT # THE TIMESTAMP IS IN THE 10th FIELD # PARSE IT AND STORE THE LINE NUMBER # SAME WITH THE REST OF THEM. LINENO=1 echo "*** Processing notifications.log" $CAT notifications.log | while read line do set $line shift # echo "TEST $9 vs $PDATE" if test "$9" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.notif.$$ break # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.notif.$$" then FIRSTLINE=`$CAT $BBTMP/prune.notif.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP notifications.log $BBTMP/not.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/not.$$ > $ARCHIVE/$YRMO/notifications.log.$YRMO $CAT $BBTMP/not.$$ | $SED "1,${LASTLINE}d" > notifications.log fi $RM $BBTMP/not.$$ $RM $BBTMP/prune.notif.$$ if test -f $ARCHIVE/$YRMO/notifications.log.$YRMO then gzip $ARCHIVE/$YRMO/notifications.log.$YRMO fi fi echo "*** Processing recoveries.log" LINENO=1 $CAT recoveries.log | while read line do set $line if test "$#" = "10" # 10 ARGS IN A LINE then shift; fi # echo "TEST $8 vs $PDATE" if test "$8" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.recoveries.$$ break # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.recoveries.$$" then FIRSTLINE=`$CAT $BBTMP/prune.recoveries.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP recoveries.log $BBTMP/recoveries.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/recoveries.$$ > $ARCHIVE/$YRMO/recoveries.log.$YRMO $CAT $BBTMP/recoveries.$$ | $SED "1,${LASTLINE}d" > recoveries.log fi $RM $BBTMP/recoveries.$$ $RM $BBTMP/prune.recoveries.$$ if test -f $ARCHIVE/$YRMO/recoveries.log.$YRMO then gzip $ARCHIVE/$YRMO/recoveries.log.$YRMO fi fi echo "*** Processing recoverymsgs.log" LINENO=1 $CAT recoverymsgs.log | while read line do set $line if test "$#" = "16" # 16 ARGS IN A LINE then shift; fi # echo "TEST $9 vs $PDATE" if test "$9" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.recoverymsgs.$$ break # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.recoverymsgs.$$" then FIRSTLINE=`$CAT $BBTMP/prune.recoverymsgs.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP recoverymsgs.log $BBTMP/recoverymsgs.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/recoverymsgs.$$ > $ARCHIVE/$YRMO/recoverymsgs.log.$YRMO $CAT $BBTMP/recoverymsgs.$$ | $SED "1,${LASTLINE}d" > recoverymsgs.log fi $RM $BBTMP/recoverymsgs.$$ $RM $BBTMP/prune.recoverymsgs.$$ if test -f $ARCHIVE/$YRMO/recoverymsgs.log.$YRMO then gzip $ARCHIVE/$YRMO/recoverymsgs.log.$YRMO fi fi echo "*** Processing acklog" LINENO=1 $CAT acklog | while read line do set $line # echo "TEST $1 vs $PDATE" if test "$1" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.acklog.$$ break; # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.acklog.$$" then FIRSTLINE=`$CAT $BBTMP/prune.acklog.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP acklog $BBTMP/acklog.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/acklog.$$ > $ARCHIVE/$YRMO/acklog.$YRMO $CAT $BBTMP/acklog.$$ | $SED "1,${LASTLINE}d" > acklog fi $RM $BBTMP/acklog.$$ $RM $BBTMP/prune.acklog.$$ if test -f $ARCHIVE/$YRMO/acklog.$YRMO then gzip $ARCHIVE/$YRMO/acklog.$YRMO fi fi # # NOW DO THE CONTENTS OF THE hist DIRECTORY # # 3 FORMATS # allevents HAS THE TIMESTAMP IN THE 3rd FIELD # summary-by-machine (i.e. www.bb4.com) has the timestamp in the 2nd field # individual row.col tests have the results in the 7th field # NORMALIZE EVERYTHING SO THE DATESTAMP IS IN THE SECOND COLUMN mkdir $ARCHIVE/$YRMO/hist.$YRMO # MAKE THE HISTORY DIR if test "$?" != "0" then echo "Couldn't make directory - can't continue" exit 4 fi cd $BBVAR/hist for file in `$LS` do echo "*** Processing hist: $file" $RM -f $BBTMP/prune.$file.$$ $BBTMP/$file.$$ LINENO=1 $CAT $file | while read line do set $line if test "$#" = "8" then if test "$file" = "allevents" then shift; else shift; shift; shift; shift; shift; fi elif [ "$3" -lt 32 ] # if a day then it's a host.service file then if test "$file" != "allevents" then shift; shift; shift; shift; shift; fi fi # echo "TEST $2 vs $PDATE" if test "$2" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.$file.$$ break; # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.$file.$$" then FIRSTLINE=`$CAT $BBTMP/prune.$file.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP $file $BBTMP/$file.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/$file.$$ > $ARCHIVE/$YRMO/hist.$YRMO/$file $CAT $BBTMP/$file.$$ | $SED "1,${LASTLINE}d" > $file fi $RM $BBTMP/$file.$$ $RM $BBTMP/prune.$file.$$ fi done # # NOW TAR UP AND COMPRESS THE HIST FILE AND REMOVE THE BITS... # cd $ARCHIVE/$YRMO tar cvf hist.$YRMO.tar hist.$YRMO gzip hist.$YRMO.tar $RM -rf hist.$YRMO ./bb/bb19c/bin/bbrm0100755002342100007640000000517507616533071011672 0ustar bbbb#!/bin/sh # # bbrm # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # REMOVE MACHINE DATA - USE WITH EXTREME CAUTION # # You'll have to do the bb-hosts file yourself, and BB shouldn't be # running when you do this. # # Format: bbrm machine1 [service] # i.e.: bbrm bozo.bb4.com # bbrm bozo.bb4.com ftp # BBHOME="/bb/bb19c" export BBHOME if [ "$#" -lt 1 -o "$#" -gt 2 ] then echo "bbrm: incorrect number of arguments" echo "bbrm name [service]" exit 1 else BX1="$1" if [ "$#" -eq 1 ] then BX2="*" else BX2="${2}" fi fi # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! -d "$BBVAR" then echo "I can't access BBVAR ($BBVAR)... exiting" exit 1 fi # echo $BBVAR BBX1="`echo "$BX1" | $SED 's/[^a-zA-Z0-9_\.,:-]//g' | $SED 's/\.\./\./g'`" if [ "$BBX1" != "$BX1" ] then echo "bbrm: Invalid hostname" echo "bbrm hostname [service]" exit 1 fi # We're only removing a service, make sure service is valid if [ "$BX2" != "*" ] then BBX2="`echo "$BX2" | $SED 's/[^a-zA-Z0-9_-]//g'`" if [ "$BBX2" != "$BX2" ] then echo "bbrm: Invalid service" echo "bbrm hostname [service]" exit 1 fi fi # # logs, hist CONTAINS MACHINES IN THE FORM aaa,bbb,ccc.test # hist also contains a file in the form aaa.bbb.ccc WITH ALL INFO # histlogs contains directories named in the form aaa_bbb_ccc # BOX1=`echo $BX1 | $SED "s/\./,/g"` BOX1="./${BOX1}" # ANCHOR IT # DO THE logs DIRECTORY cd $BBVAR/logs for file in `$LS ${BOX1}.${BX2} 2>/dev/null` do echo "Removing status log: $file" $RM -f $file done # DO THE hist DIRECTORY cd $BBVAR/hist for file in `$LS ${BOX1}.${BX2} 2>/dev/null | $GREP "${BOX1}\.[^.]*$" 2>/dev/null` do echo "Removing history service file: $file" $RM -f $file done if [ -f "$BX1" -a "$BX2" = "*" ] then echo "Removing history host file: $BX1" $RM -f $BX1 # REMOVE THE SUMMARY FILE AS WELL fi # DO THE histlogs DIRECTORY cd $BBVAR/histlogs BOX1=`echo $BX1 | $SED "s/\./_/g"` if test -d "$BOX1" then if [ "$BX2" = "*" ] then echo "Removing host history logs directory: $BOX1" $RM -rf $BOX1 else echo "Removing service history logs directory: $BOX1/$BX2" $RM -rf $BOX1/$BX2 fi fi # Don't forget to remove the HTML status files cd $BBHOME/www/html for file in `$LS ${BX1}.${BX2}.html 2>/dev/null | $GREP "${BX1}\.[^.]*$" 2>/dev/null` do echo "Removing HTML file: $file" $RM -f $file done exit 0 ./bb/bb19c/bin/bbmv0100755002342100007640000001354507616533071011676 0ustar bbbb#!/bin/sh # # bbmv # # BIG BROTHER MONITORING SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # RENAME ALL OF ONE MACHINE'S INFO TO ANOTHER... # # You'll have to do the bb-hosts file yourself, and BB shouldn't be # running when you do this. # # Format: bbmv machine1 -> machine2 # bbmv machine.service1 -> machine.service2 # i.e.: bbmv www.bb4.com bozo.bb4.com # bbmv www.bb4.com bozo bizi # BBHOME="/bb/bb19c" export BBHOME if [ "$#" -lt 2 -o "$#" -gt 3 ] then echo "bbmv: incorrect number of arguments" echo "bbmv old-hostname new-hostname" echo "bbmv hostname old-service new-service" exit 1 else BX1="$1" if [ "$#" -eq 2 ] then BX2="$2" OLDSVC="" NEWSVC="" else BX2="" OLDSVC="$2" NEWSVC="$3" fi fi # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! -d "$BBVAR" then echo "I can't access BBVAR ($BBVAR)... exiting" exit 1 fi # echo $BBVAR BBX1="`echo "$BX1" | $SED 's/[^a-zA-Z0-9_\.,:-]//g' | $SED 's/\.\./\./g'`" if [ "$BBX1" != "$BX1" ] then echo "bbmv: Invalid hostname" echo "Usage: bbmv old-hostname new-hostname" echo " bbmv hostname old-service new-service" exit 1 fi if [ "$BX2" != "" ] then BBX2="`echo "$BX2" | $SED 's/[^a-zA-Z0-9_\.,:-]//g' | $SED 's/\.\./\./g'`" if [ "$BBX2" != "$BX2" ] then echo "bbmv: Invalid hostname" echo "Usage: bbmv hostname" exit 1 fi else # We're only renaming a service, make sure service is valid TMPSVC="`echo "$OLDSVC" | $SED 's/[^a-zA-Z0-9_-]//g'`" if [ "$TMPSVC" != "$OLDSVC" ] then echo "bbmv: Invalid service" echo "Usage: bbmv old-hostname new-hostname" echo " bbmv hostname old-service new-service" exit 1 fi TMPSVC="`echo "$NEWSVC" | $SED 's/[^a-zA-Z0-9_-]//g'`" if [ "$TMPSVC" != "$NEWSVC" ] then echo "bbmv: Invalid service" echo "Usage: bbmv old-hostname new-hostname" echo " bbmv hostname old-service new-service" exit 1 fi fi # # If we're renaming a host # if [ "$BX2" != "" ] then # # logs, hist CONTAINS MACHINES IN THE FORM aaa,bbb,ccc.test # hist also contains a file in the form aaa.bbb.ccc WITH ALL INFO # histlogs contains directories named in the form aaa_bbb_ccc # BOX1=`echo $BX1 | $SED "s/\./,/g"` BOX2=`echo $BX2 | $SED "s/\./,/g"` COUNT=`$LS $BBVAR/logs/$BOX2.* 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" != "0" then echo "Can't move $BX1 - $BX2 data already exists" exit 1 fi COUNT=`$LS $BBVAR/hist/$BOX2.* 2>/dev/null | $GREP "${BOX2}\.[^.]*$" 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" != "0" then echo "Can't move $BX1 - $BX2 already exists" exit 1 fi #COUNT=`$LS $BBVAR/logs/$BOX1.* 2>/dev/null | $WC` #COUNT=`echo $COUNT` #if test "$COUNT" = "0" #then # echo "Can't move $BX1 - no data to move" # exit 1 #fi COUNT=`$LS $BBVAR/hist/$BOX1.* 2>/dev/null | $GREP "${BOX1}\.[^.]*$" 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" = "0" then echo "Can't move $BX1 - no data to move" exit 1 fi # DO THE logs DIRECTORY cd $BBVAR/logs for file in `$LS ./$BOX1.* 2>/dev/null` do set `echo $file | $SED "s/\./\ /g"` TEST="$2" echo "Moving logfile $file to $BOX2.$TEST" $MV -f $file $BOX2.$TEST done # DO THE hist DIRECTORY cd $BBVAR/hist for file in `$LS ./$BOX1.* 2>/dev/null | $GREP "${BOX1}\.[^.]*$" 2>/dev/null` do set `echo $file | $SED "s/\./\ /g"` TEST="$2" echo "Moving hist $file to $BOX2.$TEST" $MV -f $file $BOX2.$TEST done if test -f "./$BX1" then echo "Moving hist summary file $BX1 to $BX2" $MV -f ./$BX1 ./$BX2 # MOVE THE SUMMARY FILE AS WELL fi # DO THE histlogs DIRECTORY cd $BBVAR/histlogs BOX1=`echo $BX1 | $SED "s/\./_/g"` BOX2=`echo $BX2 | $SED "s/\./_/g"` if test -d "./$BOX1" then echo "Moving histlogs directory $BOX1 to $BOX2" $MV -f ./$BOX1 ./$BOX2 fi # Don't forget to remove the HTML status files cd $BBHOME/www/html for file in `$LS $BX1.*.html 2>/dev/null | $GREP "${BX1}\.[^.]*.html" 2>/dev/null` do set `echo $file | $SED "s/\./\ /g"` # host.service.html shiftval=`$EXPR "$#" - 2` shift $shiftval TEST="$1" echo "Moving html status from $file to $BX2.$TEST.html" $MV -f $file ./$BX2.$TEST.html done else # # logs, hist CONTAINS MACHINES IN THE FORM aaa,bbb,ccc.test # hist also contains a file in the form aaa.bbb.ccc WITH ALL INFO # histlogs contains directories named in the form aaa_bbb_ccc # BOX1=`echo $BX1 | $SED "s/\./,/g"` COUNT=`$LS $BBVAR/logs/$BOX1.${NEWSVC} 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" != "0" then echo "Can't move $OLDSVC service for $BX1 - $NEWSVC service already exists" exit 1 fi COUNT=`$LS $BBVAR/hist/$BOX1.${OLDSVC} 2>/dev/null | $WC` COUNT=`echo $COUNT` if test "$COUNT" = "0" then echo "Can't move $OLDSVC service for $BX1 - service does not exists" exit 1 fi # DO THE logs DIRECTORY cd $BBVAR/logs echo "Moving status log $BOX1.${OLDSVC} to $BOX1.${NEWSVC}" $MV -f $BOX1.${OLDSVC} $BOX1.${NEWSVC} # DO THE hist DIRECTORY cd $BBVAR/hist echo "Moving history file $BOX1.${OLDSVC} to $BOX1.${NEWSVC}" $MV -f $BOX1.${OLDSVC} $BOX1.${NEWSVC} # DO THE histlogs DIRECTORY cd $BBVAR/histlogs BOX1=`echo $BX1 | $SED "s/\./_/g"` if test -d "./$BOX1/${OLDSVC}" then echo "Moving history log directory $BOX1/${OLDSVC} to $BOX1/${NEWSVC}" $MV -f ./$BOX1/${OLDSVC} ./$BOX1/${NEWSVC} fi # Don't forget to remove the HTML status files cd $BBHOME/www/html echo "Moving html file from $BX1.${OLDSVC}.html to $BX1.${NEWSVC}.html" $MV -f $BX1.${OLDSVC}.html $BX1.${NEWSVC}.html fi exit 0 ./bb/bb19c/bin/bbprune0100755002342100007640000002052407616533071012400 0ustar bbbb#!/bin/sh # # bbprune # # PROGRAM TO PRUNE BB LOGFILES BY DATE # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # WE COULD DO THIS BY DAY, BUT IT WOULD MAKE DATA INPUT CONFUSING # BETWEEN US/EUROPE MMDD FORMATS, WHICH IN TURN COULD LEAD TO REALLY # HORRIBLE RESULTS # # Format: prune YYYY MM (i.e. 2000 06 will archive everything before June 2000) # # # FIRST, MAKE SURE WE KNOW WHERE BBHOME IS # BBHOME="/bb/bb19c" export BBHOME if test "$#" != "2" then echo "Format: prune YYYY MM" exit 1 else DA="01" # BY DEFINITION! YR=$1 MO=$2 case $MO in 1|01) MON="Jan" ;; 2|02) MON="Feb" ;; 3|03) MON="Mar" ;; 4|04) MON="Apr" ;; 5|05) MON="May" ;; 6|06) MON="Jun" ;; 7|07) MON="Jul" ;; 8|08) MON="Aug" ;; 9|09) MON="Sep" ;; 10) MON="Oct" ;; 11) MON="Nov" ;; 12) MON="Dec" ;; *) MON="" ;; esac if test "$MON" = "" then echo "Error - invalid month $MO" exit 2 fi # echo "***** BBHOME IS SET TO $BBHOME" # echo "***** BBTMP IS SET TO $BBTMP" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi if test ! -d "$BBVAR" then echo "I can't access BBVAR ($BBVAR)... exiting" exit 1 fi # echo $BBVAR PDATE=`$BBHOME/bin/touchtime -x "$MON $DA $YR"` echo "Archiving data prior to $MON $YR [$PDATE]" fi ARCHIVE="$BBVAR/archive" # # NEXT, MAKE SURE WE HAVE AN ARCHIVE DIRECTORY AVAILABLE # if test ! -d $ARCHIVE then mkdir $ARCHIVE if test "$?" != "0" then echo "Couldn't make archive directory - perms trouble?" exit 1 fi fi # # NOW THE WORK BEGINS # YRMO="${YR}${MO}" mkdir $ARCHIVE/$YRMO if test "$?" != "0" then echo "Couldn't make directory - can't continue" exit 3 fi # # THIS PILE OF UGLINESS IS BECAUSE touchtime CAN'T ACCEPT AN epoch date # AS AN ARGUMENT, i.e. TO CREATE A FILE WITH A PARTICULAR TIMETICK... # OFFSET=`$BBHOME/bin/touchtime -d "$MON $DA $YR"` OFFSET=`$EXPR \-1 \* $OFFSET` OFFSET=`$EXPR $OFFSET \/ 60` #echo "OFFSET IS $OFFSET" $BBHOME/bin/touchtime $OFFSET $ARCHIVE/.$YRMO # ARCHIVE HISTLOGS # # NOTICE - I'M USING cpio SINCE I CAN'T REMEMBER HOW TO GET # tar TO READ A REALLY LONG LIST FROM stdin (THE `cat LIST` # THING BLOWS UP WHEN THERE ARE A LOT OF FILES TO ARCHIVE # # TO RESTORE: cpio -idumBcv < FILENAME # echo "*** Processing histlogs" cd $BBVAR/histlogs $FIND . ! -newer $ARCHIVE/.$YRMO -type f -print > $BBTMP/histlogs.$$ $CAT $BBTMP/histlogs.$$ | cpio -ocvB > $ARCHIVE/$YRMO/histlogs.$YRMO gzip $ARCHIVE/$YRMO/histlogs.$YRMO echo "*** Removing old histlogs, this is very slow, be patient!" # NOW TOAST 'EM for file in `$CAT $BBTMP/histlogs.$$` do $RM $file done $RM $BBTMP/histlogs.$$ # AND REMOVE THE TAG FILE $RM $ARCHIVE/.$YRMO # NOW ARCHIVE THE REST OF THE IMPORTANT STUFF IN acks and hist # THIS IS A LITTLE TRICKIER BECAUSE WE HAVE TO SPLIT EACH FILE # BY TIMESTAMP... EACH OF WHICH HAS THEM IN A DIFFERENT POSITION. cd $BBVAR/acks # FIGURE OUT WHERE notifications.log SHOULD BE SPLIT # THE TIMESTAMP IS IN THE 10th FIELD # PARSE IT AND STORE THE LINE NUMBER # SAME WITH THE REST OF THEM. LINENO=1 echo "*** Processing notifications.log" $CAT notifications.log | while read line do set $line shift # echo "TEST $9 vs $PDATE" if test "$9" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.notif.$$ break # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.notif.$$" then FIRSTLINE=`$CAT $BBTMP/prune.notif.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP notifications.log $BBTMP/not.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/not.$$ > $ARCHIVE/$YRMO/notifications.log.$YRMO $CAT $BBTMP/not.$$ | $SED "1,${LASTLINE}d" > notifications.log fi $RM $BBTMP/not.$$ $RM $BBTMP/prune.notif.$$ if test -f $ARCHIVE/$YRMO/notifications.log.$YRMO then gzip $ARCHIVE/$YRMO/notifications.log.$YRMO fi fi echo "*** Processing recoveries.log" LINENO=1 $CAT recoveries.log | while read line do set $line if test "$#" = "10" # 10 ARGS IN A LINE then shift; fi # echo "TEST $8 vs $PDATE" if test "$8" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.recoveries.$$ break # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.recoveries.$$" then FIRSTLINE=`$CAT $BBTMP/prune.recoveries.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP recoveries.log $BBTMP/recoveries.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/recoveries.$$ > $ARCHIVE/$YRMO/recoveries.log.$YRMO $CAT $BBTMP/recoveries.$$ | $SED "1,${LASTLINE}d" > recoveries.log fi $RM $BBTMP/recoveries.$$ $RM $BBTMP/prune.recoveries.$$ if test -f $ARCHIVE/$YRMO/recoveries.log.$YRMO then gzip $ARCHIVE/$YRMO/recoveries.log.$YRMO fi fi echo "*** Processing recoverymsgs.log" LINENO=1 $CAT recoverymsgs.log | while read line do set $line if test "$#" = "16" # 16 ARGS IN A LINE then shift; fi # echo "TEST $9 vs $PDATE" if test "$9" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.recoverymsgs.$$ break # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.recoverymsgs.$$" then FIRSTLINE=`$CAT $BBTMP/prune.recoverymsgs.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP recoverymsgs.log $BBTMP/recoverymsgs.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/recoverymsgs.$$ > $ARCHIVE/$YRMO/recoverymsgs.log.$YRMO $CAT $BBTMP/recoverymsgs.$$ | $SED "1,${LASTLINE}d" > recoverymsgs.log fi $RM $BBTMP/recoverymsgs.$$ $RM $BBTMP/prune.recoverymsgs.$$ if test -f $ARCHIVE/$YRMO/recoverymsgs.log.$YRMO then gzip $ARCHIVE/$YRMO/recoverymsgs.log.$YRMO fi fi echo "*** Processing acklog" LINENO=1 $CAT acklog | while read line do set $line # echo "TEST $1 vs $PDATE" if test "$1" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.acklog.$$ break; # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.acklog.$$" then FIRSTLINE=`$CAT $BBTMP/prune.acklog.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP acklog $BBTMP/acklog.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/acklog.$$ > $ARCHIVE/$YRMO/acklog.$YRMO $CAT $BBTMP/acklog.$$ | $SED "1,${LASTLINE}d" > acklog fi $RM $BBTMP/acklog.$$ $RM $BBTMP/prune.acklog.$$ if test -f $ARCHIVE/$YRMO/acklog.$YRMO then gzip $ARCHIVE/$YRMO/acklog.$YRMO fi fi # # NOW DO THE CONTENTS OF THE hist DIRECTORY # # 3 FORMATS # allevents HAS THE TIMESTAMP IN THE 3rd FIELD # summary-by-machine (i.e. www.bb4.com) has the timestamp in the 2nd field # individual row.col tests have the results in the 7th field # NORMALIZE EVERYTHING SO THE DATESTAMP IS IN THE SECOND COLUMN mkdir $ARCHIVE/$YRMO/hist.$YRMO # MAKE THE HISTORY DIR if test "$?" != "0" then echo "Couldn't make directory - can't continue" exit 4 fi cd $BBVAR/hist for file in `$LS` do echo "*** Processing hist: $file" $RM -f $BBTMP/prune.$file.$$ $BBTMP/$file.$$ LINENO=1 $CAT $file | while read line do set $line if test "$#" = "8" then if test "$file" = "allevents" then shift; else shift; shift; shift; shift; shift; fi elif [ "$3" -lt 32 ] # if a day then it's a host.service file then if test "$file" != "allevents" then shift; shift; shift; shift; shift; fi fi # echo "TEST $2 vs $PDATE" if test "$2" -ge "$PDATE" then # echo "DONE AT $LINENO" echo $LINENO > $BBTMP/prune.$file.$$ break; # OUR WORK IS DONE HERE. fi LINENO=`$EXPR $LINENO + 1` done if test -f "$BBTMP/prune.$file.$$" then FIRSTLINE=`$CAT $BBTMP/prune.$file.$$` LASTLINE=`$EXPR $FIRSTLINE - 1` # echo "LASTLINE IS $LASTLINE" $CP $file $BBTMP/$file.$$ if test "$LASTLINE" -gt "0" then $HEAD -$LASTLINE $BBTMP/$file.$$ > $ARCHIVE/$YRMO/hist.$YRMO/$file $CAT $BBTMP/$file.$$ | $SED "1,${LASTLINE}d" > $file fi $RM $BBTMP/$file.$$ $RM $BBTMP/prune.$file.$$ fi done # # NOW TAR UP AND COMPRESS THE HIST FILE AND REMOVE THE BITS... # cd $ARCHIVE/$YRMO tar cvf hist.$YRMO.tar hist.$YRMO gzip hist.$YRMO.tar $RM -rf hist.$YRMO ./bb/bb19c/bin/bb0100755002342100007640000006422407616533071011333 0ustar bbbbELF@Ž4¬Q4 (44€4€ÀÀôô€ô€€€ + + + » » |" , ¼ ¼   /lib/ld-linux.so.2GNU%:$.85,2!/49(0'"*761&   %# ) +-3§‹>$‹žÉ4‹ÁÙ@½<D‹DéT‹"ÿd‹:½t‹-9„‹ ”‹Ðr¤‹Á´‹x‰Ä‹“}Ô‹\ä‹p'ô‹ÜŒ¬"nD½›Œ2u$Œ/D4ŒD@DŒ@úTŒÂyH½dŒÅÒtŒ7¯„ŒÊË”ŒªF¤Œqg´Œ˜®ÄŒ¹ÅÔŒ-ÐäŒ~MôŒ"IÐQ·-$ü¨4®ŽD¶TÀd-tô„=!”>5¤h/L½'´=ôP½Äœ“Ô ™$¨_ä-cô=jŽ¸•Ž: $Ž‹__gmon_start__libc.so.6strcpyutimeconnect__ctype_bgetenvfgetsmemcpy__cxa_finalizemallocsocketreaddirfflush__ctype_toupperputenvsendalarm__sigsetjmprenamestrrchrcallocfprintfctimestrcatinet_addr__deregister_frame_infostdinstrstrsignalstrncmpstrncpysscanfstrncatfreadregcompmemsetregexectimeopendirgethostbynamesprintffclosestderr__xstat__errno_locationexitfopen_IO_stdin_usedstrspn__libc_start_mainregfreestrchrclosedir__ctype_tolower__register_frame_infoclosefreeGLIBC_2.1.3GLIBC_2.1GLIBC_2.0si  ii ii  œ¼8@½D½H½L½.P½0Իػܻà»ä»è»ì»ð» ô» ø» ü» ¼ ¼¼ ¼¼¼¼¼ ¼$¼(¼,¼0¼4¼8¼<¼@¼D¼ H¼!L¼"P¼#T¼$X¼%\¼&`¼'d¼(h¼)l¼*p¼+t¼,x¼-|¼/€¼1„¼2ˆ¼4Œ¼5¼6”¼7˜¼9U‰åƒìèmèè¾ÉÃÿ5Ì»ÿ%лÿ%Ô»héàÿÿÿÿ%Ø»héÐÿÿÿÿ%Ü»héÀÿÿÿÿ%à»hé°ÿÿÿÿ%ä»h é ÿÿÿÿ%è»h(éÿÿÿÿ%ì»h0é€ÿÿÿÿ%ð»h8épÿÿÿÿ%ô»h@é`ÿÿÿÿ%ø»hHéPÿÿÿÿ%ü»hPé@ÿÿÿÿ%¼hXé0ÿÿÿÿ%¼h`é ÿÿÿÿ%¼hhéÿÿÿÿ% ¼hpéÿÿÿÿ%¼hxéðþÿÿÿ%¼h€éàþÿÿÿ%¼hˆéÐþÿÿÿ%¼héÀþÿÿÿ% ¼h˜é°þÿÿÿ%$¼h é þÿÿÿ%(¼h¨éþÿÿÿ%,¼h°é€þÿÿÿ%0¼h¸épþÿÿÿ%4¼hÀé`þÿÿÿ%8¼hÈéPþÿÿÿ%<¼hÐé@þÿÿÿ%@¼hØé0þÿÿÿ%D¼hàé þÿÿÿ%H¼hèéþÿÿÿ%L¼hðéþÿÿÿ%P¼høéðýÿÿÿ%T¼héàýÿÿÿ%X¼héÐýÿÿÿ%\¼héÀýÿÿÿ%`¼hé°ýÿÿÿ%d¼h é ýÿÿÿ%h¼h(éýÿÿÿ%l¼h0é€ýÿÿÿ%p¼h8épýÿÿÿ%t¼h@é`ýÿÿÿ%x¼hHéPýÿÿÿ%|¼hPé@ýÿÿÿ%€¼hXé0ýÿÿÿ%„¼h`é ýÿÿÿ%ˆ¼hhéýÿÿÿ%Œ¼hpéýÿÿÿ%¼hxéðüÿÿÿ%”¼h€éàüÿÿÿ%˜¼hˆéÐüÿÿ1í^‰áƒäðPTRh¨hìŠQVhŒè#þÿÿô‰öU‰åSPè[ÃZ-‹ƒÔ…ÀtÿЋ]üÉÉöU‹¬»‰åƒì…ÒuI‹¨»‹…Àtt&B£¨»ÿ‹¨»‹ …Éu긌…Àtƒì h´»è(ýÿÿƒÄ¸£¬»‰ì]ÃvU‰åƒì‰ì]öU‰å¸T‹ƒì…ÀtƒìhT½h´»è3üÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰åWVSìÈ‹]h@¨è+üÿÿƒÄ ÿu PSè ‰…<ÿÿÿÇ$K¨è üÿÿ‰…DÿÿÿÇ$R¨èúûÿÿ‰…@ÿÿÿÇ$[¨èèûÿÿ‰ÆƒÄ…öt‰÷ü¹ÿÿÿÿ°ò®ƒùþu¾f¨ƒ½Dÿÿÿ„´…ö„¬ƒì ½HÿÿÿW…XÿÿÿP]ØShq¨ÿu èrýÿÿƒÄjh…¨SèbüÿÿƒÄ…ÀusƒìWVèAüÿÿƒÄ…Àtb¡Œ¨‹U ‰f¡¨f‰B‰ÑƒÁ€z+u#¡L½ö@W uÆ A€9t¾¡L½öDP tèƒìÿu ÿµ@ÿÿÿÿµDÿÿÿèý‰…<ÿÿÿƒÄ‹…<ÿÿÿeô[^_]ÉöU‰åWVSì ‹u ¿ƒ}t2ƒìh ¨ÿ5D½è»úÿÿƒÄhèÿ5D½è¨úÿÿÇ$èlüÿÿ‹F€8-u8èûÿÿëƒìSÿvèLþÿÿ‰ÇƒÄƒìÿ5P½hÿSè7ûÿÿƒÄ…ÀuÔë‰öƒìÿvÿvèþÿÿ‰ÇƒÄƒì WèüÿÿU‰åSì ÿ5l½hà¨øßÿÿSèüÿÿƒÄSjè,Çp½‹]üÉÃU‰åWVSì< Ç…ÄßÿÿÇp½‹u¿þ¨¹üó¦—Â’À‹M‰Ðßÿÿ8Âu9‹E ‰…Ðßÿÿë.‰öƒìh@©ØßÿÿSèüÿÿƒÄSjè­¸ÿÿÿÿéWvƒì‹½Ðßÿÿü¹ÿÿÿÿ°ò®÷ÑQjèKûÿÿ‰…ÌßÿÿƒÄéØ‹Ðßÿÿ¾¡L½‰ÁöDP tÿ…Ðßÿÿ‹•Ðßÿÿ¾öDA uê‹Ðßÿÿ€9„²‰Mƒìj QèÑøÿÿƒÄ…ÀtÆ@‰…Ðßÿÿë ‰öÇ…Ðßÿÿ‹E£l½ƒ½Ìßÿÿt4‹½Ìßÿÿü¹ÿÿÿÿ°ò®ƒùþtƒìÿµÐßÿÿÿµÌßÿÿè˜ùÿÿƒÄ…À…èƒì ÿuè¢ùÿÿ‰…ÔßÿÿƒÄƒøÿuj‹U€:u ƒì h©ë‰öƒì ÿuèúÿÿ‰ÁƒÄ…Éu(ƒìÿuh©ØßÿÿSèÅúÿÿƒÄSjèbé}‹A•Ôßÿÿƒìÿq ÿ0Rè]ùÿÿƒÄ‹}ü¹ÿÿÿÿ°ò®÷щÈßÿÿƒì Qè|øÿÿ‰…ÄßÿÿƒÄ…À„GþÿÿƃìÿuÿµÄßÿÿèùÿÿ}Øü¸¹ó«fÇEØ‹…Ôßÿÿ‰E܃ĸÀfÁÈf‰EÚƒìjh€ÝèIøÿÿƒÄh4‘jèº÷ÿÿÇ$è.úÿÿƒÄ jjjèúÿÿ‰ÇƒÄ…ÿy'ƒìhc©ØßÿÿSèÓùÿÿƒÄSjèp»ÿÿÿÿëYƒìjEØPWèùÿÿƒÄ…Ày*ƒìÿuh€©ØßÿÿSè“ùÿÿƒÄSjè0»ÿÿÿÿëj‹…Èßÿÿ@PÿµÄßÿÿWè ùÿÿ‰ÃƒÄƒì jè‹ùÿÿƒÄƒ=p½u…Û Çp½ƒì Wè¸öÿÿƒÄƒ½ÐßÿÿtO‹•Ðßÿÿ€:t,¾¡L½‰ÁöDP tÿ…Ðßÿÿ‹…Ðßÿÿ€8t ¾öDA u僽Ðßÿÿt‹•Ðßÿÿ€:…ýÿÿƒ½Ìßÿÿtƒì ÿµÌßÿÿèVøÿÿƒÄƒ½Äßÿÿtƒì ÿµÄßÿÿè<øÿÿƒÄ¡p½eô[^_]ÃU‰åWVSƒì ‹]ÇEì‰]ð…Ûtƒ}tƒ}t ƒ} …Ù¸éw‰öƒ}ìu*ƒì ÿu èOöÿÿ‰EìƒÄ…À„ƒìÿu jPèó÷ÿÿƒÄ9Þt@Æ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰È÷ÐTþ‹E H9ÂÃìSÿuìèŸöÿÿƒÄ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷Ò‹}¹ÿÿÿÿò®‰Ë‰Ø÷ÐTþ‹E H9ƒƒìÿuÿuìè]öÿÿ‹}ü¹ÿÿÿÿ°ò®‰Ê‰Ð÷Ð\ÿƒÄƒìÿuSè÷õÿÿƒÄ‰Æ…ö…ÿÿÿƒ}ì„€‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰Î‰ð÷ÐTþ‹E H9Â~,ë ‰ö¸ëNƒìÿuìÿuðèj÷ÿÿƒÄÿuìè¯öÿÿ¸ë-ƒìSÿuìè¼õÿÿƒÄÿuìÿuðè>÷ÿÿƒÄÿuìèƒöÿÿƒÄ¸eô[^_]ÃvU‰åWS‹]…Ût@‰ßü¹ÿÿÿÿ°ò®ƒùþt/‰Ù¾¡L½‰ÇöDP t A¾öDG uõ9Ët ƒìQSè×öÿÿƒÄeø[_]ÃU‰åWS‹]…Ût;‰ßü¹ÿÿÿÿ°ò®ƒùþt*‰ß¹ÿÿÿÿò®÷ÑL þë‰öÆI9Ùr¾¡L½öDP ué[_]ÃU‰åSƒì‹]SèPÿÿÿ‰$èœÿÿÿ‹]üÉÃvU‰åWƒì‹U‰×ü¹ÿÿÿÿ°ò®÷ÑI¸ƒùw7¸ÿÿÿÿ‰Eì‰Eð‰Eô‰EøƒìEøPEôPEðPEìPhÀ©RèNõÿÿƒÄ ¸‹}üÉÃU‰åWVSƒìL‹u‹] ÇE´ƒ>u:ƒì hÌ©è8óÿÿ‰ÂƒÄ…Òt$‰×ü¹ÿÿÿÿ°ò®ƒùþtƒìhÔ©Rè`õÿÿ‰ƒÄƒ>„MƒìÿujSèõÿÿƒÄE؉E°EȉE¬E¸‰E¨é ‰öÇE´éƒì Sèãþÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþ„Û€; „Ò€;#„É÷Eu¸÷E„¢¾¡L½öDP„ÇEØÇEÜÇEàÇEäÇEÈÇEÌÇEÐÇEÔÇE¸ÇE¼ÇEÀÇEăìjSÿu°èNôÿÿƒÄÿu¨ÿu¬hÖ©ÿu°èØóÿÿƒÄÿu¬è-þÿÿƒÄƒø„ ÿÿÿƒìÿujSèóóÿÿƒÄƒìÿ6‹EHPSè€òÿÿƒÄ…À…éþÿÿƒ>tƒ}´uƒì ÿ6èÐòÿÿǃċE´eô[^_]ÃU‰åWVSì@¸ƒ}„f‹}ü¹ÿÿÿÿ°ò®¸ƒùþ„K‹}¹ÿÿÿÿ°ò®÷ÑI‹EH9Áƒ+ƒìÿuÿu èÍóÿÿÇ$Ì©è!ñÿÿƒÄ…À„ƒìhÔ©PèXóÿÿ‰…ä¿ÿÿƒÄ…À„ç颉öƒ½à¿ÿÿ„{è¿ÿÿ‰ßü¹ÿÿÿÿ°ò®¸ùÿßÿÿ”ÀH!…à¿ÿÿƒì Sè3üÿÿ¾•è¿ÿÿ¡L½ƒÄöDP„S‰Ù‰ÂA¾öDBuõ€9.tð‰Â¡L½öDP „,ÆAƒìQèßÿÿSèþòÿÿ‰$èÖûÿÿÇ…Ü¿ÿÿÇ$Ü©è@ðÿÿƒÄ…Àt#‰Æ¿á©¹üó¦—Â’À8Âu Ç…Ü¿ÿÿ‹}ü¹ÿÿÿÿ°ò®÷ÑqÿèßÿÿƒìVÿuSèÑðÿÿƒÄ…À…  ƒ½Ü¿ÿÿt¾¡L½öDP u €9të~¾¡L½öDP u €9t€9.ue…è¿ÿÿ‰Æ¿æ©¹üó¦—Â’À8Âuƒ}tƒì…è¿ÿÿPÿu èòÿÿƒÄ¸ë_‰ö½è¿ÿÿü¹ÿÿÿÿ°ò®ùÿßÿÿt Ç…à¿ÿÿƒìÿµä¿ÿÿhÿ…è¿ÿÿPèìïÿÿƒÄ…À…1þÿÿƒì ÿµä¿ÿÿèCðÿÿƒÄ¸eô[^_]ÃvU‰åWVS‹]¶ƒèru¶Cƒèeu ¶Cƒèdu¶C…Àu ¸é¢v‰Þ¿ò©¹üó¦—Â’À8Âu¸ë‰Þ¿ù©¹üó¦—Â’À8Âu¸ë_‰Þ¿ª¹üó¦—Â’À8Âu¸ë?‰Þ¿ª¹üó¦—Â’À8Âu¸ë‰Þ¿ ª¹üó¦—Á’¸8Ñ”À[^_]ÃU‰åVSƒì‹u‹] ŠEˆE÷€;t"ëŠU÷ˆ¾ƒìPVè¦íÿÿƒÄ…ÀuçC€;uæeø[^]ÉöU‰åƒìEüPèîÿÿEü‰$èïÿÿƒÄPh€½èXðÿÿƒÄj h€½èYíÿÿƒÄ…ÀtƸ€½ÉÃU‰åWS‹]€;tv¾¡L½öDP tÆ C€;uèhªhª‰ßü¹ÿÿÿÿ°ò®÷ÑIQSè÷ÿÿ¸eø[_]ÃU‰åWVSƒì4‹} ü¹ÿÿÿÿ°ò®÷ѱÿVjèîîÿÿ‰ÃƒÄ¸…Û„D÷Etƒìÿu hªSèRïÿÿëD÷Etƒìÿu hªSè6ïÿÿë(÷Etƒìÿu h!ªSèïÿÿë ƒìÿu SèLïÿÿƒÄ¿ ÷Et¿ ÷Eth%ªh*ªVSè@öÿÿh,ªh/ªë@h1ªh7ªVSè#öÿÿh/ªh,ªVSèöÿÿƒÄ h,ªh/ªVSèþõÿÿh7ªh1ªVSèíõÿÿƒÄ ƒìWSEÈPè¸íÿÿƒÄ…Àtƒì Sèøíÿÿ¸ë9ƒì SèçíÿÿÇ$jjÿu]ÈSè ëÿÿ‰ÆƒÄSèìÿÿƒÄ¸…ö”Àeô[^_]ÃU‰å‹M…Éë‰ö¾‹@½‹‚ˆAt€9uê]ÃU‰å‹M…Éë‰ö¾‹H½‹‚ˆAt€9uê]ÃU‰åWVSìl ‹}ǵˆßÿÿé˜C Pÿu h:ªVè¦íÿÿEˆƒÄ PVjè×ëÿÿƒÄ…Àupfƒ}˜yÇ÷E u)ëXöE™@tÇ÷E uëAÇ÷Et1ƒìjÿuƒÃ SèœýÿÿƒÄ…ÀtƒìSÿuèmíÿÿƒÄ¸ë vƒì ÿuè5íÿÿ‰ÃƒÄ…Û…Pÿÿÿ¸eô[^_]ÃvU‰åWVSƒì‹}‹u Vèìÿÿ‰ÃƒÄ¸…Ût=ƒìÿuÿuÿuÿuVSèçþÿÿƒÄ ƒøu ‰¸ë‰öƒì Sè£ëÿÿǸeô[^_]ÃU‰åƒì‹E…Àu¸ë(ƒìÿuÿuÿuÿuÿu PèŒþÿÿ‰ÂƒÄ ¸ƒú”ÀÉÉöU‰åƒì‹E…Àt ƒì Pè:ëÿÿÉÃU‰åVSƒì‹u‹] [›ÁãEôPèhêÿÿ؉Eô‰Eè‰EìƒÄh@ªVèïëÿÿƒÄ…Àtƒì Pè¿êÿÿƒÄë‰öƒìVhBªÿ5D½èdéÿÿ¸ëƒìEèPVèoëÿÿ¸eø[^]ÃvU‰åWS‹U‹] …ÒtM…ÛtI‰×ü¹ÿÿÿÿ°ò®¸ƒùþt8ƒìÿuRèkëÿÿ‰ÇƒÄ…ÿtƒìShRªWèóèÿÿ‰<$è+êÿÿ¸ë¸eø[_]ÃU‰åƒì hUªÿu ÿuè‚ÿÿÿÉÃU‰åƒì h@ªÿu ÿuèjÿÿÿÉÃU‰åWVSƒì|‹u‹] ÇE„¸…ö„¦‰÷ü¹ÿÿÿÿ°ò®¸ƒùþ„Œ…ÛŽ„EˆƒìPVjèéÿÿƒÄ…Àuk‰ß9]´}‹}´ƒìhÔ©Vè•êÿÿ‰ÃƒÄ…ÛtJƒìGPjèþéÿÿ‰E„ƒÄ…Àt&SjWPèŠèÿÿƒÄ…Àuƒì ÿu„èøéÿÿÇE„ƒÄƒì Sè%éÿÿƒÄ‹E„eô[^_]ÃvU‰åWVSƒì‹]‰ßü¹ÿÿÿÿ°ò®÷Ñqÿh`ªSèléÿÿƒÄ9ðt5Sƒì èÌùÿÿƒÄ PhÀªÿ5D½èˆçÿÿƒÄÿ5D½èªçÿÿ¸é‰ßü¹ÿÿÿÿ°ò®÷Ѹ€| þ.te‰ß¹ÿÿÿÿ°ò®÷Ѹ€| þ,tLƒìj.SèòæÿÿƒÄ…Àu¸ë3¸€;.t)€;-t$€;,tƒþ~ƒìj/SèPèÿÿƒÄ‰Â¸…Ò”Àeô[^_]ÃU‰åWVSƒì ‹U¾ƒ} tE…ÒtA»°»‰ßü¹ÿÿÿÿ°ò®ƒùþt+‰×¹ÿÿÿÿò®ƒùþtƒìÿu RSƒì èÉøÿÿƒÄ Phüªë]‰öƒ} t"»°»‰ßü¹ÿÿÿÿ°ò®ƒùþt ƒì ÿu Së%vƒ} t>…Òt:‰×ü¹ÿÿÿÿ°ò®ƒùþt)ƒì ÿu Rƒì èjøÿÿƒÄ Ph «ÿ5D½è&æÿÿƒÄ ë%ƒìèHøÿÿƒÄ Ph «ÿ5D½èæÿÿ¾ƒÄƒì ÿ5D½èæÿÿ‰ðeô[^_]ÃU‰åWVSƒì ‹u‹]…ötƒ} u ¸ÿÿÿÿéõ‰÷ü¹ÿÿÿÿ°ò®¸ÿÿÿÿƒùþ„Ú‰÷¹ÿÿÿÿ°ò®÷ÑA¸ÿÿÿÿ9M‚¾ƒìÿujSè¬çÿÿƒÄVSè"èÿÿƒÄhJ«Sè„æÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈPÿu Sèôäÿÿ‰$èŒåÿÿ‰EðƒÄ…Àtc‰ßü¹ÿÿÿÿ°ò®‰Ê÷ÒJ‰÷¹ÿÿÿÿò®÷Ñ9ÊvC‰÷¹ÿÿÿÿò®‰È÷ÐTÿ‰ß¹ÿÿÿÿ°ò®÷щMð‰÷¹ÿÿÿÿò®MðÑéÆDƒì Sè%åÿÿ‰EðƒÄ‹Eðeô[^_]ÃU‰åWS‹U…Ò„–‰×ü¹ÿÿÿÿ°ò®ƒùþ„‰Óë`vŠSBÎ<wRˆÑÁá¾C‹H½Š‚BÐ< w L ÐëvB¿L É<w%ˆ C€{tƒìCPSèûæÿÿƒÄë ‰öÆë!vC…Ût€;tƒìj%SèçãÿÿƒÄ‰Ã…Ûu†eø[_]ÃvU‰åWVSì`‹}‹] SWè›ãÿÿ‰ÆƒÄ…öt1ƒìèJäÿÿƒÄÿ0SWh`«èŸÿÿSèBæÿÿƒÄSh‡«èÜüÿÿƒÄ‰ðeô[^_]ÃvU¡¸»‰åSƒìƒøÿ»¸»tv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[þvèwæÿÿ‹]üÉÃBBDISPLAYSBBPAGEBBPAGERSPAGELEVELSred purple%15s %127s %15s %*sstatuspage bb: incorrect number of arguments Format: CONNECTION TO %s TIMED OUT...0.0.0.0localhostUnknown host: %sCAN'T ALLOCATE MEMORY IN bbsend() Can't open stream socketCAN'T CONNECT TO bbd SERVER @ %s%d.%d.%d.%dBBHOSTSr%s %sFQDNTRUE0.0.0.0redpurpleyellowgreenblueclear ^(%s)$^%s%s$[.,]..**([_])]*%s/%saCan't touch %s %swabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:%s bbd FILENAME CONSTAINS INVALID CHARACTERS - IGNORED: %s %s %s %s %s %s %s %s %s bbutils bb_errmsg() invalid arguments =Could not rename %s to %s - errno: %d bb_renameÄ»bbÿÿÿÿÿÿÿÿ ¼‹*‹:‹J‹Z‹j‹z‹Š‹š‹ª‹º‹Ê‹Ú‹ê‹ú‹ ŒŒ*Œ:ŒJŒZŒjŒzŒŠŒšŒªŒºŒÊŒÚŒêŒúŒ *:JZjzŠšªºÊÚêú ŽŽ*Ž ìŠ ¨(L†¬‚  È»\‰,‰0þÿÿoìˆÿÿÿoðÿÿovˆ¢ƒddŽddŽ9<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m ddŽinit.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((„7 ¬‚¬ ?L†L*GÿÿÿovˆvtTþÿÿoìˆì@c ,‰, l 4‰4 (u \‰\  ~ìŠì „‹ 0‰@Ž@À¨(• ¨ (€  » +£´»´+­¸»¸+´À»À+»È»È+ØÀ ¼ , É@½@-Ï@½@-Ü Ô@-¤ Úä4ƒãgN°ìP ·Pò„V D a€ô€(¬‚L†vˆìˆ,‰4‰ \‰ ìŠ ‹ @Ž ¨ ¨ »´»¸»À»È» ¼@½@½ñÿ dŽ dŽ +ñÿ2ñÿ Ž =¨»AÀ»O¬»[Ž q´»„ðŽ T½˜ ¤0 ¯°»½¸»2ñÿ À§ ËÀ§ á¼»¤ð§ ¯´»îÄ»û´»ñÿ ¨ ñÿ @ ñÿ 4‘ 4‘; &l½-p½0ñÿ H• 8€½ F¤H Q´¢ \èŸ$ g‹>y$‹žŒ  Ý œ4‹Á®`§] ¸@½Ó ¼ÜD‹DïT‹"„œÜ d‹:- ¨4œ¢ =t‹-P„‹ b”‹Ðt¤‹†´‹x™Œ¤ £X—K ´$˜Ô Ã¥  ÍÄ‹“ßÔ‹ûH•¹ ìŠ ä‹pô‹/Œ¬"RD½dŒ2{$Œ/Ž4ŒDž°»¥@Ž ¬DŒ@½ìT ÇTŒÂÙH½ô £ë `B dŒÅ"tŒ77ø™‰ A@½ñÿMŒ¨ R4¢h \¤— q„ŒÊŽì h š”Œª¬ » ·¨½¤ŒqÏ´Œ˜áÄŒ¹ô”¡ ÿÔŒ-äŒ~$ôŒ"@ÐS·l$ü4®‘D¡p‘Ø ¨TÀºd-Ì@½ñÿÓ@J ÜÈ»òtôÞñÿ@ž„ „=”>.—S >¤hPL½e´=xT¡> ƒP½”Ì¢Ñ Äœ°Ô Á$¨Ð€Ýœ×ä-ê »÷¬¡… Ä—_ ô= Ž¸3Ž:D°¦­ TÄŸ$ _ n$Ž‹initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__bb.cbbsend.cbbsend_timeoutipaddrrcutils.cworktimestr.0gettimestrappendfilestrtoupperrename@@GLIBC_2.0strncat@@GLIBC_2.0getdirnextentrystrchr@@GLIBC_2.0bb_rename__ctype_tolower@@GLIBC_2.0_DYNAMICregexec@@GLIBC_2.0__register_frame_info@@GLIBC_2.0getcolornumclose@@GLIBC_2.0_fp_hwsavefilefprintf@@GLIBC_2.0getenv@@GLIBC_2.0signal@@GLIBC_2.0fflush@@GLIBC_2.0regfree@@GLIBC_2.0bb_errmsgstriptrailspacesgetlinebbhostsbb_putenvputenv@@GLIBC_2.0__errno_location@@GLIBC_2.0replacestr_initmalloc@@GLIBC_2.0fread@@GLIBC_2.0__deregister_frame_info@@GLIBC_2.0stderr@@GLIBC_2.0__sigsetjmp@@GLIBC_2.0__xstat@@GLIBC_2.0time@@GLIBC_2.0bbprog_startfgets@@GLIBC_2.0space_sepstrstr@@GLIBC_2.0__ctype_toupper@@GLIBC_2.0valid_lognameclean_stringstrncmp@@GLIBC_2.0inet_addr@@GLIBC_2.0getipaddr__bss_startmainwritefilestripleadtrailspaces__libc_start_main@@GLIBC_2.0getdirfirststrcat@@GLIBC_2.0data_start_finimemcpy@@GLIBC_2.0fclose@@GLIBC_2.1strrchr@@GLIBC_2.0getdirdonectime@@GLIBC_2.0closedir@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3opendir@@GLIBC_2.0gethostbyname@@GLIBC_2.0regcomp@@GLIBC_2.0strspn@@GLIBC_2.0exit@@GLIBC_2.0bbsendcalloc@@GLIBC_2.0sscanf@@GLIBC_2.0_edatabbnotify_GLOBAL_OFFSET_TABLE_free@@GLIBC_2.0_endmatchsend@@GLIBC_2.0utime@@GLIBC_2.0stripleadspacesmemset@@GLIBC_2.0__ctype_b@@GLIBC_2.0connect@@GLIBC_2.0getdirnextstdin@@GLIBC_2.0readfilestrncpy@@GLIBC_2.0fopen@@GLIBC_2.1_IO_stdin_usedjmpenvsprintf@@GLIBC_2.0__data_starttouchtimevalid_ipaddrsocket@@GLIBC_2.0readdir@@GLIBC_2.0alarm@@GLIBC_2.0convert_web_strstrtolower__gmon_start__strcpy@@GLIBC_2.0./bb/bb19c/bin/bbd0100755002342100007640000026034507616533071011501 0ustar bbbbELFà”4 94 (44€4€ÀÀôô€ô€€€€€€€¢€¢ÐÄøø£ø£   /lib/ld-linux.so.2GNUCW CRV;:F2Q)$1H(* /+,TOSDU=&M'N>J%-GL@BI90   4#3!"<A7E8K.P 65?ºØ>ùè>¡øžÁÀ ¤_2—(Rí8DÐH"¾X.ßhR x&æˆ:˜-•¨2F¸ hÈзؕèxzø%‘R‘:Î(‘“Q8‘ÏH‘&òX‘=Õh‘àx‘œŽˆ‘=˜‘pª¨‘2f¸‘-°È‘3Ø‘¬"è‘-;¤¤æø‘2I’/K’=V(’ç!8’/õH’DmX’@©h’Á¤x’Iaˆ’¢˜’ÚM¨’«¾¨¤o¸’Å)È’7ƒØ’ʆè’]ø’ª$“=s“q4(“˜8“¹H“-±X“~h“"úx“Ј“·¶˜“ü|¨“®b¸“È“ÀšØ“-ìè“ôÕø“=)”>È”h<¬¤4(”=w8”œgH” mä`/X”=,h”-Bx”d¨ˆ”=¯˜”¸Ú¨”:\¸”+ È”‹__gmon_start__libc.so.6strcpywaitpidutimerecvconnect__ctype_bgetenv__strtol_internalgetpidfscanffgetsmemcpypclose__cxa_finalizemallocsiglongjmpsleepsocketreaddirfflush__ctype_toupperputenvsendalarmpopen__sigsetjmpacceptrenamestrrchrcallocfprintfctimestrcatbindinet_addr__deregister_frame_infosetsockoptfseekwaitstrstrsignalstrncmpstrncpyunlinkrealloclistenforksscanfstrncatexeclpfreadregcomplocaltimememsetftellinet_ntoagetservbyportregexectimeopendirsyslogstrcmpgethostbynamegetservbynamesprintffclosestderrfwrite__xstat__errno_locationexitfopen_IO_stdin_usedstrspn__libc_start_mainregfreestrchrfputssetsidclosedirmkdir__ctype_tolower__register_frame_infoclosefreeGLIBC_2.1.3GLIBC_2.1GLIBC_2.0si ñii ýii ô£U ¤¤¤$¨¤1¬¤I´¢¸¢¼¢À¢Ä¢È¢Ì¢Т Ô¢ Ø¢ Ü¢ ࢠä¢è¢ì¢ð¢ô¢ø¢ü¢£££ £££££ £$£(£,£ 0£!4£"8£#<£%@£&D£'H£(L£)P£*T£+X£,\£-`£.d£/h£0l£2p£3t£4x£5|£6€£7„£8ˆ£9Œ£:£;”£<˜£=œ£> £?¤£@¨£A¬£B°£C´£D¸£E¼£FÀ£GÄ£HÈ£JÌ£KУLÔ£NØ£OÜ£Pà£Qä£Rè£Sì£Tð£VU‰åƒìèIèßèºÐÉÃÿ5¬¢ÿ%°¢ÿ%´¢héàÿÿÿÿ%¸¢héÐÿÿÿÿ%¼¢héÀÿÿÿÿ%À¢hé°ÿÿÿÿ%Ä¢h é ÿÿÿÿ%È¢h(éÿÿÿÿ%Ì¢h0é€ÿÿÿÿ%Тh8épÿÿÿÿ%Ô¢h@é`ÿÿÿÿ%Ø¢hHéPÿÿÿÿ%Ü¢hPé@ÿÿÿÿ%à¢hXé0ÿÿÿÿ%ä¢h`é ÿÿÿÿ%è¢hhéÿÿÿÿ%ì¢hpéÿÿÿÿ%ð¢hxéðþÿÿÿ%ô¢h€éàþÿÿÿ%ø¢hˆéÐþÿÿÿ%ü¢héÀþÿÿÿ%£h˜é°þÿÿÿ%£h é þÿÿÿ%£h¨éþÿÿÿ% £h°é€þÿÿÿ%£h¸épþÿÿÿ%£hÀé`þÿÿÿ%£hÈéPþÿÿÿ%£hÐé@þÿÿÿ% £hØé0þÿÿÿ%$£hàé þÿÿÿ%(£hèéþÿÿÿ%,£hðéþÿÿÿ%0£høéðýÿÿÿ%4£héàýÿÿÿ%8£héÐýÿÿÿ%<£héÀýÿÿÿ%@£hé°ýÿÿÿ%D£h é ýÿÿÿ%H£h(éýÿÿÿ%L£h0é€ýÿÿÿ%P£h8épýÿÿÿ%T£h@é`ýÿÿÿ%X£hHéPýÿÿÿ%\£hPé@ýÿÿÿ%`£hXé0ýÿÿÿ%d£h`é ýÿÿÿ%h£hhéýÿÿÿ%l£hpéýÿÿÿ%p£hxéðüÿÿÿ%t£h€éàüÿÿÿ%x£hˆéÐüÿÿÿ%|£héÀüÿÿÿ%€£h˜é°üÿÿÿ%„£h é üÿÿÿ%ˆ£h¨éüÿÿÿ%Œ£h°é€üÿÿÿ%£h¸épüÿÿÿ%”£hÀé`üÿÿÿ%˜£hÈéPüÿÿÿ%œ£hÐé@üÿÿÿ% £hØé0üÿÿÿ%¤£hàé üÿÿÿ%¨£hèéüÿÿÿ%¬£hðéüÿÿÿ%°£høéðûÿÿÿ%´£héàûÿÿÿ%¸£héÐûÿÿÿ%¼£héÀûÿÿÿ%À£hé°ûÿÿÿ%Ä£h é ûÿÿÿ%È£h(éûÿÿÿ%Ì£h0é€ûÿÿÿ%Уh8épûÿÿÿ%Ô£h@é`ûÿÿÿ%Ø£hHéPûÿÿÿ%Ü£hPé@ûÿÿÿ%à£hXé0ûÿÿÿ%ä£h`é ûÿÿÿ%è£hhéûÿÿÿ%ì£hpéûÿÿÿ%ð£hxéðúÿÿ1í^‰áƒäðPTRhÀ`h°QVh@£è×ýÿÿô‰öU‰åSPè[Ú ‹ƒL…ÀtÿЋ]üÉÉöU‹Œ¢‰åƒì…ÒuI‹ˆ¢‹…Àtt&B£ˆ¢ÿ‹ˆ¢‹ …Éuê¸Ø‘…Àtƒì h”¢è\üÿÿƒÄ¸£Œ¢‰ì]ÃvU‰åƒì‰ì]öU‰å¸Hƒì…Àtƒìh°¤h”¢è‡úÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰åƒìjh ¥è 0ƒÄjh ¥èÓ1è.-ƒÄhà•jè³úÿÿÉÃU‰åWVSì ‹]…Ût‰ßü¹ÿÿÿÿ°ò®ƒùþu ¸ÿÿÿÿéÞ‰öµèßÿÿƒìh jVèºýÿÿƒÄ hÿSVèËýÿÿƒÄ»<‰òü¹ÿÿÿÿ‰×°ò®÷уé¾1¡¬¤öDPtt¡ ¤‹ˆ1¾ÒƒƒìhÿS…èŸÿÿPè–úÿÿë$‰ßü¹ÿÿÿÿ°ò®ƒùþtƒìhÀaÿµÜßþÿè|ÃÄ…èÿÿƒìh jPè7úÿÿƒÄ‹5LÆ ¿äa¹üó¦—Â’À8Âu_‹l ‰×¹ÿÿÿÿ°ò®ƒùþtƒìR…èÿÿPè¡úÿÿƒÄhìaÿ5Deh èÿÿS躳‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþtGƒìë4ƒìÿ5Deÿ5LÆ èöÿÿƒÄ…Àt&ƒìÿ5LÆ èÿÿSè8úÿÿƒÄhíaSèZøÿÿƒÄƒìÿ5DeèÿÿSèBøÿÿhìahäah Sè5³ƒÄS舵‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþuƒìhïaévh hà…èÿÿPh bè5ÃÇ…ØßþÿƒÄ•èßÿÿ¶…èßÿÿƒè*u¶B…Àu…èßÿÿfÇ.*Æ@ƒì…èßÿÿPhKaèßþÿSèùÿÿÇ…àßþÿƒÄ…äßþÿPj…è?ÿÿPSh`æ …àßþÿPè¾é,€½è?ÿÿ.„õè?ÿÿƒìjhbSèýöÿÿƒÄ…À„Ô÷E te…è¿ÿÿPSh%bèÿþÿSè€øÿÿµèŸÿÿ‰÷ü¹ÿÿÿÿ°ò®ƒÄƒùþtPƒìhíaSèèöÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ѹ )ÈPVSèÈóÿÿë‰öƒì…è?ÿÿPh3b…èÿþÿPèøÿÿƒÄèQôÿÿ‰Ã…Ûyƒì h=bèn&ƒÄ…Ûu#ƒì…èÿþÿP…èÿÿPhäa蜭‰$è$÷ÿÿÿ…Øßþÿƒì…äßþÿPj…è?ÿÿP…èßþÿPh`æ ÿµàßþÿèH½ƒÄ ƒø„Èþÿÿh hàÿ5àE h bè^ÁƒÄÿµàßþÿèT½ƒÄƒ½ØßþÿuƒìhHbÿµÜßþÿè-À¸ë‰ö¸eô[^_]ÃvU‰åWSì@‹U‰×ü¹ÿÿÿÿ°ò®÷ÑIùþwxƒìøßÿÿShKaRènöÿÿ‰$è澃Ä…Àu/Sƒì èÚ¸ƒÄ Ph`bÿ5¤¤èóÿÿƒÄÿ5¤¤è4óÿÿë'‰ö…øßÿÿPh@¦ h™bø¿ÿÿSè£öÿÿ‰$èKóÿÿeø[_]ÃU‰å]ÃvU‰åWVSì<@‹u ¿Ÿb¹üó¦—Â’À8Âu EØfÇa+ë&‹u ¿§b¹üó¦—Â’À8Â…€EØfÇw+Æ@Æ…ØßÿÿƒìµØßÿÿVhKaÿuè„õÿÿƒÄƒø…Jƒìj/VèÍôÿÿƒÄ‰Ã…Ûu‰óëCŠƒè-<†$¾¡¬¤‰…Ô¿ÿÿöDP@„ ½ØßÿÿƒìWÿuè×óÿÿƒÄ‰…Ä¿ÿÿ…À„èü¹ÿÿÿÿ°ò®÷Ñ‹•Ä¿ÿÿL ÿ‰Ä¿ÿÿ¾‹Ô¿ÿÿöDA t‰Êÿ…Ä¿ÿÿ‹µÄ¿ÿÿ¾öDB uê‹…Ä¿ÿÿ€8„•‹E ¿Ÿb¹ü‰Æó¦—Â’À8Âu Sh`Æ ë%v‹E ¿§b¹ü‰Æó¦—Â’À8ÂuSh`eh™b…Ø¿ÿÿPèùôÿÿƒÄƒìEØP…Ø¿ÿÿPèÃôÿÿ‰ÃƒÄ…ÛtƒìÿµÄ¿ÿÿh°bSèöðÿÿ‰$è~óÿÿeô[^_]ÉöU‰åƒì‹E‹U ‰UøMø‰QQPè8ôÿÿÉÉöU‰åVSìp ÿuh@¦ h™bµøßÿÿVèpôÿÿ…˜ßÿÿƒÄ PVjèþñÿÿ‰Ã…”ßÿÿ‰$è.òÿÿƒÄ…Ûu'‹…Øßÿÿ;…”ßÿÿ}ƒì VèàðÿÿƒÄë v¸ë¸eø[^]ÃU‰åVSìh@‹]j/SèÎòÿÿƒÄ…Àt'@€8uSƒì èܵƒÄ PhÀbéä‰öƒìPë‰öƒìS…ø¿ÿÿPè ôÿÿƒÄ…ø¿ÿÿƒìj.PèLïÿÿƒÄ‰Æ…öuSƒì 莵ƒÄ PhÀbé–ÆF€>uSƒì ènµƒÄ PhÀbévø¿ÿÿëÆ_ƒìj,SèöîÿÿƒÄ…Àuë…ø¿ÿÿPhÀåh™bøßÿÿSè2óÿÿ…˜¿ÿÿƒÄ PSjèÀðÿÿƒÄ…Àt-ƒìhíSè{îÿÿƒÄ…ÀtSƒì èï´ƒÄ Phcé÷ƒìh%cøßÿÿSèhñÿÿƒÄVSè^ñÿÿ…˜¿ÿÿƒÄ PSjè\ðÿÿƒÄ…Àt-ƒìhíSèîÿÿƒÄ…ÀtSƒì è‹´ƒÄ Phc铃ìÿu ø¿ÿÿSèÖòÿÿƒÄhíah'chÿSèö«ƒÄëÆ_ƒìj SèêíÿÿƒÄ…Àuëƒìh%cøßÿÿSè¿ðÿÿƒÄ…ø¿ÿÿPSè¯ðÿÿƒÄh*cSèññÿÿ‰ÆƒÄ…öu4Sƒì èó³ƒÄ Ph@cÿ5¤¤èîÿÿƒÄÿ5¤¤èMîÿÿ¸ë'‰öƒì ÿuÿuÿuh`cVèííÿÿƒÄVètðÿÿ¸eø[^]ÃU‰åWƒì‰Mø¿àÄü¹ÿÿÿÿ°ò®ƒùþt2ÿ5f ƒì èp³ƒÄ Ph€cÿ5¤¤è˜íÿÿƒÄjh F èíÿÿÿ5f ƒì è>³ƒÄ PhÀcÿ5¤¤èfíÿÿÇ$èzðÿÿ‰öU‰åWVSìh …¸ßÿÿº¶¢)ÂƹMè‰HÆ@é‰PÇ…´ßÿÿhêcè;íÿÿ£DeƒÄ…Àt‰Çü¹ÿÿÿÿ°ò®ƒùþu*ƒì躲ƒÄ Phdÿ5¤¤èâìÿÿÇ$èöïÿÿ‰öƒì h_dèçìÿÿ£PÆ ƒÄ…Àu ÇPÆ ìaƒì hgdèÄìÿÿ£LÆ ƒÄ…Àt‰Çü¹ÿÿÿÿ°ò®ƒùþu+ƒìèC²ƒÄ Ph€dÿ5¤¤èkìÿÿÇ$èïÿÿvƒì hÚdèoìÿÿ£l ƒÄ…Àu Çl ìaƒì hãdèLìÿÿ£HÆ ƒÄ…Àu ÇHÆ ìaƒì hídè)ìÿÿ£ † ƒÄ…Àt‰Çü¹ÿÿÿÿ°ò®ƒùþu(ƒì許ƒÄ Pheÿ5¤¤èÐëÿÿÇ$èäîÿÿƒì h bè×ëÿÿ£àE ƒÄ…Àu ÇàE ìaƒì hZeè´ëÿÿ£` ƒÄ…Àu Ç` ìaƒì ÿ5` è4«Ç$ceè„ëÿÿ£@eƒÄ…À„¼‰Çü¹ÿÿÿÿ°ò®÷ÑI‰°ßÿÿùÎ~+ƒìèó°ƒÄ Ph€eÿ5¤¤èëÿÿÇ$è/îÿÿvƒì h§eèëÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþuEƒìè¡°ƒÄ PhÀeÿ5¤¤èÉêÿÿƒÄÿ5¤¤èûêÿÿƒÄ ÿ5@ehfh@† èsîÿÿëƒìRh@† èÂîÿÿƒÄƒì hfè¢êÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþu(ƒìè$°ƒÄ Ph fÿ5¤¤èLêÿÿÇ$è`íÿÿƒìRhKah`æ èýíÿÿÇ$NfèAêÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþu+ƒìèïƒÄ Ph`fÿ5¤¤èëéÿÿÇ$èÿìÿÿvƒìRhKah@¦ è™íÿÿÇ$’fèÝéÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþu+ƒìè_¯ƒÄ Ph fÿ5¤¤è‡éÿÿÇ$è›ìÿÿvƒìRhKahà% è5íÿÿÇ$Îfèyéÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþu+ƒìèû®ƒÄ Phàfÿ5¤¤è#éÿÿÇ$è7ìÿÿvƒìRhKahÀåèÑìÿÿÇ$gèéÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþu+ƒìè—®ƒÄ Ph gÿ5¤¤è¿èÿÿÇ$èÓëÿÿvƒìRhKah`Æ èmìÿÿÇ$Ngè±èÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþu+ƒìè3®ƒÄ Ph`gÿ5¤¤è[èÿÿÇ$èoëÿÿvƒìRhKah€& è ìÿÿÇ$ŽgèMèÿÿ£ ÅƒÄ…Àt‰Çü¹ÿÿÿÿ°ò®ƒùþu(ƒìèÌ­ƒÄ Ph gÿ5¤¤èôçÿÿÇ$èëÿÿƒì hÍgèûçÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþuQƒìè}­ƒÄ Phàgÿ5¤¤è¥çÿÿÇ$è¹êÿÿƒìèT­ƒÄ Ph€hÿ5¤¤è|çÿÿÇ$èêÿÿƒìRhKahF è-ëÿÿƒÄ hà% hhhà èëÿÿƒÄ ÿ5@ehhh€…èþêÿÿƒÄ ÿ5@eh(hh€ èæêÿÿƒÄ ÿ5@eh8hh ¥èÎêÿÿƒÄ ÿ5@eh?hhÀÅè¶êÿÿƒÄ ÿ5@ehMhh f èžêÿÿƒÄ ÿ5@ehWhh`eè†êÿÿÇ$ÚhèÊæÿÿ‰ÂƒÄ…Òt‰×ü¹ÿÿÿÿ°ò®ƒùþu Çh ë$‰Ö¿ßh¹üó¦—Á’¸8Ñ”À£h ƒì hähèsæÿÿ£d ƒÄ…Àu Çd ìaƒì hïhèPæÿÿ£`…ƒÄ…Àu Ç`…ìaƒì hýhè-æÿÿ£€F ƒÄ…Àu Ç€F ìaƒì hiè æÿÿÇ@Æ Ç$ièôåÿÿ£äE ƒÄ…Àu ÇäE ìaƒì h ièÑåÿÿ£„F ƒÄ…Àu Ç„F ìaƒì h-iè®åÿÿ£DÆ ƒÄ…Àu ÇDÆ 9iƒì hViè‹åÿÿ£€¥ƒÄ…Àu Ç€¥biƒì hvièhåÿÿ£Ä ƒÄ…Àu ÇÄ ‚iƒì h‰ièEåÿÿ£ˆF ƒÄ…Àu LjF Žiƒì h“iè"åÿÿ£$† ƒÄ…Àu Ç$† ™iƒì hŸièÿäÿÿ£À ƒÄ…Àu ÇÀ ¤i»Àƒìjjjè¦èÿÿ‰ÆƒÄ…öy)ƒìèiªƒÄ Ph¬iÿ5¤¤è‘äÿÿÇ$è¥çÿÿƒì j…´ßÿÿPjjVèîåÿÿ}Øü¸¹ó«fÇEØƒÄ ÇE܉ØfÁÈf‰EÚƒìjEØPVè¥æÿÿƒÄ…Ày*Sƒì èé©ƒÄ Phàiÿ5¤¤èäÿÿÇ$è%çÿÿèäÿÿ‰Ã…ÛtAƒìh*cÿ5 Åè–çÿÿ‰ÇƒÄ…ÿtƒìShjWèÎãÿÿ‰<$èVæÿÿƒÄƒì jèÙæÿÿèÃäÿÿƒìjjè×ãÿÿƒÄhà•jèÈãÿÿèÛèÿÿƒÄhúVèuäÿÿƒÄ‰öÇ…°ßÿÿƒì…°ßÿÿPEÈPVè"äÿÿ‰…¤ßÿÿƒÄ…Ày%èðãÿÿƒ8t˃ì jèAåÿÿƒÄhà•jèbãÿÿë«‹Ẻ…¬ßÿÿƒì Pèîãÿÿ£f …¬ßÿÿ‰$èCƒÄ…ÀuLƒì ÿ5f ÿµ¬ßÿÿƒì 豨ƒÄ Ph jÿ5¤¤èÙâÿÿƒÄÿ5¤¤è ãÿÿƒÄÿµ¤ßÿÿè­âÿÿé3ÿÿÿèÃâÿÿ‰Ã…ÛyƒìhNjÿ5¤¤èšâÿÿƒÄ…Ûtƒì ÿµ¤ßÿÿèuâÿÿéûþÿÿƒìjjè¤âÿÿ‰4$è\âÿÿÇ… ßÿÿƒÄ » SjhàÄèÍåÿÿƒÄ Sjhà¤è½åÿÿƒÄÇ…˜ßÿÿ…¸ßÿÿPjèRâÿÿÇ$è&æÿÿƒÄjh F ègãÿÿƒÄº…À•ÂJƒâ‰•œßÿÿéîvƒì jèîåÿÿºà¤‹…°ßÿÿÆ‹… ßÿÿ…°ßÿÿƒÀƒÄ=ÿ~^Ç…˜ßÿÿ¸â+… ßÿÿ‰…°ßÿÿ…À~‹… ßÿÿàăìÿµ°ßÿÿRPèüãÿÿƒÄ‹°ßÿÿ ßÿÿ‹… ßÿÿÆ€àÄé˜vƒ½°ßÿÿ~"‹… ßÿÿàăìÿµ°ßÿÿhà¤Pè°ãÿÿƒÄ‹°ßÿÿ ßÿÿ‹… ßÿÿÆ€àăìh jhà¤è€äÿÿƒÄƒ½œßÿÿt1jhÿhà¤ÿµ¤ßÿÿèäÿÿ‰…°ßÿÿƒÄ…À~ ƒ½ ßÿÿÿ…Ûþÿÿƒì jèÉäÿÿƒÄƒ½ ßÿÿ„_ƒ½˜ßÿÿuƒìhijhàÄèîâÿÿƒÄhƒjhˆjh hàÄèÚhjh”jh hàÄèÁƒÄ h›jh£jh hàÄè¥h«jh³jh hàÄèŒƒÄ h»jhÂjh hàÄèphÉjhÏjh hàÄèWƒÄj_hÕjhàÄè[¥hˆjhƒjh hàÄè*ƒÄ h”jhjh hàÄèh£jh›jh hàÄèõœƒÄ h³jh«jh hàÄèÙœhÂjh»jh hàÄèÀœƒÄ hÏjhÉjh hàÄ褜‹=` ü¹ÿÿÿÿ°ò®ƒÄƒùþt,Èßÿÿƒìh jSèŽâÿÿƒÄ hÿhàÄSè›âÿÿƒÄƒì hàÄ軋=` ü¹ÿÿÿÿ°ò®ƒÄƒùþ„…èÚÞÿÿ‰Ã…ÛyƒìhNjÿ5¤¤è±Þÿÿëbv…ÛuLè³Þÿÿ‰Ã…ÛyƒìhNjÿ5¤¤èŠÞÿÿë…Ûuƒì…ÈßÿÿPÿ5` häaèú—ƒÄƒì jè}áÿÿƒì …¨ßÿÿPèmâÿÿƒÄƒì ÿµ¤ßÿÿè,ÞÿÿÇ$èPáÿÿU‰åVSì ‹ujhÜjVè5àÿÿƒÄ…ÀuƒÆƒìjhåjVèàÿÿƒÄ…Àu(ƒÆ€> uF€>„µƒìhåjVè°éŸvƒìjhìjVèÜßÿÿƒÄ…ÀuyƒÆƒìjhåjVèÂßÿÿƒÄ…À…jvƒìjhåjVè¤ßÿÿƒÄ…À…LƒìhójVè[ßÿÿƒÄ‰Ã…Ûtƃì Vè&ÿÿÿƒÄs뺉öƒì Vèÿÿÿé‰öƒìjhüjVèLßÿÿƒÄ…À……ƒÆ€>t!¾¡¬¤‰ÁöDP tF€>t ¾öDA uð€>+u¡¬¤‰Âö@W u‰öF€>t ¾öDB tð€>„žƒìøßÿÿShKaVèößÿÿ‰$èêëÿÿƒÄ…Àuzƒì VèGëlƒìjhkVè¬ÞÿÿƒÄ…ÀuƒÆ€>tPƒìh kVèKë=ƒìjhkVè|ÞÿÿƒÄ…ÀuƒÆ€>t ƒì Vèìë‰öƒìjhkVèPÞÿÿƒÄeø[^]ÉöU‰åWVSì} þ5ƒì µèßÿÿVè*Íÿÿ‹] Áã!ø‰ƒ`æ ‰4$èÍÿÿ‰ƒdæ ¸ë3vSƒì èƒÄ Ph`nÿ5¤¤è·ÊÿÿƒÄÿ5¤¤èéÊÿÿ¸eô[^_]ÃU‰åWSƒìl‹}‹] h nè¤Êÿÿ£ð$ƒÄ…Àu Çð$§nƒì h¨nèÊÿÿ£à$ƒÄ…Àu Çà$§nƒì h³nè^Êÿÿ£ä$ƒÄ…Àu Çä$§nƒì h½nè;Êÿÿ£è$ƒÄ…Àu Çè$Änƒì hÉnèÊÿÿ£ì$ƒÄ…Àu Çì$Ñnƒ=Dg tƒì ÿ5Dg èÍÿÿƒÄÇDg …Ût SWhánë ƒìWhçnh%èmÍÿÿƒÄE˜ƒìPh%jè÷ÊÿÿƒÄƒøÿ„£‹EÄ£@g ƒìPjè“Ìÿÿ£Dg ƒÄ…Àt¡Dg ƃìhùnh%èíÌÿÿ‰ÃƒÄ…Ût\SjÿuÄÿ5Dg èSÊÿÿƒÄƒøu‹=Dg ü¹ÿÿÿÿ°ò®÷ÑI;MÄtƒì ÿ5Dg èEÌÿÿÇDg ƒÄƒì SèoËÿÿƒÄë ‰ö¸ë¸eø[_]ÃU‰åWSƒì`‹}‹] ƒ=Lg tƒì ÿ5Lg èïËÿÿƒÄÇLg …Ût SWhánë ƒìWhûnhEèAÌÿÿƒÄE˜ƒìPhEjèËÉÿÿƒÄƒøÿ„£‹EÄ£Hg ƒìPjègËÿÿ£Lg ƒÄ…Àt¡Lg ƃìhùnhEèÁËÿÿ‰ÃƒÄ…Ût\SjÿuÄÿ5Lg è'ÉÿÿƒÄƒøu‹=Lg ü¹ÿÿÿÿ°ò®÷ÑI;MÄtƒì ÿ5Lg èËÿÿÇLg ƒÄƒì SèCÊÿÿƒÄë ‰ö¸ë¸eø[_]ÃU‰åWVSì0ajOÿu˜þÿSèËÿÿƒÄj SèàÆÿÿƒÄ…ÀtÆ…˜þÿƒìj PèÅÆÿÿƒÄ…ÀtÆ‹}ü¹ÿÿÿÿ°ò®÷Ñ¡@g Lÿ¡Hg ÁÁ‰Ÿýÿƒì QèÈÿÿ‰… ŸýÿƒÄ…Àu ¸éÆ‹ ŸýÿÆèßÿÿƒìh jSèaÊÿÿƒÄ hÿÿu SèpÊÿÿƒÄj.SèeÉÿÿƒÄ‰… Ÿýÿ…Àt Æÿ… Ÿýÿ…èßÿÿ‰…$Ÿýÿë ‹$ŸýÿÆ.ƒìj,ÿµ$Ÿýÿè÷ÅÿÿƒÄ‰…$Ÿýÿ…ÀuÚ…èßÿÿ‰…$Ÿýÿjh èÿÿ‰ôžýÿQPèlˆjh …èŸÿÿ‰…ðžýÿPÿµ$ŸýÿèMˆƒÄ ƒ=Dg „ƒì ÿ5@g èÇÿÿ‰ÇƒÄ…ÿ„vƒìÿ5Dg Wè+ÊÿÿƒÄÿuh oÿ5@g WèLƒµ˜þÿVÿ5è$hoè¿ÿÿSè–ÉÿÿƒÄ Sh#oÿ5@g Wèƒÿuh1oÿ5@g WèƒƒÄ h8ohVoÿ5@g Wèì‚haohfoÿ5@g WèÖ‚ƒÄ Vhmoÿ5@g WèÁ‚ÿµ$Ÿýÿhvoÿ5@g W誂ƒÄ ÿµ Ÿýÿh~oÿ5@g Wè‚ÿµôžýÿh…oÿ5@g Wèy‚ƒÄ ÿµðžýÿhoÿ5@g Wè_‚ÿ5è$h•oÿ5@g WèH‚ƒÄ ÿ5ä$hoÿ5@g Wè.‚ÿ5ì$h¨oÿ5@g W肃ÄWÿµ ŸýÿèÇÿÿ‰<$èèÇÿÿëG‰öƒìhÀoë0‰öƒìhpÿµ ŸýÿèÕÆÿÿƒÄh%ÿµ ŸýÿèÂÆÿÿƒÄh@pÿµ Ÿýÿè¯ÆÿÿƒÄƒì h‘pè_Äÿÿ‰ÃƒÄ…Ûu»§nƒì hpèDÄÿÿ‰…,ŸýÿƒÄ…Àu Ç…,Ÿýÿ§nƒì h©pè Äÿÿ‰…(ŸýÿƒÄ…Àu Ç…(Ÿýÿ§nƒì hµpèüÃÿÿ‰…4ŸýÿƒÄ…Àu Ç…4Ÿýÿ§nƒì h¿pèØÃÿÿ‰…0ŸýÿƒÄ…Àu Ç…0Ÿýÿ§nƒìhàpÿµ ŸýÿèîÅÿÿƒÄh0qÿµ ŸýÿèÛÅÿÿƒÄh@qÿµ ŸýÿèÈÅÿÿƒÄh€qÿµ ŸýÿèµÅÿÿƒÄ Sh§qèþÿSèÇÿÿƒÄSÿµ Ÿýÿè‘Åÿÿÿµ Ÿýÿÿµ$ŸýÿhÀqSèêÆÿÿƒÄSÿµ ŸýÿèkÅÿÿƒÄháqÿµ ŸýÿèXÅÿÿ‹M‰Ÿýÿ‰Ïü¹ÿÿÿÿ°ò®÷ÑAÿ‹•ŸýÿƒÄ€zÿ t‹ŸýÿÆDÆ Ç…üžýÿ§n¸§n‰…Ÿýÿƒìj ÿµŸýÿè:ÅÿÿƒÄ‰…Ÿýÿ…Àt]ƃìj ÿµŸýÿèÅÿÿƒÄ‰…Ÿýÿ…Àt=Æ‹ŸýÿA‰üžýÿƒìj ÿµŸýÿèíÄÿÿƒÄ‰…Ÿýÿ…Àt@‰…Ÿýÿ‹Ÿýÿƃ½Ÿýÿu"‹½Ÿýÿü¹ÿÿÿÿ°ò®÷Ñ‹…ŸýÿLÿ‰Ÿýÿ˜?þÿ‰ìžýÿ» ƒìSjQèhÅÿÿƒÄ …˜þÿ‰…èžýÿSjPèPÅÿÿƒÄ ˜ÿýÿ‰äžýÿSjQè8ÅÿÿƒÄ …˜Ÿýÿ‰…àžýÿSjPè ÅÿÿƒÄ ˜ßýÿ‰ÜžýÿSjQèÅÿÿƒÄ µ˜_þÿSjVèöÄÿÿƒÄ hÿÿ5ð$VèÅÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPhïqVèÀÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPÿµ$ŸýÿVèwÀÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPhõqVèRÀÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPÿµ ŸýÿVè,ÀÿÿƒÄ …˜¿ýÿSjPè:Äÿÿ¿§nÇ$èYÂÿÿ‰Ã…8ŸýÿƒÄ PVjèÂÿÿƒÄ…À…„9xŸýÿŽxƒìhÿVè\‹‰…øžýÿƒÄ…À„;ƒìÿµÜžýÿÿµàžýÿÿµäžýÿÿµèžýÿÿµìžýÿh÷qPèsÃÿÿƒÄ…˜¿ýÿjhrPèÂÿÿƒÄ ˜¿ýÿ‰Øžýÿ‰Ïü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈP…˜þÿPÿµØžýÿèE¿ÿÿƒÄ˜ßýÿ‰ßü¹ÿÿÿÿ°ò®ƒùþ„’ƒìSÿµøžýÿè¨ÁÿÿƒÄ‰Æ…ötz‰ßü¹ÿÿÿÿ°ò®÷Ñ4€>tdƒì VèTƒÄ ‹½Øžýÿü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPh"rÿµØžýÿè¾ÿÿƒÄ ‹½Øžýÿü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPVÿµØžýÿ蘾ÿÿƒÄƒì ÿµøžýÿèwÂÿÿë…˜¿ýÿƒìjh/rPèŽÁÿÿƒÄ¿Irƒì ÿµ0Ÿýÿÿµ4Ÿýÿÿ5è$h`r…è?ÿÿPè°ÂÿÿƒÄÿµ0Ÿýÿÿµ4ŸýÿWÿ5è$hÀr…è_ÿÿPè‰ÂÿÿƒÄÿµ0Ÿýÿÿµ4ŸýÿWÿ5è$h s…èÿÿPèbÂÿÿƒÄÿµ0Ÿýÿÿµ4ŸýÿWÿ5è$h€s…èÿþÿPè;ÂÿÿƒÄÿµ0Ÿýÿÿµ4Ÿýÿÿ5è$hàs…èßþÿPèÂÿÿƒÄÿµ0Ÿýÿÿµ4Ÿýÿÿ5è$h@t…è¿þÿPèïÁÿÿÇ…ŸýÿƒÄ 饋ŸýÿƃìÿµŸýÿèŸþÿSèÂÿÿƒÄ…è?ÿÿPhƒth Sè<{…è_ÿÿPhŠth Sè%{ƒÄ …èÿÿPhth Sè {…èÿþÿPh—th SèôzƒÄ …èßþÿPhŸth SèÚz…è¿þÿPh¦th SèÃz‹… Ÿýÿ‰…Ôžýÿ‰Çü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®÷ÑŒ þ‹…ŸýÿHƒÄ 9ÁvV‹½ Ÿýÿ¹ÿÿÿÿ°ò®÷Ñqÿ‰ß¹ÿÿÿÿò®÷Ñ‹…Ÿýÿ„ÿ‰…ŸýÿƒìPÿµ Ÿýÿè.¿ÿÿ‰… ŸýÿƒÄ…À„9ƃì…èŸþÿPÿµ Ÿýÿè¿ÿÿƒÄh¬tÿµ Ÿýÿè¿ÿÿƒÄƒ½Ÿýÿu ƒìh®tÿµ Ÿýÿèâ¾ÿÿÇ…ŸýÿƒÄ‹ŸýÿA‰Ÿýÿƒìj ÿµŸýÿèÈ»ÿÿƒÄ‰…Ÿýÿ…Àt‹…Ÿýÿ9…Ÿýÿ‚-þÿÿ‹½Ÿýÿü¹ÿÿÿÿ°ò®÷ѱÿ‹ Ÿýÿ‰ß¹ÿÿÿÿò®÷ÑLÿ‹…ŸýÿH9ÁvGµŸýÿ‰ß¹ÿÿÿÿ°ò®÷ÑqÿƒìÿµŸýÿSè,¾ÿÿ‰… ŸýÿƒÄ…Àu ƒì Sé;‰ö‹ ŸýÿƃìÿµŸýÿÿµ Ÿýÿè¾ÿÿƒÄƒ½Ÿýÿu ƒìhºtëƒìhÁtÿµ ŸýÿèݽÿÿƒÄƒìhÉtÿµ ŸýÿèǽÿÿƒÄh0qÿµ Ÿýÿè´½ÿÿƒÄhàtÿµ Ÿýÿ衽ÿÿƒÄhÿtÿµ Ÿýÿ莽ÿÿƒÄ ÿµ,ŸýÿhuµèþÿVèä¾ÿÿƒÄVÿµ Ÿýÿèe½ÿÿƒÄ ÿµŸýÿh!uVèÁ¾ÿÿƒÄVÿµ ŸýÿèB½ÿÿƒÄ ÿµüžýÿh(uVèž¾ÿÿƒÄVÿµ Ÿýÿè½ÿÿ˜¿ýÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþt-ƒì Sèl‰Sÿµ(Ÿýÿh2uVèZ¾ÿÿƒÄVÿµ ŸýÿèÛ¼ÿÿƒÄƒìhIuÿµ ŸýÿèżÿÿƒÄhUuÿµ Ÿýÿè²¼ÿÿƒÄƒ=à$t6ƒ=ä$t-‹5à$¿_u¹üó¦—Â’À8Âuÿu ÿ5ä$h€uë ƒìÿu h@vèþÿSèɽÿÿƒÄSÿµ ŸýÿèJ¼ÿÿƒÄƒìh€vÿµ Ÿýÿè4¼ÿÿƒÄƒ=Lg „Hƒì ÿ5Hg 趺ÿÿ‰…ŸýÿƒÄ…À„ƒìÿ5Lg PèƽÿÿƒÄÿuh oÿ5Hg ÿµŸýÿèâvµ˜þÿVÿ5è$hoè¿ÿÿSè,½ÿÿƒÄ Sh#oÿ5Hg ÿµŸýÿèªvÿuh1oÿ5Hg ÿµŸýÿè‘vƒÄ h8ohVoÿ5Hg ÿµŸýÿèsvhaohfoÿ5Hg ÿµŸýÿèXvƒÄ Vhmoÿ5Hg ÿµŸýÿè>vÿµ$Ÿýÿhvoÿ5Hg ÿµŸýÿè"vƒÄ ÿµ Ÿýÿh~oÿ5Hg ÿµŸýÿèvÿ5è$h•oÿ5Hg ÿµŸýÿèçuƒÄ ÿ5ä$hoÿ5Hg ÿµŸýÿèÈuÿ5ì$h¨oÿ5Hg ÿµŸýÿè¬u‹½Ÿýÿü¹ÿÿÿÿ°ò®÷ѱÿ‹ Ÿýÿ‰ß¹ÿÿÿÿò®÷ÑLÿ‹…ŸýÿHƒÄ 9ÁvCµŸýÿ‰ß¹ÿÿÿÿ°ò®÷ÑqÿƒìÿµŸýÿSè4ºÿÿ‰… ŸýÿƒÄ…Àuƒì SëF‹ ŸýÿƃìÿµŸýÿÿµ ŸýÿèºÿÿƒÄÿµŸýÿèôºÿÿë_‰öƒìhÀoëH‰öƒì ÿµÔžýÿèÖºÿÿ¸ëEvƒìh×vÿµ ŸýÿèɹÿÿƒÄhEÿµ Ÿýÿ趹ÿÿƒÄhwÿµ Ÿýÿ裹ÿÿƒÄ‹… Ÿýÿeô[^_]ÉöU‰åWS‹]“€‰×ü¹ÿÿÿÿ°ò®ƒùþt ƒì R舷ÿÿƒÄ“ ‰×ü¹ÿÿÿÿ°ò®ƒùþt ƒì Rèe·ÿÿƒÄeø[_]ÃvU‰åWVSì ‹}‹u Wh`wèßÿÿS脺ÿÿƒÄSÿu蘸ÿÿƒÄ‰Â…ÒuZƒìhgwWè·ÿÿƒÄ…Àtƒìf‹@fÁÈ·ÀPhkwVè@ºÿÿëJ‰ö…èßÿÿÇERR:Æ@‰ÃƒìSÿuè>¸ÿÿƒÄ‰Â…Òt$‰ßü¹ÿÿÿÿ°ò®÷ÑT ÿƒìVhdwRèd¹ÿÿƒÄ¸eô[^_]ÃU‰åƒì‹E…Àt%ƒìPhtwÿ5¤¤èóµÿÿƒÄÿ5¤¤è%¶ÿÿƒÄÉÃU‰åƒìÿu ÿuè{‚ÉÃU‰åƒìÿu èŽþÿÿ‹EÉÃU‰åVS‹u ‹]ƒì ÿuèŽÿÿÿƒÄSVèÌÿÿÿeø[^]ÃU‰åWVSì0‹UÇ…àÿþÿÇ…äÿþÿRjÿu èâ¸ÿÿƒÄ…èŸÿÿ‰…Øÿþÿ銉ö½èßÿÿü¹ÿÿÿÿ°ò®÷ÑIùÿvÆEç…è¿ÿÿ‰…Üÿþÿ¿ ƒìWjPè¸ÿÿƒÄ WjÿµØÿþÿè¸ÿÿƒÄÿµØÿþÿÿµÜÿþÿh€w…èßÿÿPè¸ÿÿh†wh‡wWÿµÜÿþÿè1rƒÄµè_ÿÿWjVè7¸ÿÿƒÄ hÿÿuVèF¸ÿÿƒÄ ÿµÜÿþÿh‰wèÿÿSè\¸ÿÿƒÄ jSÿuèÞzƒÄ…À„¯…è?ÿÿ‰…ÔÿþÿƒìWjPèÛ·ÿÿƒÄ …èÿÿWjPèÉ·ÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®‰Ê÷Ò‹½Üÿþÿ¹ÿÿÿÿò®÷щÐ)ÈÆ0‹e‰ß¹ÿÿÿÿ°ò®÷ÑIQSVè#¶ÿÿƒÄ…ÀuL‰ßü¹ÿÿÿÿ°ò®÷ÑLÿjj jQèîµÿÿƒÄhgwPè ³ÿÿƒÄ…À„ƒìÿ0ÿµÔÿþÿèå·ÿÿ錃ì…è_ÿÿPh—wèÿþÿSèe·ÿÿƒÄSÿuèyµÿÿƒÄ‰Á…É„¸‰ÏAÿ‰Ã;Er)¾Qÿ¡¬¤‰ÆöDP u‰ö‰ÙYÿ;]r ¾AÿöDF të9ùtÆ …èÿÿP…è?ÿÿPh€wQèg¶ÿÿÆ:ƒÄƒ=h tƒìj.ÿµØÿþÿèx²ÿÿƒÄ‰Á…ÉtÆ…è?ÿÿPÿµØÿþÿh€wÿu 貶ÿÿÇ…àÿþÿƒÄÿµäÿþÿèZµÿÿƒÄë'jh …èßÿÿP…äÿþÿPèîrƒÄƒø„Rýÿÿ‹…àÿþÿeô[^_]ÃU‰åWVSì`‹u ƒ}t…öu ¸é縀>„؃ìÿujÿuèεÿÿƒÄ Ç…àŸÿÿÿ5@eh›wèßÿÿSèúµÿÿƒÄ Vh`w…èŸÿÿPèåµÿÿÇ…ÜŸÿÿƒÄh²wSè­µÿÿ‰…äŸÿÿƒÄ…À„`…è¿ÿÿ‰…ØŸÿÿµèŸÿÿéƒì è¿ÿÿSè‰qƒÄƒ½àŸÿÿu!‰÷ü¹ÿÿÿÿ°ò®÷ÑIƒìQVS迳ÿÿƒÄ…Àt ƒ½àŸÿÿ…ʃ½àŸÿÿuVƒì ‰÷ü¹ÿÿÿÿ°ò®÷Ñ‹…ØŸÿÿLÿQè%qƒÄ ‹}ü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈP‰÷¹ÿÿÿÿ°ò®÷Ñ‹…ØŸÿÿLÿQë!vƒì‹}ü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈPÿµØŸÿÿÿuèf°ÿÿƒÄÇ…ÜŸÿÿ‹}ü¹ÿÿÿÿ°ò®÷Ñ‹E€|þ\uC‰Ç¹ÿÿÿÿ°ò®÷Ñ‹EÆDþÇ…àŸÿÿƒìÿµäŸÿÿhÿÿµØŸÿÿèh²ÿÿƒÄ…À…Éþÿÿƒì ÿµäŸÿÿè³ÿÿƒÄ‹…ÜŸÿÿeô[^_]ÉöU‰åWVSì ‹U‹} ‹u…Òt…ÿt ƒ}t…öy ¸éÈv‹E‰0ǃìj:R袯ÿÿƒÄ‰Ã…Û„‰CƒìS…èßÿÿPèD´ÿÿƒÄ€;~u ‹UÇë€;^u7‹EÇCÿuWh´wSè"³ÿÿƒÄƒøtRjj jSèÞ±ÿÿƒÄ‰ë?v‹UÇÇjj jSè¹±ÿÿƒÄ‹U‰ëvÇ‹E‰0‹UǸeô[^_]ÃvU‰åWVSì Ç…Øßÿÿƒ}„óƒì ÿuèo‹}ü¹ÿÿÿÿ°ò®ƒÄƒùþ„σìÿu jèW²ÿÿ‰…äßÿÿƒÄ…À„±‹u€>„†° ¾Ø° ¾Èº€>t¾ë B€<2t ¾29Øt9Èu퉕ÜßÿÿŠ2ˆ…ãßÿÿÆ2ƒìj:Vè/®ÿÿƒÄ‰Á…Étƃìh VèßÿÿSèüÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄ‰óƒùþtFèßÿÿëÆ A€9t¾¡¬¤öDP tèƒìj:SèÍ­ÿÿƒÄ‰Á…Éu؃ì èßÿÿSèQtƒÄ‹½äßÿÿü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®÷ÑÑ;M s<‹½äßÿÿ¹ÿÿÿÿò®ƒùþtƒìh½wÿµäßÿÿèW°ÿÿƒÄƒìSÿµäßÿÿèE°ÿÿë(vƒ½ØßÿÿuƒìhÀwhòwèqzÇ…ØßÿÿƒÄµÜßÿÿŠ…ãßÿÿˆ¾Ð¡¬¤‰ÁöDP „‚þÿÿF¾öDA uõéqþÿÿƒìÿµäßÿÿÿu裱ÿÿƒÄÿµäßÿÿèµ°ÿÿeô[^_]ÃU‰åSì@ƒ}uƒìh€& hùwëƒìh€& h x…ø¿ÿÿPèó°ÿÿƒÄƒì ÿuÿuƒìjè½®ÿÿƒÄ Pÿuÿu ÿuƒì è¼rƒÄ Ph"xøßÿÿSè³°ÿÿƒÄ(S…ø¿ÿÿPè§w‹]üÉÉöU‰åWVSì@‹u ‹]h€& h:x½è¿ÿÿWèt°ÿÿƒÄ SƒìjèF®ÿÿƒÄPVÿuƒì èJrƒÄ PhLxèßÿÿSèA°ÿÿƒÄSWè;weô[^_]ÃvU‰åWVSì@‹] jèö­ÿÿ‰ÇƒÄ h€& h\xµè¿ÿÿVèû¯ÿÿƒÄSÿuÿuÿuÿuÿu ÿuWhfxèßÿÿSèÓ¯ÿÿƒÄ(SVèÍveô[^_]ÃU‰åWVSì8@‹]hxè÷«ÿÿ‰…ä¿ÿÿƒÄ…Àu Ç…ä¿ÿÿ†w‹½ä¿ÿÿü¹ÿÿÿÿ°ò®ƒùþuƒìh„xé.‰ö‹½ä¿ÿÿü¹ÿÿÿÿ°ò®‰Î÷Ö‹} ¹ÿÿÿÿò®‰Ê÷Ò½è¿ÿÿ¹ÿÿÿÿò®‰Ô¿ÿÿ‰ñ+Ô¿ÿÿL üùÿvƒìhŸxéÖ‰öƒìjh¯xSè”qƒÄƒøu ƒìCPëvƒìS…è¿ÿÿPè@¯ÿÿƒÄèßÿÿ¾ ƒìVjSèv®ÿÿƒÄh†whµxjÿu èGhh†whµxVµè¿ÿÿVè0hƒÄVÿu ÿµä¿ÿÿh·xS耮ÿÿƒÄhÄxSè‚«ÿÿ‰ÃƒÄ…Ût!ƒìÿuhdwS航ÿÿ‰$èàªÿÿƒÄë+vƒìhàxÿ5¤¤èeªÿÿƒÄÿ5¤¤è—ªÿÿ¸ë¸eô[^_]ÃvU‰åWVSì€è?ªÿÿ…Ày+ƒìh yÿ5¤¤èªÿÿƒÄÿ5¤¤èJªÿÿ¸éÁ…À…´ƒìÿ5@ehIy…èßÿÿ‰…äÿÿP設ÿÿƒÄ ÿ5@ehXyµè¿ÿÿV莭ÿÿÿuÿu hky½èŸÿÿWèw­ÿÿƒÄ ÿuÿuhkyèÿÿSè]­ÿÿƒÄjSWVÿµäÿÿÿµäÿÿèD«ÿÿƒÄh€yÿ5¤¤èa©ÿÿƒÄÿ5¤¤è“©ÿÿÇ$èg¬ÿÿv¸eô[^_]ÃvU‰åWVSì$€‹E ƒÀP…èÿÿPèE­ÿÿƒÄè©ÿÿ‰Â…Òy+ƒìhÀyÿ5¤¤èô¨ÿÿƒÄÿ5¤¤è&©ÿÿ¸é…Ò…ìèO¨ÿÿPh@† håyèŸÿÿS般ÿÿƒÄÿuSèhsƒÄƒøt4ƒì…èÿÿPhzÿ5¤¤芨ÿÿƒÄÿ5¤¤輨ÿÿÇ$è«ÿÿƒìÿ5@ehIyèßÿÿSè&¬ÿÿƒÄ ÿ5@eh)z½è¿ÿÿWè ¬ÿÿƒÄj…èÿÿPµèŸÿÿVWSSèñ©ÿÿƒÄV蘨ÿÿƒÄh@zÿ5¤¤è¨ÿÿƒÄÿ5¤¤è7¨ÿÿÇ$è «ÿÿvƒìj…äÿÿPRèv©ÿÿ…èŸÿÿ‰$èH¨ÿÿ¸eô[^_]ÃvU‰åWSìl hgzèçÿÿ‰ÃƒÄ…Ûu»†w‰ßü¹ÿÿÿÿ°ò®ƒùþu ƒìh€zëP‰ö…˜ßÿÿƒìPSjèÖ¨ÿÿƒÄ…Àt ƒìSh zë*ƒì‹E ƒÀP…øßÿÿPèn«ÿÿƒÄèF§ÿÿ…Ày*ƒìhàzÿ5¤¤è§ÿÿƒÄÿ5¤¤èQ§ÿÿ¸ëO‰ö…ÀuDƒì jÿu…øßÿÿPSS辨ÿÿƒÄh {ÿ5¤¤èÛ¦ÿÿƒÄÿ5¤¤è §ÿÿÇ$èá©ÿÿ¸eø[_]ÃU‰åWVSìˆ`hI{辦ÿÿ‰…„ŸÿÿƒÄ…Àu Ç…„Ÿÿÿ†w‹½„Ÿÿÿü¹ÿÿÿÿ°ò®ƒùþuƒìhO{éEƒì hk{èw¦ÿÿ‰ÃƒÄ…Ûu»†w‰ßü¹ÿÿÿÿ°ò®ƒùþuƒìh€{é v…ˆ¿ÿÿƒìPÿµ„Ÿÿÿjè§ÿÿƒÄ…Àtƒìÿµ„Ÿÿÿh {é×vƒì‹E ƒÀP…è¿ÿÿ‰…€ŸÿÿPèªÿÿƒÄ ½ˆŸÿÿ¾ VjWèA©ÿÿƒÄ VSWèV©ÿÿƒÄh†whµxVWè ch†whµxVÿµ€ŸÿÿèôbƒÄèßÿÿVjSèú¨ÿÿƒÄÿµ€ŸÿÿWÿµ„Ÿÿÿh¾{Sè/©ÿÿƒÄhÄxSè1¦ÿÿ‰ÃƒÄ…Ût ƒìÿuhdwSè7¥ÿÿ‰$è¥ÿÿƒÄë*‰öƒìhà{ÿ5¤¤è¥ÿÿƒÄÿ5¤¤èG¥ÿÿ¸ë¸eô[^_]ÃvU‰åWVSìˆ`hÿ{èú¤ÿÿ‰ÆƒÄ…öu¾†w‰÷ü¹ÿÿÿÿ°ò®ƒùþuƒìh |鲉öƒì h?|迤ÿÿ‰…„ŸÿÿƒÄ…Àu Ç…„Ÿÿÿ†w‹½„Ÿÿÿü¹ÿÿÿÿ°ò®ƒùþuƒìh`|éj‰ö…ˆ¿ÿÿƒìPVjèÂ¥ÿÿƒÄ…ÀtƒìVh |éAƒìjhÁ|ÿu èJ¦ÿÿƒÄ…Àu ƒì‹E ƒÀë ƒì‹E ƒÀP…è¿ÿÿPè2¨ÿÿƒÄ…èßÿÿ‰…€Ÿÿÿ» ƒìSjPèb§ÿÿƒÄ ½ˆŸÿÿSjWèP§ÿÿƒÄ Sÿµ„ŸÿÿWè`§ÿÿƒÄh†whµxSWèah†whµxSè¿ÿÿSèý`ƒÄjhÁ|ÿu 裥ÿÿƒÄ…Àuƒì SWVh·xÿµ€Ÿÿÿëƒì …è¿ÿÿP…ˆŸÿÿPVhÅ|…èßÿÿPè§ÿÿƒÄ ƒìhÄx…èßÿÿPè¤ÿÿ‰ÃƒÄ…Ût!ƒìÿuhdwSè£ÿÿ‰$èl£ÿÿƒÄë+vƒìhà|ÿ5¤¤èñ¢ÿÿƒÄÿ5¤¤è#£ÿÿ¸ë¸eô[^_]ÃvU‰åSìh`ÿ5@eh}øßÿÿSè{¦ÿÿ…˜ŸÿÿƒÄ PSjè ¤ÿÿƒÄ…ÀtƒìSh }ë-vƒì‹E ƒÀ P…ø¿ÿÿP螦ÿÿƒÄèv¢ÿÿ…Ày*ƒìh`}ÿ5¤¤èO¢ÿÿƒÄÿ5¤¤è¢ÿÿ¸ë{‰ö…ÀupøŸÿÿƒìh jS螥ÿÿƒÄ h–ÿuSè­¥ÿÿÇ$S…ø¿ÿÿP…øßÿÿPPèÁ£ÿÿƒÄh }ÿ5¤¤èÞ¡ÿÿƒÄÿ5¤¤è¢ÿÿÇ$èä¤ÿÿ¸‹]üÉÉöU‰åWVSì°`h hÍ}èßÿÿSèïÿÿ‰ßü¹ÿÿÿÿ°ò®‰ÊƒÄƒúþuƒìhà}éHvèßÿÿ…ˆ?ÿÿƒìPSjèÈ¢ÿÿƒÄ…ÀtƒìSh@~évƒìh hb~è¿ÿÿSè—îÿÿ‰ßü¹ÿÿÿÿ°ò®‰ÊƒÄƒúþu ƒìh€~éÙ•è¿ÿÿ¶…è¿ÿÿƒèCu¶BƒèMu ¶BƒèUu¶B…Àt|•è¿ÿÿ¶…è¿ÿÿƒèUu¶BƒèCu ¶BƒèDu¶B…ÀtPµè¿ÿÿ¿È~¹üó¦—Â’À8Ât3µè¿ÿÿ¿Ð~¹ó¦—Â’À8Âtƒì…è¿ÿÿPhÕ~é4vƒìh hó~èŸÿÿSè³íÿÿ‰ßü¹ÿÿÿÿ°ò®‰ÊƒÄƒúþu ƒìhéõƒìh h>èÿÿSèwíÿÿ‰ßü¹ÿÿÿÿ°ò®‰ÊƒÄƒúþu ƒìh`鹃ì‹E ƒÀP…è_ÿÿPèþ£ÿÿƒÄ …ˆŸþÿ» SjPè7£ÿÿƒÄ …ˆþÿSjPè%£ÿÿƒÄ …ˆ_þÿSjPè£ÿÿƒÄ …ˆ?þÿSjPè£ÿÿƒÄ …ˆþÿSjPèï¢ÿÿƒÄ …ˆÿýÿSjPèÝ¢ÿÿƒÄ …ˆßýÿSjPèË¢ÿÿƒÄ …ˆÿÿSjPè¹¢ÿÿƒÄ …ˆÿþÿSjP觢ÿÿƒÄ …ˆßþÿSjPè•¢ÿÿƒÄ‹u¿ž¹üó¦—Â’À8Â…œƒì …ˆßýÿ‰…„ŸýÿPˆÿýÿ‰€ŸýÿQ…ˆþÿ‰…|ŸýÿPˆ?þÿ‰xŸýÿQ½ˆ_þÿWµˆþÿVˆŸþÿSh£ÿuèÛ¡ÿÿƒÄ,ÿµ„Ÿýÿÿµ€Ÿýÿÿµ|ŸýÿÿµxŸýÿWVSÿuÿuh¸…ˆßþÿPè6¢ÿÿ‹uƒÄ0éÝv…ˆþÿ‰…tŸýÿƒìh jP輡ÿÿƒÄ ˆ_þÿ‰pŸýÿh jQè ¡ÿÿƒÄÿµpŸýÿÿµtŸýÿhÛVèF¡ÿÿ‹½tŸýÿü¹ÿÿÿÿ°ò®÷щhŸýÿ‹½pŸýÿ¹ÿÿÿÿò®‰Ê÷Òˆßþÿ‰ß¹ÿÿÿÿò®‹…hŸýÿ)ÈЃÄƒø~wYƒìÿµtŸýÿSè  ÿÿƒÄh½wSèÿŸÿÿƒÄÿµpŸýÿSèðŸÿÿƒÄhåSèâŸÿÿƒÄFƒìhÖVè`ŸÿÿƒÄ‰Æ…ö… ÿÿÿ‹uéãv…ˆþÿ‰…dŸýÿƒìh jPè¼ ÿÿƒÄ ˆ_þÿ‰`Ÿýÿh jQè  ÿÿƒÄÿµ`ŸýÿÿµdŸýÿhÛVèF ÿÿ‹½dŸýÿü¹ÿÿÿÿ°ò®‰Ê÷Ò‰•\Ÿýÿ‹½`Ÿýÿ¹ÿÿÿÿò®‰Ê÷Òˆßþÿ‰ß¹ÿÿÿÿò®‹…\Ÿýÿ)ÈЃÄƒø~‡´ƒìÿµdŸýÿSèŸÿÿƒÄh½wSèùžÿÿƒÄÿµ`ŸýÿSèêžÿÿƒÄhåSèÜžÿÿƒÄFƒìhèVèZžÿÿƒÄ‰Æ…ö…ÿÿÿéV‹u¿ð¹üó¦—Â’À8Â…ƒìj ÿuè›ÿÿƒÄ‰Æj ÿu莛ÿÿƒÄ‰Ãÿuÿuhö½ˆßþÿWèÒŸÿÿƒÄ…öu…ÛuƒìjÿuWèI›ÿÿéß…ötD…Ûu@‰ð+Eƒø~ƒìPÿu…ˆßþÿPè›ÿÿ鵉öƒìjÿu…ˆßþÿPè›ÿÿéšv…öu<…Ût8‰Ø+Eƒø~ƒìPÿu…ˆßþÿPèךÿÿëpƒìjÿu…ˆßþÿPèÀšÿÿëY‰ö9Þv‰Þ‰ð+Eƒø~ƒìPÿu…ˆßþÿP虚ÿÿë2vƒìjÿu…ˆßþÿP耚ÿÿë‰öÿuÿuhö…ˆßþÿPèÕžÿÿƒÄƒìÿuh`wè?ÿÿS軞ÿÿƒÄ…èÿÿSPèËœÿÿƒÄ‰Æ…öu6ƒìÿuh€ÿ5¤¤輚ÿÿƒÄÿ5¤¤èîšÿÿƒÄÇ…ˆ¿ýÿ999ëZv½è?ÿÿü¹ÿÿÿÿ°ò®‰Ê‰Ð÷Ðtÿƒìˆ¿ýÿShdwVè­ÿÿƒÄƒ}ujj jSèhœÿÿƒÄ @PhH€SèžÿÿƒÄfÇ…ˆŸýÿ6èGšÿÿ…Ày+ƒìh`€ÿ5¤¤è šÿÿƒÄÿ5¤¤èRšÿÿ¸éA…À…4µè¿ÿÿ¿È~¹üó¦—Â’À8Âu…ˆßþÿPµèŸÿÿVh‹€ˆ¿þÿSè”ÿÿÇ$Shœ€…ˆ¿ýÿPhŸ€…ˆŸýÿPh¢€ÿuh¥€Vh¨€h«€h²€…è_ÿÿPhµ€…èßÿÿPPè>›ÿÿƒÄP隉ö•è¿ÿÿ¶…è¿ÿÿƒèCu¶BƒèMu ¶BƒèUu¶B…Àud…ˆßþÿP…èŸÿÿPh¸€ˆ¿þÿSèéœÿÿƒÄ jS…ˆ¿ýÿP…ˆŸýÿPh†w…è_ÿÿPhÆ€ÿuhœ€…èßÿÿPP诚ÿÿƒÄ0é v•è¿ÿÿ¶…è¿ÿÿƒèUu¶BƒèCu ¶BƒèDu¶B…Àu\ƒìj…ˆßþÿPhÉ€•èŸÿÿRhË€…ˆ¿ýÿP…ˆŸýÿPÿuRh†w…è_ÿÿPhÍ€hÏ€…èßÿÿPPè&šÿÿƒÄ@邉öµè¿ÿÿ¿Ð~¹üó¦—Â’À8Âu/ƒìhà€ÿ5¤¤è˜ÿÿƒÄÿ5¤¤èN˜ÿÿÇ$è"›ÿÿ‰öƒì…è¿ÿÿPh ÿ5¤¤èæ—ÿÿƒÄÿ5¤¤è˜ÿÿÇ$èìšÿÿ¸eô[^_]ÃvU‰åWVSìl`‹u¸…ö„‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ƒù†ôƒìjhWVè“™ÿÿƒÄ…Àt ¸éÓ‰öè¿ÿÿƒìh jSèÊšÿÿƒÄ hÿFPSèØšÿÿƒÄj-Sè–ÿÿƒÄ‰Æ¸…ö„ŒÆF‹=@eü¹ÿÿÿÿ°ò®‰Ê÷Ò½è¿ÿÿ¹ÿÿÿÿò®÷ÑL ¸ùÿ‡P…è¿ÿÿPÿ5@eh\èßÿÿSè‘šÿÿƒÄ …ˆŸÿÿh jPè+šÿÿƒÄ …ˆ¿ÿÿPSjè ˜ÿÿƒÄ…ÀtJ…ˆŸÿÿƒìjhiPèü˜ÿÿƒÄ ˆŸÿÿ‰ßü¹ÿÿÿÿ°ò®÷Ѹ )ÈP…è¿ÿÿPSè°•ÿÿƒÄSë‰öèS–ÿÿ…Àyƒìh hòwèÙb¸é”v…À…„h h eVhÕè³cƒÄ j…èßÿÿPPèÁ—ÿÿƒÄ …ˆŸÿÿjhÚPè[˜ÿÿƒÄ ˆŸÿÿ‰ßü¹ÿÿÿÿ°ò®÷Ѹ )ÈP…èßÿÿPSè•ÿÿƒÄShòwèMbÇ$赘ÿÿ¸eô[^_]ÃvU‰åWVSìÀa µH¿õÿhÀjVèå˜ÿÿƒÄ …xŸ÷ÿh jPèϘÿÿƒÄ ÿ5@ehíx?ÿÿSè™ÿÿ…ˆ_ÿÿƒÄ PSjè“–ÿÿƒÄ…ÀtƒìVjh‚èTßÿÿé¦8vƒìÿ5@eh›wx?ÿÿS躘ÿÿ…ˆ_ÿÿƒÄ PSjèH–ÿÿƒÄ…Àtƒì h ‚è°ÞÿÿƒÄèßÿÿƒìh jSè+˜ÿÿƒÄ hÿÿuSè:˜ÿÿ‰$èVTƒÄ€½èßÿÿt*¾•èßÿÿ¡¬¤‰ÁöDP uC€;t¾öDA „ìÿÿÿÆC¾¡¬¤‰ÁöDP tvC¾öDA …ñÿÿÿ‰ßü¹ÿÿÿÿ°ò®ƒùþtƒìS…èÿÿPèD˜ÿÿƒÄëvƒì…H¿õÿPjhK‚è>Þÿÿé7è¿ÿÿƒìh jSèZ—ÿÿƒÄ hÿ…èßÿÿPSèe—ÿÿƒÄ jhh‚SèÕ•ÿÿƒÄ…Àu ƒìé&‰öƒ=h tNè¿ÿÿƒìj.Sè*–ÿÿƒÄ‰…Ÿõÿj,Sèé’ÿÿƒÄ‰Áƒ½Ÿõÿt…Ét;ŸõÿvƒìQÿµŸõÿ耗ÿÿƒÄxÿÿƒìh jSè·–ÿÿƒÄ hÿ½èÿÿWSè–ÿÿƒÄ ShdwWèS–ÿÿÇ…ŸõÿƒÄµè¿ÿÿ¿q‚¹üó¦—Â’À8Âuƒì‰ØP…è_ÿÿéßµxÿÿ¿‡‚¹ üó¦—Â’À8Â…®…è¿ÿÿPh@† h‘‚H?öÿSèj–ÿÿ…ˆ_ÿÿƒÄ PSjèø“ÿÿƒÄ…ÀuÆ…H?öÿ¸dé6ƒìhÄxH¿õÿ…H?öÿPè–ÿÿ‰… ŸõÿƒÄ…Àu%ƒìh ‚ÿ5¤¤è6’ÿÿƒÄSjè_ÜÿÿéÅ5‰öƒì ÿµ Ÿõÿ覔ÿÿÇ…ŸõÿƒÄƒì…xÿÿP…xŸ÷ÿPè#–ÿÿƒÄƒìjhÄ‚µx_ÿÿVèJßÿÿ‰4$èÚYƒÄ h@† hË‚x?ÿÿS艕ÿÿ…ˆ_ÿÿƒÄ PSjè“ÿÿƒÄ…Àu ‰ðÇTRUEÆ@½x_ÿÿü¹ÿÿÿÿ°ò®ƒùþtµx_ÿÿ¿ß‚¹ó¦—Â’À8Ât ƒìéD$vƒìh hä‚x?ùÿSè¯Þÿÿ¾•x?ùÿ¡¬¤ƒÄöDPtjj jSè-“ÿÿƒÄ‰…Höÿë ‰öÇ…HöÿfÇ…H¿õÿ;ƒìh hð‚…H¿õÿPèTÞÿÿƒÄ ½Hÿõÿ¸ƒü¹‰Æó¥f¥h hFƒ…HÿõÿPè$ÞÿÿƒÄ Ç…Höÿ911h hUƒµH¿õÿ…HöÿPèûÝÿÿƒÄ …xßþÿ» SjPèô“ÿÿƒÄ …x¿þÿSjPèâ“ÿÿƒÄè¿ÿÿj.SèÁÿÿƒÄ‰…Ÿõÿ…À…ƒìjhbƒSèVƒÄ…ÀuƒìVjh€ƒèaÚÿÿé³3Ç…Ÿõÿƒì h ƒèÿÿ£eƒÄ…Àt‰Çü¹ÿÿÿÿ°ò®ƒùþu Çe§ƒ•xÿþÿ‰•Àžõÿ» ƒìSjRè9“ÿÿƒÄ…HÿõÿPSÿµÀžõÿ…è¿ÿÿPè ÚÿÿƒÄ…Àt!½x¿þÿWxßþÿSh€wÿµÀžõÿè·’ÿÿWë,Ç…x¿þÿERRƒì…è¿ÿÿPh³ƒxßþÿSè“ÿÿ…x¿þÿPSh©ƒ…èŸÿÿPè“ÿÿƒÄ ërÇ…Ÿõÿƒì•è¿ÿÿ‹…Ÿõÿ)ÐPR½xßþÿW角ÿÿƒÄh‡whÀƒh WèWLƒÄ‹…Ÿõÿ@Px¿þÿSè“ÿÿƒÄSWh©ƒ…èŸÿÿPè’’ÿÿƒÄµHßõÿ» ƒìSjVè(’ÿÿƒÄ ShƒVè Üÿÿ‰÷ü¹ÿÿÿÿ°ò®ƒÄƒùþt!ƒìjV…è¿ÿÿPèÓTƒÄ…ÀtƒìéM!ƒì …DŸõÿPèÿÿ…DŸõÿ‰$èŽÿÿ‰Á‹A‰…øžõÿ‹Q’’‹A‰•ôžõÿƒÄ µxþÿ» SjVè‘ÿÿƒÄ •xýÿ‰•¼žõÿSjRèx‘ÿÿƒÄjSV½xßþÿWèýOƒÄ…À…Žƒì…@ŸõÿP…<ŸõÿP…8ŸõÿP…4ŸõÿPh̃VèðÿÿƒÄÿµ@Ÿõÿÿµ<Ÿõÿÿµ8Ÿõÿÿµ4Ÿõÿh؃…xŸþÿPèT‘ÿÿƒÄ…HÿõÿP…x_ýÿPx¿þÿSèÖÿÿSWh©ƒÿµ¼žõÿè%‘ÿÿƒÄ éĵxßþÿ¿éƒ¹ üó¦—Â’À8Âtw…xŸþÿƒìj höƒPè™ÿÿƒÄƒ½Ÿõÿu Ç…x_ýÿ999ëxƒìxßþÿSh³ƒSè»ÿÿ½x¿þÿWSh©ƒ…xýÿPè¢ÿÿƒÄ…HÿõÿP…x_ýÿPWèãÕÿÿë-ƒì…HöÿP…x_ýÿPèÒÿÿƒÄ…è_ÿÿP…xŸþÿPè¼ÿÿƒÄƒìÿ5@ehíx?ÿÿSè?ÿÿƒÄh²wSèÿÿ‰… ŸõÿƒÄ…Àuƒì…H¿õÿPjh„è†ÖÿÿéØ/Ç…üžõÿ…x¿üÿƒìh jPè˜ÿÿƒÄ …xýÿ»@SjPèÿÿƒÄ …xŸûÿSjPèoÿÿƒÄx¿üÿ‰¸žõÿµxüÿ‰µ´žõÿ…x_üÿ‰…¨žõÿéôvƒì ÿµ¸žõÿèvKƒÄ€½x¿üÿ„Ó€½x¿üÿ#„ƃ½üžõÿu…xŸüÿƒìh jPèöŽÿÿƒÄxŸüÿ‰ßü¹ÿÿÿÿ°ò®‰Ê‰Ö÷Ö•x¿üÿ‰×¹ÿÿÿÿò®÷ÑLþùÿwƒìRSè”ÿÿë>‰ö•xŸüÿ‰×ü¹ÿÿÿÿ°ò®ùÿßÿÿt%ƒì‰×¹ÿÿÿÿò®÷Ѹ )ÈPÿµ¸žõÿRèTŠÿÿƒÄ‹½¸žõÿü¹ÿÿÿÿ°ò®÷Ñ‹•¸žõÿ€| þ\u:•xŸüÿ‰×¹ÿÿÿÿò®÷Ñ€| þ\u‰×¹ÿÿÿÿò®÷ÑÆD þÇ…üžõÿéÌvÇ…üžõÿx¿üÿƒìh jSèøÿÿƒÄ hÿ…xŸüÿPSèŽÿÿƒÄ …xßþÿj h„PèmŒÿÿƒÄ…Àuƒìj h„SèVŒÿÿë2…xßþÿƒìj héƒPè>ŒÿÿƒÄ…Àu ƒìj héƒÿµ¸žõÿè"ŒÿÿƒÄ…À…(ƒìÿµ¸žõÿÿµ´žõÿèŽÿÿƒÄhî‚ÿµ´žõÿè0Œÿÿ‹´žõÿ‰èžõÿÇ…ŸõÿƒÄµx_üÿ‰µ¬žõÿ駉öƃìÿµèžõÿ‹…ŸõÿÁà ‰…°žõÿœ(xŸýÿSè¬ÿÿ‰$è8I‰$èxO‹•°žõÿ¼xŸýÿü¹ÿÿÿÿ°ò®ƒÄƒùþuAƒ½Ÿõÿt8ƒ½Ÿõÿt/ƒìÿµŸõÿh*„ÿµ¬žõÿèòŒÿÿƒÄÿµ¬žõÿèÓÿÿƒÄëvF‰µèžõÿÿ…Ÿõÿ¾…H¿õÿƒìPÿµèžõÿèYˆÿÿƒÄ‰Æ…öt ƒ½ŸõÿŽ/ÿÿÿƒ½ŸõÿtVƒìh@jÿµ¨žõÿè5ŒÿÿƒÄ jh:„ÿµ¨žõÿè ‹ÿÿƒÄ hìÿµ¸žõÿÿµ¨žõÿèç‡ÿÿƒÄÿµ¨žõÿèeÒÿÿé¢Ç…äžõÿ€½xŸýÿ!u1Ç…äžõÿƒì•xŸýÿ…yŸýÿPRèqŒÿÿƒÄ•xŸûÿ‰•ìžõÿë xýÿ‰ìžõÿ½xŸýÿü¹ÿÿÿÿ°ò®ƒùþuWƒìh@jÿµ¨žõÿèz‹ÿÿƒÄ ½x_üÿ¸`„ü¹ ‰Æó¥¤hÛÿµ¸žõÿÿµ¨žõÿè+‡ÿÿƒÄÿµ¨žõÿè©Ñÿÿéæ»@ƒìSjÿµ´žõÿè"‹ÿÿƒÄ…xŸýÿPÿµ´žõÿ轋ÿÿƒÄ ‹…´žõÿ‰…Ÿõÿ…xŸúÿSjPèïŠÿÿƒÄ€½xüÿ„Zµxúÿ•xŸúÿ‰•¤žõÿ‹Ÿõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹•Ÿõÿ¾öDA …æÿÿÿ‹Ÿõÿ€9„ƒìxúÿShdwQè6Šÿÿ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰Ÿõÿ‰ $èôEƒÄ jh…„SèàˆÿÿƒÄ…À…ƒìh jVè%ŠÿÿƒÄ h SVèÔÿÿ‰÷ü¹ÿÿÿÿ°ò®ƒÄƒùþu&ƒìSh‰„ÿµ¨žõÿè>ŠÿÿƒÄÿµ¨žõÿèLÐÿÿëG‰öƒì Vè_LVÿµ¤žõÿh€wÿµ¤žõÿè ŠÿÿƒÄ ë#v…xúÿPÿµ¤žõÿh€wÿµ¤žõÿèç‰ÿÿƒÄ‹•Ÿõÿ€:…¹þÿÿƒì xŸúÿSèºE‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþu*ƒìjh›„ÿµ¨žõÿèMˆÿÿƒÄÿµ¨žõÿè«Ïÿÿéè ‰öƒì xŸúÿSèµKh­„h½wh@SèüBƒÄ…x¿ýÿPÿµ´žõÿ诉ÿÿƒÄ ‹•´žõÿ‰•Ÿõÿ…x?úÿh@jPè݈ÿÿƒÄ€½xüÿ„\µxúÿx?úÿ‰ žõÿv‹…Ÿõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹•Ÿõÿ¾öDA …æÿÿÿ‹Ÿõÿ€9„ƒìxúÿShdwQè"ˆÿÿ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰Ÿõÿ‰ $èàCƒÄ jh…„Sè̆ÿÿƒÄ…À…ƒìh jVèˆÿÿƒÄ h SVèòÑÿÿ‰÷ü¹ÿÿÿÿ°ò®ƒÄƒùþu&ƒìSh‰„ÿµ¨žõÿè*ˆÿÿƒÄÿµ¨žõÿè8ÎÿÿëG‰öƒì VèKJVÿµ žõÿh€wÿµ žõÿèø‡ÿÿƒÄ ë#v…xúÿPÿµ žõÿh€wÿµ žõÿèÓ‡ÿÿƒÄ‹•Ÿõÿ€:…¹þÿÿƒì x?úÿSèC‰$èæI‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþt2h­„h½wh@SèAƒÄ jS…xßþÿPèÿIƒÄ…À…Å ƒìj…xŸúÿP…xßþÿPèÜIƒÄ…À„¢ ½xßýÿü¹ÿÿÿÿ°ò®ƒùþ…€ƒìh@jÿµ¨žõÿèÆÿÿƒÄ ½x_üÿ¸À„ü¹ ‰Æó¥hØÿµ¸žõÿÿµ¨žõÿèu‚ÿÿƒÄÿµ¨žõÿèóÌÿÿé0 ‰ö…x?ûÿ‰…Ÿõÿé6v•xÿúÿ‰•Ÿõÿébvƒì…xßýÿPxÿùÿSèò†ÿÿ‰$èÆHh­„h½wh Sè @ƒÄ…xÿýÿPxßùÿS迆ÿÿ‰$è“Hh­„h½wh SèÚ?‰ßü¹ÿÿÿÿ°ò®ƒÄ ƒùþtƒìjS…x¿þÿPè¬HƒÄ…À…r •xÿùÿ‰×ü¹ÿÿÿÿ°ò®ƒùþtƒìjR…x¿þÿPèxHƒÄ…À„> ƒì…xþÿPxüÿSè'†ÿÿƒÄ¶…xüÿƒè*u¶C…À„<ƒì ÿµ´žõÿè²I‹•´žõÿ‰•ŸõÿƒÄ€½xüÿ„ùx?ûÿ‰œžõÿµxûÿ‰µ˜žõÿ…x_üÿ‰…”žõÿ‰ö‹Ÿõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹µŸõÿ¾öDA …æÿÿÿ‹…Ÿõÿ€8„’ƒìxûÿShdwPèv„ÿÿ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰Ÿõÿ‰ $è4@ƒÄj-Sèu€ÿÿƒÄ…ÀtbÆp€xt&¾P¡¬¤öDP uƒìSÿµœžõÿè…ÿÿƒÄVëJƒìh@jÿµ”žõÿè7„ÿÿƒÄ ½x_üÿÇ…žõÿ…éŠvƒìxûÿSÿµœžõÿè·„ÿÿƒÄSÿµ˜žõÿ訄ÿÿƒÄjj jÿµœžõÿèt‚ÿÿƒÄ‰Ãjj jÿµ˜žõÿè^‚ÿÿƒÄƒûw …Àxƒø~aƒìh@jÿµ”žõÿ訃ÿÿƒÄ ½x_üÿÇ…Œžõÿ…ü¹ ¾…ó¥f¥¤hØÿµ¸žõÿÿµ”žõÿèOÿÿƒÄÿµ”žõÿèÍÉÿÿƒÄë9øžõÿ| 9…øžõÿŽÈüÿÿ‹…Ÿõÿ€8…-þÿÿ‹½Ÿõÿü¹ÿÿÿÿ°ò®ƒùþ„уì…x?þÿPxüÿS躃ÿÿƒÄ¶…xüÿƒè*u¶C…À„ƒì ÿµ´žõÿèEG‹•´žõÿ‰•ŸõÿƒÄ€½xüÿ„Ìxÿúÿ‰ˆžõÿµxßúÿ‰µ„žõÿ…x_üÿ‰…€žõÿ‹Ÿõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹µŸõÿ¾öDA …æÿÿÿ‹…Ÿõÿ€8„fƒìµx_ûÿVhdwPè ‚ÿÿƒÄj-Vè/~ÿÿ‰Ã‰÷ü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰Ÿõÿ‰ $è»=ƒÄ…Ût8Æ{€{„Œ¾S¡¬¤öDP u|ƒìVÿµˆžõÿè‘‚ÿÿƒÄWëvƒìx_ûÿSÿµˆžõÿès‚ÿÿƒÄSÿµ„žõÿèd‚ÿÿƒÄjj jÿµˆžõÿè0€ÿÿƒÄ‰Ãjj jÿµ„žõÿè€ÿÿƒÄû` w …Àx=` ~Xƒìh@jÿµ€žõÿè_ÿÿƒÄ ½x_üÿ¸@…ü¹ ‰Æó¥h×ÿµ¸žõÿÿµ€žõÿè}ÿÿƒÄÿµ€žõÿèÇÿÿƒÄë‰ö9ôžõÿ| 9…ôžõÿŽœúÿÿ‹…Ÿõÿ€8…Yþÿÿ‹½Ÿõÿü¹ÿÿÿÿ°ò®ƒùþ„‘½x_þÿü¹ÿÿÿÿ°ò®ƒùþu[ƒìh@jÿµ¨žõÿ趀ÿÿƒÄ ½x_üÿ¸€…ü¹ ‰Æó¥f¥hÖÿµ¸žõÿÿµ¨žõÿèf|ÿÿƒÄÿµ¨žõÿèäÆÿÿé!vƒì…x_þÿPÿµ´žõÿè ÿÿƒÄ‹…´žõÿ‰…Ÿõÿ€½xüÿ„Ñ•x¿ùÿ‰•|žõÿx_üÿ‰xžõÿµx_ùÿ‰µtžõÿv‹…Ÿõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹•Ÿõÿ¾öDA …æÿÿÿ‹Ÿõÿ€9„iƒìÿµ|žõÿhdwQèƒÿÿ‹½|žõÿü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰ŸõÿƒÄÿµ|žõÿè7;ƒÄhª…ÿµ|žõÿèÿÿƒÄ…Àt-ƒìÿµ|žõÿh¯…ÿµxžõÿè°ÿÿƒÄÿµxžõÿè¾Åÿÿé̓½äžõÿu)€½x¿ùÿ*„Žƒìj:ÿµ|žõÿè{ÿÿƒÄ‰Ã…Ûtƃìh jÿµtžõÿèÿÿƒÄµx¿ùÿj:VèäzÿÿƒÄ‰Ã…Û„σìV…xŸùÿPè‡ÿÿƒÄÆC€;t¾¡¬¤öDP t0ƒì…xŸùÿPhà…ÿµxžõÿèò~ÿÿƒÄÿµxžõÿèÅÿÿévƒìjh†Sè\AƒÄ…Àuƒìjh"†SèEAƒÄ…ÀtƒìSÿµtžõÿèÿ~ÿÿƒÄë2‰öƒì…xŸùÿPh@†ÿµxžõÿè~~ÿÿƒÄÿµxžõÿèŒÄÿÿé›vµx¿ùÿƒìjhw†Vè¢|ÿÿƒÄ…À…+ƒìh VµxÿüÿVèÒÇÿÿ‰4$èf@ƒÄ…Û„÷‰µðžõÿÆ…xßüÿ…xßüÿƒìh jPè¬}ÿÿƒÄ€½xÿüÿ„µxßüÿ‰ö‹ðžõÿ¾¡¬¤‰ÁöDP tÿ…ðžõÿ‹•ðžõÿ¾öDA …æÿÿÿ‹ðžõÿ€9„ÖƒìVhdwQè}ÿÿ‰÷ü¹ÿÿÿÿ°ò®÷Ñ‹•ðžõÿL ÿ‰ðžõÿƒÄj:Vè yÿÿƒÄ‰Ã…Ûtƃì ÿµtžõÿVÿµìžõÿh{†ÿµìžõÿè?}ÿÿƒÄ ‹ðžõÿ€9…Iÿÿÿë^v…xÿüÿPë9v…Ût,ƒì ÿµtžõÿÿµ|žõÿÿµìžõÿh{†ÿµìžõÿèó|ÿÿƒÄ ë!‰öÿµ|žõÿÿµìžõÿh€wÿµìžõÿèÐ|ÿÿƒÄ‹µŸõÿ€>…Vüÿÿƒì ÿµìžõÿè8ƒÄÿµìžõÿèÞ>ƒÄƒìÿµ Ÿõÿhÿÿµ¸žõÿèvzÿÿƒÄ…À…ëìÿÿƒì ÿµ Ÿõÿè-{ÿÿ½xýÿü¹ÿÿÿÿ°ò®ƒÄƒùþu ƒìéf µxŸûÿ‰÷ü¹ÿÿÿÿ°ò®ƒùþ„ºxüÿƒìh@jSèË{ÿÿƒÄ hÿ?VSèÜ{ÿÿƒÄ‰Ÿõÿ€½xüÿ„•x¿ùÿ‰•pžõÿxýÿ‰lžõÿ‰ö‹µŸõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹•Ÿõÿ¾öDA …æÿÿÿ‹Ÿõÿ€9„$ƒìÿµpžõÿhdwQè÷zÿÿ‹½pžõÿü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰Ÿõÿ‰ $è±6ƒÄÿµpžõÿÿµlžõÿèiyÿÿƒÄ‰Ã…Û„¶µx¿ùÿ‰öƒì…xŸùÿPhdwSèzÿÿ½x¿ùÿü¹ÿÿÿÿ°ò®÷ÑL ÿ‰ðžõÿ¾¡¬¤ƒÄöDP u €9:t€9uG½xŸùÿü¹ÿÿÿÿ°ò®÷ÑL ÿ‰ðžõÿ€9tƒìQSè{ÿÿƒÄëvƃìVÿµlžõÿèÂxÿÿë CƒìVPè³xÿÿƒÄ‰Ã…Û…Rÿÿÿ‹•Ÿõÿ€:…›þÿÿƒì xýÿSè¤<‰$èT6‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþuƒìé] ƒìh½w½xýÿWèÀxÿÿƒÄ xüÿh@jSèÊyÿÿƒÄ …xŸûÿh@jPè´yÿÿƒÄ hÿ?WSèÅyÿÿƒÄ‰Ÿõÿ€½xüÿ„•xŸùÿ‰•hžõÿx¿ùÿ‰džõÿv‹µŸõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹•Ÿõÿ¾öDA …æÿÿÿ‹Ÿõÿ€9„ÀƒìÿµhžõÿhdwQèßxÿÿ‹½hžõÿü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰Ÿõÿ‰ $è™4ƒÄÿµhžõÿÿµdžõÿè‘yÿÿƒÄÿµHöÿ…0ŸõÿP…,ŸõÿP…(ŸõÿPÿµhžõÿè¼ÄÿÿƒÄj:ÿµhžõÿè˜tÿÿƒÄ…ÀtÆ‹Ÿõÿ‰ðžõÿµxùÿ‰µ`žõÿéÀxŸùÿ‰ßü¹ÿÿÿÿ°ò®÷ÑIµxùÿƒìQSVèúvÿÿƒÄ…ÀuK‰ßü¹ÿÿÿÿ°ò®÷Ñ€|ÿ:tr‰ß¹ÿÿÿÿò®÷Ñ€|ÿt`‰÷¹ÿÿÿÿò®‰È÷ÐXÿƒìVÿµðžõÿè}vÿÿë.v‹½`žõÿü¹ÿÿÿÿ°ò®‰È÷ÐXÿƒìÿµ`žõÿÿµðžõÿèMvÿÿƒÄ؉…ðžõÿé ƒìµxùÿ‰÷ü¹ÿÿÿÿ°ò®‰È÷ÐXÿVÿµðžõÿèvÿÿƒÄØPÿµðžõÿèCxÿÿƒÄÿµHöÿ…$ŸõÿP… ŸõÿP…ŸõÿPVèsÃÿÿƒÄ ‹…$Ÿõÿ;…0Ÿõÿ}*‹…Ÿõÿ‰…(Ÿõÿ‹… Ÿõÿ‰…,Ÿõÿ‹…$Ÿõÿ‰…0ŸõÿƒìVëe‹…$Ÿõÿ;…0Ÿõÿu‹…Ÿõÿ;…(Ÿõÿ}‰…(Ÿõÿ‹… Ÿõÿë,‰ö‹…$Ÿõÿ;…0Ÿõÿu9‹…Ÿõÿ;…(Ÿõÿu+‹… Ÿõÿ;…,Ÿõÿ}‰…,Ÿõÿƒìÿµ`žõÿÿµdžõÿètwÿÿƒÄƒìÿµ`žõÿhdwÿµðžõÿèhvÿÿƒÄ…Àþÿÿÿµdžõÿ…xŸûÿPh€wPèÕvÿÿƒÄ‹•Ÿõÿ€:…ÿüÿÿƒì…xŸûÿPxýÿSè wÿÿ‰$è™2‰$èÙ8èHrÿÿPh@† h„†…H_öÿPèvÿÿƒÄ …xŸþÿP…x_ýÿPhky…xùÿPè_vÿÿƒÄ h h’†…xøÿPèæ¿ÿÿƒÄ h h™†…x_øÿPèÍ¿ÿÿƒÄ h h †xøÿSè´¿ÿÿh½wh«†h Sè—/ƒÄh½wSètÿÿƒÄ h h­†x?øÿSèx¿ÿÿh½wh«†h Sè[/ƒÄh½wSèEtÿÿƒÄ h h¼†…xÿ÷ÿPè<¿ÿÿƒÄ h hņ…xß÷ÿPè#¿ÿÿƒÄ h@hÕ†x÷ÿSè ¿ÿÿƒÄh@SèÂÿÿƒÄµxÿ÷ÿ¿ß†¹üó¦—Â’À8Âu…x¿÷ÿƒìh jPèÖtÿÿƒÄƒ½Ÿõÿ…[…xŸûÿ¿@ƒìWjPè¯tÿÿƒÄ xüÿWjSètÿÿƒÄ…xýÿPSè=uÿÿƒÄ‰Ÿõÿ€½xüÿ„§x¿ùÿ‰\žõÿv‹µŸõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹•Ÿõÿ¾öDA …æÿÿÿ‹Ÿõÿ€9„Wƒìÿµ\žõÿhdwQèÓsÿÿ‹½\žõÿü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰ŸõÿƒÄ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹µŸõÿ¾öDA …æÿÿÿƒìj:ÿµ\žõÿè¢oÿÿƒÄ‰Á…ÉtÆ…xŸûÿƒìÿµ\žõÿPèrÿÿƒÄ…À…§…xŸøÿÇnp_*Æ@Ç…Ÿõÿƒì…ŸõÿPj…x¿øÿP…xŸøÿPh@† …ŸõÿPèÍ8ƒÄ ƒø…E…x¿ùÿ‰…Xžõÿ•x¿øÿ‰•Tžõÿx_üÿ‰Pžõÿ‹½Xžõÿü¹ÿÿÿÿ°ò®÷ÑI…{¿øÿƒìQÿµXžõÿPè‡qÿÿƒÄ…À…·ÿµTžõÿh@† hê†x?ÿÿSèsÿÿ…ˆ_ÿÿƒÄ PSjèžpÿÿƒÄ…À…Sƒì‹…´_ÿÿ@PjèArÿÿ‰ÆƒÄ…ö„(ƒìh²wSè¦rÿÿ‰… ŸõÿƒÄ…À„ÑPjÿµ´_ÿÿVèpÿÿƒÄ…ÀtƒìÿµXžõÿVè°pÿÿƒÄ…À„…èŸÿÿƒìPVè•pÿÿƒÄ…Àtyƒìhð†Vè€pÿÿƒÄ…ÀudÿµXžõÿ…xŸûÿPh€wPèArÿÿƒÄÿµ Ÿõÿèópÿÿ‰4$è«qÿÿƒÄéãvƒì…x?ÿÿPh‡ÿµPžõÿèrÿÿƒÄÿµPžõÿè¸ÿÿƒÄƒì ÿµ Ÿõÿè§pÿÿë)ƒì…x?ÿÿPh@‡ÿµPžõÿèÊqÿÿƒÄÿµPžõÿèØ·ÿÿƒÄƒì Vè0qÿÿë6‰öƒì hb‡ë%‰öƒì…x?ÿÿPh€‡ÿµPžõÿè†qÿÿƒÄÿµPžõÿè”·ÿÿƒÄƒì…ŸõÿPjÿµTžõÿ…xŸøÿPh@† ÿµŸõÿèð6ƒÄ ƒø„àýÿÿƒì ÿµŸõÿè7ƒÄ‹•Ÿõÿ€:…hüÿÿƒì xŸûÿSè-‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþu)ƒìëƒì ÿµ ŸõÿèªoÿÿƒÄ…H¿õÿPjè=·ÿÿ飃ì…xŸûÿP…xýÿPèqÿÿƒÄƒì h¢‡èþlÿÿ‰…ØžõÿƒÄ…Àu Ç…Øžõÿ†wƒì h®‡èÚlÿÿ‰…ÔžõÿƒÄ…Àu Ç…Ôžõÿ†wƒì h¼‡è¶lÿÿ‰…ОõÿƒÄ…Àu DžОõÿ†wƒì hƇè’lÿÿ‰…ÌžõÿƒÄ…Àu Ç…Ìžõÿ†wƒì hЇènlÿÿ‰…ÈžõÿƒÄ…Àu Ç…Èžõÿ†wÇ…àžõÿ xüÿƒìh@jSè—oÿÿƒÄ…xýÿPSè7pÿÿƒÄ‰Ÿõÿ‰ßü¹ÿÿÿÿ°ò®ƒùþ„t•x¿ùÿ‰•Lžõÿx?ÿÿ‰HžõÿµèŸÿÿ‰µDžõÿ…xßûÿ‰…@žõÿ•xßøÿ‰•8žõÿ‹Ÿõÿ¾¡¬¤‰ÁöDP tÿ…Ÿõÿ‹µŸõÿ¾öDA …æÿÿÿ‹…Ÿõÿ€8„öƒìÿµLžõÿhdwPè—nÿÿÇ…Üžõÿÿÿÿÿ‹½Lžõÿü¹ÿÿÿÿ°ò®÷Ñ‹•ŸõÿL ÿ‰Ÿõÿ‰ $èç*ƒÄÿµHöÿ…0ŸõÿP…,ŸõÿP…(ŸõÿPÿµLžõÿè~ºÿÿƒÄj:ÿµLžõÿèZjÿÿƒÄ‰…ðžõÿ…ÀtÆ…xùÿƒìjhQƒPèälÿÿƒÄ…À„у½Ÿõÿ„Ä…xŸ÷ÿ•x?øÿƒìPRè†lÿÿƒÄ…ÀtXƒìjh݇x¿ùÿSèÙ0ƒÄƒø…ß ƒìjh¯xSè½0ƒÄ…À…Ä ƒìjhã‡Sè¢0ƒÄ…À…© ƒì …DŸõÿPèØkÿÿƒÄ h jÿµHžõÿè“mÿÿƒÄÿµLžõÿh@† hê‡ÿµHžõÿèÅmÿÿƒÄµxÿ÷ÿ¿ó‡¹üó¦—Â’À8Âu!ƒìhù‡ÿµHžõÿè"lÿÿƒÄÿµDžõÿëyvµxÿ÷ÿ¿ß†¹üó¦—Â’À8Âuƒìhù‡ÿµHžõÿèäkÿÿƒÄ…x¿÷ÿë:µxÿ÷ÿ¿û‡¹üó¦—Â’À8Âu+ƒìhù‡ÿµHžõÿè¨kÿÿƒÄ…xŸþÿPÿµHžõÿè“kÿÿƒÄ…ˆ_ÿÿƒìPÿµHžõÿjè‰jÿÿƒÄ…Àu‹…È_ÿÿ;…DŸõÿr »ë»ènhÿÿ¹ †™÷ù‰•Üžõÿƒú ’€€€€€Áàëwƒ½Üžõÿc‹Üžõÿ‰€€€€ÁàëT½Üžõÿ狵ܞõÿ¶€€€Áàë0½Üžõÿ'‹•Üžõÿ’€€Áàë‹Üžõÿ‰€Áà‰…Üžõÿ‹µàžõÿµÜžõÿF‰µàžõÿ÷…0Ÿõÿ „…Ûtxƒû…û‹È_ÿÿµxŸ÷ÿ¿ˆ¹üó¦—Â’À8Âu‹…DŸõÿ+@Æ 9Ã|éÃv‹…DŸõÿ-X9íµxÿ÷ÿ¿ó‡¹üó¦—Â’À8„Œ÷…0Ÿõÿt$ƒìÿµLžõÿ…xŸ÷ÿPÿµDžõÿÿµÜžõÿhˆëƒì ÿµLžõÿ…xŸ÷ÿPÿµDžõÿhˆÿµ@žõÿè"kÿÿƒÄ ƒìÿµ@žõÿÿµHžõÿè÷1ƒÄÿµ(ŸõÿÿµHžõÿèó0ƒÄé‘ vµxÿ÷ÿ¿ó‡¹üó¦—Â’À8Â…¼ƒì ÿµHžõÿèÙ1‰ÆƒÄ…ö„¡h†wh.ˆ‰÷ü¹ÿÿÿÿ°ò®÷ÑIQVè($ƒÄ jh@ˆVè-ƒÄƒøu]X¿öÿÇ…X¿öÿÇ…\¿öÿÇ…`¿öÿÇ…d¿öÿƒìjVSèjÿÿƒÄÆ…_¿öÿjj jSèhhÿÿƒÄ…À~‰…Üžõÿƒì Vè’iÿÿƒÄƒìÿµLžõÿ…xŸ÷ÿPÿµDžõÿÿµÜžõÿhhˆÿµ@žõÿèãiÿÿƒÄÿµ@žõÿÿµHžõÿè»0ƒÄÿµ,ŸõÿÿµHžõÿè·/ƒÄ‹…ŸõÿH!…Üžõÿ•h÷ÿ‰•<žõÿÇ…h÷ÿÇ…l÷ÿfÇ…p÷ÿ½hÿöÿ» ƒìSjWèiÿÿƒÄ µhßöÿSjVè iÿÿƒÄƒ½ÜžõÿxDƒìÿµÜžõÿhvˆÿµ<žõÿè4iÿÿƒÄ ÿµÜžõÿh|ˆWè iÿÿƒÄ ÿµÜžõÿh„ˆVè iÿÿƒÄ…h¿öÿƒìh jPè£hÿÿƒÄµxß÷ÿ¿ß‚¹üó¦—Â’À8Â…è¿ÿÿƒìj héƒSè gÿÿƒÄ…À„öƒìj hŒˆSèîfÿÿƒÄ…À„Û‹µØžõÿ¿—ˆ¹üó¦—Â’À8Âuj‹½Ìžõÿ¹ÿÿÿÿ°ò®÷ÑIƒìQÿµÐžõÿÿµÌžõÿèŸfÿÿƒÄ…Àt(ƒì ‰ØPÿµÐžõÿÿµÌžõÿh ˆ…h¿öÿPè%hÿÿƒÄ ëh…è¿ÿÿPÿµÐžõÿhàˆëE‹µØžõÿ¿ ‰¹üó¦—Â’À8Âu…è¿ÿÿPÿµÈžõÿh‰ëvÿµDžõÿÿµÔžõÿh(‰…h¿öÿPè»gÿÿƒÄ…x÷ÿ» ƒìSjPèQgÿÿƒÄ …x_÷ÿSjPè?gÿÿƒÄƒ½Ÿõÿ…׃ìh@jÿµ@žõÿègÿÿƒÄµèÿÿhA‰VèveÿÿƒÄ‰Á…Éts¾¡¬¤‰ÃöDP t9ñv‰ò‰öI¾öDC t9чíÿÿÿ¾¡¬¤‰ÃöDPt…èÿÿ‰Â9ÁvI¾öDCt9чíÿÿÿƒìÿµ@žõÿhdwQèMfÿÿƒÄƒìÿµ@žõÿhJ‰…x÷ÿPèÀfÿÿƒÄÿµ@žõÿ…x_÷ÿPè gÿÿƒÄxßøÿƒìh@jSèBfÿÿƒÄ…x÷ÿÿµLžõÿPèdÿÿƒÄ…Àt2ƒì…h¿öÿP…hÿöÿP…xùÿPÿµDžõÿhh‰SèMfÿÿƒÄ é ƒì…hÿöÿPÿµ8žõÿèfÿÿƒÄ ‹½8žõÿü¹ÿÿÿÿ°ò®÷ÑI»þ?‰Ø)ÈPh½wÿµ8žõÿèaÿÿƒÄ ‹½8žõÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈPÿµDžõÿÿµ8žõÿècaÿÿƒÄ ‹½8žõÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈPh½wÿµ8žõÿè8aÿÿƒÄ ‹½8žõÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈP…èÿÿPÿµ8žõÿè aÿÿƒÄ ‹½8žõÿü¹ÿÿÿÿ°ò®÷ÑI)ËS…h¿öÿPÿµ8žõÿèà`ÿÿƒÄhy‰ÿµ8žõÿèÍcÿÿƒÄƒìjjèŽaÿÿƒÄ ½Xöÿ» SjWèÇdÿÿƒÄµh÷ÿV…xùÿPhkyWèûdÿÿÇ…ÄžõÿƒÄ jhã‡ÿµLžõÿèl'ƒÄƒø…lSh …ÿµ8žõÿh{‰èš.Sh ¥Vh†‰è‰.ƒÄ Sh ÅÿµDžõÿhŽ‰èp.Sh å…xßþÿPh˜‰èY.ƒÄ Sh …xŸþÿPh£‰è?.Sh %…x_ýÿPhª‰è(.ƒÄ Sh E…x¿þÿPh³‰è.Sh eWh½‰èý-ƒÄ Sh ……xŸ÷ÿPhljèã-Sh ¥ÿµDžõÿhÔ‰èÍ-ƒÄ Sh Å…è¿ÿÿPhâ‰è³-Sh å…x÷ÿPhò‰èœ-ƒÄ Sh …x_÷ÿPhþ‰è‚-Sh %¸Í€ƒ½Ÿõÿt¸Ë€PhŠè^-ƒÄÿµLžõÿèäÇÿÿ‰…ÄžõÿéɃìjh¯xÿµLžõÿèß%ƒÄƒøuWƒì …xùÿPÿµDžõÿ…hßöÿPhŠÿµ8žõÿè cÿÿƒÄ…XŸöÿfÇBBÆ@ÿµLžõÿPÿµ8žõÿè<³ÿÿ‰…ÄžõÿéUƒìjh݇µx¿ùÿVèj%ƒÄƒøuFƒì …xùÿPÿµDžõÿ…hßöÿPhŠXŸöÿSèªbÿÿƒÄVSÿµ8žõÿèÚ²ÿÿ‰…Äžõÿéóvƒìjh#Šx¿ùÿSè%ƒÄƒøu&S…x_øÿP…xøÿP…XöÿPèC´ÿÿ‰…Äžõÿ鬃ìjh)Šx¿ùÿSèÂ$ƒÄƒøuƒìSÿµ8žõÿèµÿÿ‰…Äžõÿétƒìjh0Šx¿ùÿSèŠ$ƒÄƒøuƒìSÿµ8žõÿè[¶ÿÿ‰…Äžõÿé<ƒìjh9Šx¿ùÿSèR$ƒÄƒøuƒìSÿµ8žõÿè'·ÿÿ‰…Äžõÿéƒìjh?Šx¿ùÿSè$ƒÄƒøtƒìjhEŠSè$ƒÄƒøu"ƒìÿµLžõÿÿµ8žõÿè–¸ÿÿ‰…Äžõÿé¯vƒìjhLŠx¿ùÿSèÂ#ƒÄƒøu.ƒì ÿµŸõÿ…x¿þÿP…xþÿPSÿµ8žõÿè»ÿÿ‰…ÄžõÿƒÄ ëcƒìjhTŠx¿ùÿSèv#ƒÄƒøuƒìSÿµ8žõÿè3ºÿÿ‰…Äžõÿë+vƒìÿµLžõÿh€ŠHŸõÿSèª`ÿÿƒÄShòwèx)ƒÄƒ½Äžõÿu2ƒìÿµŸõÿ…x÷ÿP…x_ýÿPÿµLžõÿ…xŸþÿPÿµDžõÿè5¯ÿÿƒÄ ‹½Ÿõÿü¹ÿÿÿÿ°ò®ƒùþ…Éðÿÿƒì …H¿õÿPè6¥ÿÿ¸eô[^_]ÃU‰åWVSìYÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷ÑI¾ÿ‰ð)ÈPh½wSè×TÿÿƒÄƒ½ì¾üÿcuƒì‰ßü¹ÿÿÿÿ°ò®÷ÑI‰ð)ÈPh¿ŒSë*ƒì‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷Ѹ )ÈP…èýÿPÿµÐ¾üÿè}TÿÿƒÄƒì‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI»ÿ‰Ø)ÈPh½wÿµÐ¾üÿèJTÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈP…è_ÿÿPÿµÐ¾üÿèTÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈPh½wÿµÐ¾üÿèòSÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈP…èÿÿPÿµÐ¾üÿèÅSÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈPh½wÿµÐ¾üÿèšSÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈP…ßüÿPÿµÐ¾üÿèmSÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈPh½wÿµÐ¾üÿèBSÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI‰Ø)ÈP…èßþÿPÿµÐ¾üÿèSÿÿƒÄ ‹½Ð¾üÿü¹ÿÿÿÿ°ò®÷ÑI)ËShy‰ÿµÐ¾üÿèìRÿÿƒÄè”Sÿÿ‰Ã…Ûyƒì hʌ豅ÿÿƒÄ…Û……èÿÿPÿµØ¾üÿhÕŒ¿üÿSèWÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ѹ )ÈPÿµÐ¾üÿSèƒRÿÿƒÄ Sÿ5àE ÿ5 † èž ‰$è&Vÿÿ‰öƒìÿµà¾üÿh‡èÿÿSèºVÿÿƒÄSh’‹èüœÿÿƒÄƒì ÿµð¾üÿè[Uÿÿë)ƒìÿµà¾üÿh@‡èÿÿSè~VÿÿƒÄSh’‹èÀœÿÿƒÄƒì ÿµè¾üÿèßUÿÿë5ƒìhb‡ë ‰öƒìÿµà¾üÿh€‡èÿÿSè6VÿÿƒÄSh’‹èxœÿÿƒÄƒì…¿üÿPj…è_þÿP…è¿þÿPh@† ÿµ¿üÿèŸƒÄ ƒø„úÿÿƒì ÿµ¿üÿèÅéU µèßÿÿ¿íŒ¹ üó¦—Â’À8Â…ó‹½ô¾üÿ¹ÿÿÿÿ°ò®ƒùþuƒìhéý‰öèŸþÿƒìh jSè2UÿÿƒÄ Shdwÿµô¾üÿèÞTÿÿ‰$èVƒÄƒøtƒìSh>飵èŸþÿ‰÷ü¹ÿÿÿÿ°ò®‰Ê÷ÒZÿƒìVÿµô¾üÿèHSÿÿ؉…ô¾üÿ‰$èl‹½ô¾üÿü¹ÿÿÿÿ°ò®ƒÄƒùþuƒìh`éVvèÿþÿƒìh jSèŠTÿÿƒÄ Shdwÿµô¾üÿè6TÿÿƒÄjj jSè÷RÿÿƒÄ‰…ø¾üÿ…ÀyƒìSh‚éïµèÿþÿ‰÷ü¹ÿÿÿÿ°ò®‰Ê÷ÒZÿƒìVÿµô¾üÿè”Rÿÿ؉…ô¾üÿ‰$踋½ô¾üÿü¹ÿÿÿÿ°ò®ƒÄƒùþtƒìh é¢v½ˆýÿƒìh jWèÖSÿÿƒÄƒ=h …¢ƒì…èŸþÿPµèþÿVè`TÿÿƒÄj,Vè•OÿÿƒÄ‰Ã…Ût`ƃìVWè?TÿÿƒÄCj.Pè¡RÿÿƒÄ‰Æ…öt ƒìVWèNRÿÿëvƒì…èŸþÿPhÃèÿÿSè¡SÿÿƒÄSh1èã™ÿÿé ‰öƒì…èŸþÿP…ˆýÿPèÖSÿÿë.ƒì…èŸþÿPˆýÿSè¾SÿÿƒÄh‡whÀƒh SèÞ ƒÄƒìh h¼†ˆ_ýÿSèÊœÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþuƒìhàh1èT™ÿÿƒÄµˆ_ýÿ¿Õ¹üó¦—Â’À8„€µˆ_ýÿ¿ß†¹ó¦—Â’À8Âtdµˆ_ýÿ¿û‡¹ó¦—Â’À8ÂtHµˆ_ýÿ¿ó‡¹ó¦—Â’À8Ât,ƒì…ˆ_ýÿPhŽèÿÿSèqRÿÿƒÄSh1賘ÿÿƒÄƒìh h+Žˆ?ýÿSèç›ÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþuƒìh@Žh1èq˜ÿÿƒÄµˆ?ýÿ¿ß‚¹üó¦—Â’À8Âu<ƒì ÿµø¾üÿèçP…èŸþÿPh€ŽˆÿüÿSèÚQÿÿƒÄSè}¸ÿÿƒÄƒød„AèNÿÿ‰Ã…Ûyƒì hÊŒè€ÿÿƒÄ…Ûu:ƒì…ˆýÿPh»Ž¿üÿSè‹QÿÿƒÄ Sÿ5àE ÿ5 † è6‰$è¾Pÿÿ‰öˆýÿƒìj.Sè+PÿÿƒÄ ‰ÆÆFÿµø¾üÿVSè© ÿÿÆFÿ.ƒÄµˆ_ýÿ¿ó‡¹üó¦—Â’À8Â…™…ˆßüÿƒìh jPè·PÿÿƒÄ…è¿þÿÇnp_*Æ@Ç…¿üÿ…¿üÿPj…è_þÿP…è¿þÿPh@† …¿üÿPèþƒÄ ƒø…G•è?þÿ‰•Ì¾üÿèÿÿ‰È¾üÿ‰ö…è_þÿPh@† hê†ÿµÌ¾üÿè€Pÿÿ…ˆýÿƒÄ PÿµÌ¾üÿjè NÿÿƒÄ…À…Šƒì‹…´ýÿ@Pjè¬Oÿÿ‰…è¾üÿƒÄ…À„[ƒìh²wÿµÌ¾üÿèPÿÿ‰…ð¾üÿƒÄ…À„÷Pjÿµ´ýÿÿµè¾üÿècMÿÿƒÄ…À„œƒì ÿµð¾üÿèªNÿÿƒÄ…ˆýÿPÿµè¾üÿèõMÿÿƒÄ…À„Ùˆßüÿ‰ßü¹ÿÿÿÿ°ò®‰Ê÷Ò‹½Ì¾üÿ¹ÿÿÿÿò®÷ÑL ÿùþw%ƒìÿµÌ¾üÿSèNÿÿƒÄh½wSè Nÿÿéƒv½èÿÿ¾àŽü¹ ó¥ƒìëXƒìÿµÌ¾üÿh‡ÿµÈ¾üÿèCOÿÿƒÄÿµÈ¾üÿh1耕ÿÿƒÄÿµð¾üÿèâMÿÿë,ƒìÿµÌ¾üÿh@‡ÿµÈ¾üÿèOÿÿƒÄÿµÈ¾üÿh1èD•ÿÿƒÄƒì ÿµè¾üÿècNÿÿë9ƒìhb‡ë$‰öƒìÿµÌ¾üÿh€‡ÿµÈ¾üÿè»NÿÿƒÄÿµÈ¾üÿh1èø”ÿÿƒÄƒì…¿üÿPj…è_þÿP…è¿þÿPh@† ÿµ¿üÿèƒÄ ƒø„Óýÿÿƒì ÿµ¿üÿèEˆßüÿ‰$èG ‰ô¾üÿƒÄ‰ßü¹ÿÿÿÿ°ò®ƒùþ„±è?þÿvƒìShÿµô¾üÿèˆMÿÿ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹•ô¾üÿL ÿ‰ô¾üÿ‰ $èF ‰$èšJÿÿƒÄ‹½ô¾üÿü¹ÿÿÿÿ°ò®ƒùþ…¢ÿÿÿéEµèßÿÿ¿¹ üó¦—Â’À8…닽ô¾üÿ¹ÿÿÿÿ°ò®ƒùþuƒìhh7èÑ“ÿÿéøƒì jèRKÿÿ‰…ä¾üÿƒÄ PhH€…ßüÿPèWMÿÿƒÄ •è¿ýÿ‰•À¾üÿh jRèëLÿÿƒÄ ÿµÀ¾üÿhdwÿµô¾üÿè’LÿÿƒÄÿµÀ¾üÿÿµô¾üÿè.KÿÿƒÄ ‰…ô¾üÿ‹•À¾üÿü¹ÿÿÿÿ‰×°ò®÷Ñô¾üÿèÿÿh jSèˆLÿÿƒÄ Shdwÿµô¾üÿè4LÿÿƒÄSÿµô¾üÿèÕJÿÿƒÄ‰…ô¾üÿ‰Úü¹ÿÿÿÿ‰×°ò®÷Ñô¾üÿjj jSèÊJÿÿƒÄ ‰…ü¾üÿµèþÿh jVèLÿÿƒÄ hþh€& Vè+LÿÿƒÄhHVèÝJÿÿƒÄ ‰òü¹ÿÿÿÿ‰×°ò®÷Ѹ )ÈPÿµÀ¾üÿVè¶GÿÿƒÄ (ßüÿjXjSèÃKÿÿƒÄ SVjè§IÿÿƒÄƒøÿt‹…ä¾üÿ…ü¾üÿ9…hßüÿcƒìÿµô¾üÿèþÿS较Äÿµü¾üÿSè¿é7‰öµèßÿÿ¿N¹ üó¦—Â’À8Â…닽ô¾üÿ¹ÿÿÿÿ°ò®ƒùþu ƒìh`ëTèŸþÿƒìh jSèKÿÿƒÄ Shdwÿµô¾üÿèÂJÿÿ‰$è:ƒÄƒøt*ƒìSh>èÿÿSè-KÿÿƒÄSh€èo‘ÿÿé–‰öèþÿƒìh jSè²JÿÿƒÄ hùh€& Sè¿JÿÿƒÄhHSèqIÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ѹ )ÈP…èŸþÿPSèKFÿÿ‰$ècGÿÿë*ƒì…èßÿÿPhèÿÿSè•JÿÿƒÄSh1è×ÿÿƒÄeô[^_]ÃU‰åSì ÿ5 EhÀøßÿÿSè[JÿÿƒÄSjè,Ç$E‹]üÉÃU‰åWVSì< Ç…ÄßÿÿÇ$E‹u¿Þ¹üó¦—Â’À‹M‰Ðßÿÿ8Âu9‹E ‰…Ðßÿÿë.‰öƒìh ØßÿÿSèÜIÿÿƒÄSjè­¸ÿÿÿÿéWvƒì‹½Ðßÿÿü¹ÿÿÿÿ°ò®÷ÑQjèIÿÿ‰…ÌßÿÿƒÄéØ‹Ðßÿÿ¾¡¬¤‰ÁöDP tÿ…Ðßÿÿ‹•Ðßÿÿ¾öDA uê‹Ðßÿÿ€9„²‰Mƒìj QèíDÿÿƒÄ…ÀtÆ@‰…Ðßÿÿë ‰öÇ…Ðßÿÿ‹E£ Eƒ½Ìßÿÿt4‹½Ìßÿÿü¹ÿÿÿÿ°ò®ƒùþtƒìÿµÐßÿÿÿµÌßÿÿèGÿÿƒÄ…À…èƒì ÿuè>Gÿÿ‰…ÔßÿÿƒÄƒøÿuj‹U€:u ƒì hæë‰öƒì ÿuèÑGÿÿ‰ÁƒÄ…Éu(ƒìÿuhðØßÿÿSè‘HÿÿƒÄSjèbé}‹A•Ôßÿÿƒìÿq ÿ0RèGÿÿƒÄ‹}ü¹ÿÿÿÿ°ò®÷щÈßÿÿƒì QèxEÿÿ‰…ÄßÿÿƒÄ…À„GþÿÿƃìÿuÿµÄßÿÿè³Fÿÿ}Øü¸¹ó«fÇEØ‹…Ôßÿÿ‰E܃ĸÀfÁÈf‰EÚƒìjh F èuEÿÿƒÄhìIjè6DÿÿÇ$è HÿÿƒÄ jjjèÜGÿÿ‰ÇƒÄ…ÿy'ƒìhCØßÿÿSèŸGÿÿƒÄSjèp»ÿÿÿÿëYƒìjEØPWè=GÿÿƒÄ…Ày*ƒìÿuh`ØßÿÿSè_GÿÿƒÄSjè0»ÿÿÿÿëj‹…Èßÿÿ@PÿµÄßÿÿWèÆFÿÿ‰ÃƒÄƒì jègGÿÿƒÄƒ=$Eu…Û Ç$Eƒì Wè$CÿÿƒÄƒ½ÐßÿÿtO‹•Ðßÿÿ€:t,¾¡¬¤‰ÁöDP tÿ…Ðßÿÿ‹…Ðßÿÿ€8t ¾öDA u僽Ðßÿÿt‹•Ðßÿÿ€:…ýÿÿƒ½Ìßÿÿtƒì ÿµÌßÿÿèFÿÿƒÄƒ½Äßÿÿtƒì ÿµÄßÿÿèøEÿÿƒÄ¡$Eeô[^_]ÃU‰åWVSƒì ‹]ÇEì‰]ð…Ûtƒ}tƒ}t ƒ} …Ù¸éw‰öƒ}ìu*ƒì ÿu èKCÿÿ‰EìƒÄ…À„ƒìÿu jPè¯EÿÿƒÄ9Þt@Æ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰È÷ÐTþ‹E H9ÂÃìSÿuìèKDÿÿƒÄ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷Ò‹}¹ÿÿÿÿò®‰Ë‰Ø÷ÐTþ‹E H9ƒƒìÿuÿuìè Dÿÿ‹}ü¹ÿÿÿÿ°ò®‰Ê‰Ð÷Ð\ÿƒÄƒìÿuSèsCÿÿƒÄ‰Æ…ö…ÿÿÿƒ}ì„€‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰Î‰ð÷ÐTþ‹E H9Â~,ë ‰ö¸ëNƒìÿuìÿuðèVEÿÿƒÄÿuìèkDÿÿ¸ë-ƒìSÿuìèhCÿÿƒÄÿuìÿuðè*EÿÿƒÄÿuìè?DÿÿƒÄ¸eô[^_]ÃvU‰åWS‹]…Ût@‰ßü¹ÿÿÿÿ°ò®ƒùþt/‰Ù¾¡¬¤‰ÇöDP t A¾öDG uõ9Ët ƒìQSèÃDÿÿƒÄeø[_]ÃU‰åWS‹]…Ût;‰ßü¹ÿÿÿÿ°ò®ƒùþt*‰ß¹ÿÿÿÿò®÷ÑL þë‰öÆI9Ùr¾¡¬¤öDP ué[_]ÃU‰åSƒì‹]SèPÿÿÿ‰$èœÿÿÿ‹]üÉÃvU‰åWƒì‹U‰×ü¹ÿÿÿÿ°ò®÷ÑI¸ƒùw7¸ÿÿÿÿ‰Eì‰Eð‰Eô‰EøƒìEøPEôPEðPEìPh Rè CÿÿƒÄ ¸‹}üÉÃU‰åWVSƒìL‹u‹] ÇE´ƒ>u:ƒì h¬è´?ÿÿ‰ÂƒÄ…Òt$‰×ü¹ÿÿÿÿ°ò®ƒùþtƒìh´RèCÿÿ‰ƒÄƒ>„MƒìÿujSèÐBÿÿƒÄE؉E°EȉE¬E¸‰E¨é ‰öÇE´éƒì Sèãþÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþ„Û€; „Ò€;#„É÷Eu¸÷E„¢¾¡¬¤öDP„ÇEØÇEÜÇEàÇEäÇEÈÇEÌÇEÐÇEÔÇE¸ÇE¼ÇEÀÇEăìjSÿu°è BÿÿƒÄÿu¨ÿu¬h¶ÿu°è”AÿÿƒÄÿu¬è-þÿÿƒÄƒø„ ÿÿÿƒìÿujSè¯AÿÿƒÄƒìÿ6‹EHPSèÜ?ÿÿƒÄ…À…éþÿÿƒ>tƒ}´uƒì ÿ6èŒ@ÿÿǃċE´eô[^_]ÃU‰åWVSì@¸ƒ}„f‹}ü¹ÿÿÿÿ°ò®¸ƒùþ„K‹}¹ÿÿÿÿ°ò®÷ÑI‹EH9Áƒ+ƒìÿuÿu è¹AÿÿÇ$¬è=ÿÿƒÄ…À„ƒìh´PèAÿÿ‰…ä¿ÿÿƒÄ…À„ç颉öƒ½à¿ÿÿ„{è¿ÿÿ‰ßü¹ÿÿÿÿ°ò®¸ùÿßÿÿ”ÀH!…à¿ÿÿƒì Sè3üÿÿ¾•è¿ÿÿ¡¬¤ƒÄöDP„S‰Ù‰ÂA¾öDBuõ€9.tð‰Â¡¬¤öDP „,ÆAƒìQèßÿÿSèê@ÿÿ‰$èÖûÿÿÇ…Ü¿ÿÿÇ$¼è¼<ÿÿƒÄ…Àt#‰Æ¿Á¹üó¦—Â’À8Âu Ç…Ü¿ÿÿ‹}ü¹ÿÿÿÿ°ò®÷ÑqÿèßÿÿƒìVÿuSèm>ÿÿƒÄ…À…  ƒ½Ü¿ÿÿt¾¡¬¤öDP u €9të~¾¡¬¤öDP u €9t€9.ue…è¿ÿÿ‰Æ¿Æ¹üó¦—Â’À8Âuƒ}tƒì…è¿ÿÿPÿu è@ÿÿƒÄ¸ë_‰ö½è¿ÿÿü¹ÿÿÿÿ°ò®ùÿßÿÿt Ç…à¿ÿÿƒìÿµä¿ÿÿhÿ…è¿ÿÿPèH=ÿÿƒÄ…À…1þÿÿƒì ÿµä¿ÿÿèÿ=ÿÿƒÄ¸eô[^_]ÃvU‰åWVS‹]¶ƒèru¶Cƒèeu ¶Cƒèdu¶C…Àu ¸é¢v‰Þ¿Ò¹üó¦—Â’À8Âu¸ë‰Þ¿Ù¹üó¦—Â’À8Âu¸ë_‰Þ¿à¹üó¦—Â’À8Âu¸ë?‰Þ¿æ¹üó¦—Â’À8Âu¸ë‰Þ¿ë¹üó¦—Á’¸8Ñ”À[^_]ÃU‰åVSƒì‹u‹] ŠEˆE÷€;t"ëŠU÷ˆ¾ƒìPVèÂ9ÿÿƒÄ…ÀuçC€;uæeø[^]ÉöU‰åƒìEüPèÝ;ÿÿEü‰$èÒ<ÿÿƒÄPh@EèD>ÿÿƒÄj h@Eèu9ÿÿƒÄ…ÀtƸ@EÉÃU‰åWS‹]€;tv¾¡¬¤öDP tÆ C€;uèhñhó‰ßü¹ÿÿÿÿ°ò®÷ÑIQSè÷ÿÿ¸eø[_]ÃU‰åWVSƒì4‹} ü¹ÿÿÿÿ°ò®÷ѱÿVjèª<ÿÿ‰ÃƒÄ¸…Û„D÷Etƒìÿu höSè=ÿÿëD÷Etƒìÿu hýSè=ÿÿë(÷Etƒìÿu h‘Sèæ<ÿÿë ƒìÿu Sè8=ÿÿƒÄ¿ ÷Et¿ ÷Eth‘h ‘VSè@öÿÿh ‘h‘ë@h‘h‘VSè#öÿÿh‘h ‘VSèöÿÿƒÄ h ‘h‘VSèþõÿÿh‘h‘VSèíõÿÿƒÄ ƒìWSEÈPèt;ÿÿƒÄ…Àtƒì Sè´;ÿÿ¸ë9ƒì Sè£;ÿÿÇ$jjÿu]ÈSèÜ7ÿÿ‰ÆƒÄSè8ÿÿƒÄ¸…ö”Àeô[^_]ÃU‰å‹M…Éë‰ö¾‹ ¤‹‚ˆAt€9uê]ÃU‰å‹M…Éë‰ö¾‹¨¤‹‚ˆAt€9uê]ÃU‰åWVSìl ‹}ǵˆßÿÿé˜C Pÿu h‘Vèr;ÿÿEˆƒÄ PVjè9ÿÿƒÄ…Àupfƒ}˜yÇ÷E u)ëXöE™@tÇ÷E uëAÇ÷Et1ƒìjÿuƒÃ SèœýÿÿƒÄ…ÀtƒìSÿuèY;ÿÿƒÄ¸ë vƒì ÿuè;ÿÿ‰ÃƒÄ…Û…Pÿÿÿ¸eô[^_]ÃvU‰åWVSƒì‹}‹u Vè¿9ÿÿ‰ÃƒÄ¸…Ût=ƒìÿuÿuÿuÿuVSèçþÿÿƒÄ ƒøu ‰¸ë‰öƒì Sè_9ÿÿǸeô[^_]ÃU‰åƒì‹E…Àu¸ë(ƒìÿuÿuÿuÿuÿu PèŒþÿÿ‰ÂƒÄ ¸ƒú”ÀÉÉöU‰åƒì‹E…Àt ƒì Pèö8ÿÿÉÃU‰åVSƒì‹u‹] [›ÁãEôPèÄ7ÿÿ؉Eô‰Eè‰EìƒÄh ‘Vè«9ÿÿƒÄ…Àtƒì Pè{8ÿÿƒÄë‰öƒìVh"‘ÿ5¤¤èÐ5ÿÿ¸ëƒìEèPVè+9ÿÿ¸eø[^]ÃvU‰åWS‹U‹] …ÒtM…ÛtI‰×ü¹ÿÿÿÿ°ò®¸ƒùþt8ƒìÿuRè'9ÿÿ‰ÇƒÄ…ÿtƒìSh2‘Wè_5ÿÿ‰<$èç7ÿÿ¸ë¸eø[_]ÃU‰åƒì h5‘ÿu ÿuè‚ÿÿÿÉÃU‰åƒì h ‘ÿu ÿuèjÿÿÿÉÃU‰åWVSƒì|‹u‹] ÇE„¸…ö„¦‰÷ü¹ÿÿÿÿ°ò®¸ƒùþ„Œ…ÛŽ„EˆƒìPVjè06ÿÿƒÄ…Àuk‰ß9]´}‹}´ƒìh´VèQ8ÿÿ‰ÃƒÄ…ÛtJƒìGPjèº7ÿÿ‰E„ƒÄ…Àt&SjWPè¦5ÿÿƒÄ…Àuƒì ÿu„è´7ÿÿÇE„ƒÄƒì Sèá6ÿÿƒÄ‹E„eô[^_]ÃvU‰åWVSƒì‹]‰ßü¹ÿÿÿÿ°ò®÷Ñqÿh@‘Sè(7ÿÿƒÄ9ðt5Sƒì èÌùÿÿƒÄ Ph ‘ÿ5¤¤èô3ÿÿƒÄÿ5¤¤è&4ÿÿ¸é‰ßü¹ÿÿÿÿ°ò®÷Ѹ€| þ.te‰ß¹ÿÿÿÿ°ò®÷Ѹ€| þ,tLƒìj.Sè3ÿÿƒÄ…Àu¸ë3¸€;.t)€;-t$€;,tƒþ~ƒìj/Sè 6ÿÿƒÄ‰Â¸…Ò”Àeô[^_]ÃU‰åWVSƒì ‹U¾ƒ} tE…ÒtA»¢‰ßü¹ÿÿÿÿ°ò®ƒùþt+‰×¹ÿÿÿÿò®ƒùþtƒìÿu RSƒì èÉøÿÿƒÄ PhÜ‘ë]‰öƒ} t"»¢‰ßü¹ÿÿÿÿ°ò®ƒùþt ƒì ÿu Së%vƒ} t>…Òt:‰×ü¹ÿÿÿÿ°ò®ƒùþt)ƒì ÿu Rƒì èjøÿÿƒÄ Phé‘ÿ5¤¤è’2ÿÿƒÄ ë%ƒìèHøÿÿƒÄ Ph’ÿ5¤¤èp2ÿÿ¾ƒÄƒì ÿ5¤¤èš2ÿÿ‰ðeô[^_]ÃU‰åWVSƒì ‹u‹]…ötƒ} u ¸ÿÿÿÿéõ‰÷ü¹ÿÿÿÿ°ò®¸ÿÿÿÿƒùþ„Ú‰÷¹ÿÿÿÿ°ò®÷ÑA¸ÿÿÿÿ9M‚¾ƒìÿujSèh5ÿÿƒÄVSè6ÿÿƒÄh*’Sè04ÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈPÿu Sè1ÿÿ‰$è82ÿÿ‰EðƒÄ…Àtc‰ßü¹ÿÿÿÿ°ò®‰Ê÷ÒJ‰÷¹ÿÿÿÿò®÷Ñ9ÊvC‰÷¹ÿÿÿÿò®‰È÷ÐTÿ‰ß¹ÿÿÿÿ°ò®÷щMð‰÷¹ÿÿÿÿò®MðÑéÆDƒì SèÑ1ÿÿ‰EðƒÄ‹Eðeô[^_]ÃU‰åWS‹U…Ò„–‰×ü¹ÿÿÿÿ°ò®ƒùþ„‰Óë`vŠSBÎ<wRˆÑÁá¾C‹¨¤Š‚BÐ< w L ÐëvB¿L É<w%ˆ C€{tƒìCPSèç4ÿÿƒÄë ‰öÆë!vC…Ût€;tƒìj%Sè0ÿÿƒÄ‰Ã…Ûu†eø[_]ÃvU‰åWVSì`‹}‹] SWè·/ÿÿ‰ÆƒÄ…öt1ƒìèö0ÿÿƒÄÿ0SWh@’èŸÿÿSè4ÿÿƒÄShg’èÜüÿÿƒÄ‰ðeô[^_]ÃvU¡˜¢‰åSƒìƒøÿ»˜¢tv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[ÃÞAvèW4ÿÿ‹]üÉÃdisableenableNull requestRequest truncated, exceeded maximum length%sDuration value missing[0-9][0-9]*[0-9][0-9]*[smhdSMHD]Invalid duration value: <%s>0*[0]*[smhdSMHD]Invalid arguments provided, ignored0.0.0.0 Null BBDISPLAY list, abortedBBDISPLAYS*.*summary.offline %s %sonline %sfork errorNo match%s bbd INVALID FILENAME SPECIFIED IN online MESSAGE: %s %s/%sdataa+notesw+%s %s bbd Invalid histlog file directory name: %s %s bbd Cannot create <%s> directory / w%s bbd Cannot create <%s> file %s %s%s%s bbd Connection terminated from %s (partial message) %s bbd Connection hung from %s (dropped) MACHINEADDR%s bbd MACHINEADDR is not set in the environment! Make sure you're running bbd from runbb.sh! BBPAGERBBPAGE%s bbd BBPAGE is not set in the environment! Make sure you're running bbd from runbb.sh! BBPAGERSBBDISPLAYBBDISP%s bbd BBDISP is not set in the environment! Make sure you're running bbd from runbb.sh! BBRELAYSBBHOME%s bbd BBHOME is too large - go away! BBTMP%s bbd BBTMP is not set in the environment! $BBHOME/tmp will be used %s/tmpBBLOGS%s bbd BBLOGS is not set in the environment! BBDISABLED%s bbd BBDISABLED is not set in the environment! BBHIST%s bbd BBHIST is not set in the environment! BBHISTLOGS%s bbd BBHISTLOGS is not set in the environment! BBDATA%s bbd BBDATA is not set in the environment! BBACKS%s bbd BBACKS is not set in the environment! BBPID%s bbd BBPID is not set in the environment! BBHOSTS%s bbd BBHOSTS is not set in the environment! %s/allevents%s/www/html%s/etc/security%s/web%s/bin/bbpage%s/bin/bb%s/www/notes%s bbd BBHOME is not set in the environment! Make sure you're running bbd from runbb.sh! FQDNTRUEPAGELEVELSSAVESTATUSLOGBBWEBPURPLEDELAY30BBHOSTHISTLOGBBALLHISTLOGRECVFROMMSGStatus message received fromSTATUNCHMSGStatus unchanged inBBLOGSTATUSSTATICDAYSdaysHOURShoursMINSminutes%s bbd Can't open socket %s bbd: Can't bind to port %d - is bbd already running? %d %s bbd Incoming message from %u - %s refused ARRRGH!!! THE FORK ERROR! ... DATA TRUNCATED ... ^red&red^green&green^yellow&yellow^purple&purple^clear&clear^blue&blue`$;|&\bbagent statuscombo statuspage summary summaryack testofflineTIME FAILURE - EXITING!!! %s %s%s bbd INVALID FILENAME IN %s MESSAGE: %s blue%s/.%s%s blue %s OFFLINE UNTIL %s %s%s bbd INVALID STATUS COLOR: %s FOR %s runderterminedundeterminedblue %s OFFLINE UNTIL %s %s %s %s %sr+%ld %ld %ld %s %s %ld %s %s %ld -%s %ld %ld %ld %s %s %d %s %s %ld %ld %ld %s %s %d red purpleabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:ack rm_event %s %d%s bbd INVALID FILENAME IN ack MESSAGE: %s %s %.2f %s %s %s .,%s/%s.htmlCouldn't build the HTML status page - out of memory BB LOGGING DIRECTORY UNDEFINED õ@ ¬@N@%s bbd %s %d.%d.%d.%d%s bbd Invalid IP addr on %s (ignored) BBACKSWEBHISTORYCGIBINURLBBSKINgifsLOGTIMELOGTIME not set%s/%s%s/hostsvc_headerr%s/hostsvc_footer&BBDATE%s/bkg-%s.gif&BBBACKGROUND&BBWEBWed, 15 May 2002 11:00:00 GMT&BBRELDATE1.9c&BBREL&BBCOLOR&BBHOST&BBSVC&BBIPNAME&BBIP&BBSKIN&CGIBINURL&LOGTIME

bbd is out of memory ... investigate



was not found, please create this file with your custom header

MKBBROWFONTMKBBCOLFONTMKBBACKFONTDOTHEIGHTDOTWIDTH

 
%s - %s

/ack..%s %s %s %s %sCurrent acknowledgement by - comment: This event has been acked-ackgreenredyellowpurpleclearblue&green&red&yellow&purple&clear&blue


%s
%s

%s
TRUE



HISTORY


was not found, please create this file with your custom footer

%s:%stcp7%dERR:bbwarn: %s %s %s.[0-9][0-9]*%s:%s%s/etc/bbwarnsetup.cfgr%d-%d Page group expansion failed - too many recipientsbbpage%s/recoverymsgs.log%s/notifications.log%s %s (%s) %s %d %s %s %s/recoveries.log%s %s %s %d %d %s/acklog%d %s %s %s %s %s %s %s MAILMAIL env variable not set MAIL too large ep-.*'%s '%s' '%s'wCould not popen() to send out mailCouldn't fork() to send numeric message %s/bin/sendmsg%s/etc/numeric.scr%s%sCouldn't execlp() to send numeric message Couldn't fork() to send SMS message %s/sms-%dCouldn't create SMS message file for %s %s/etc/sms.scrCouldn't execlp() to send SMS message ALPHAPGRALPHAPGR env variable not set Alpha pager program <%s> not found Couldn't fork() to send Alpha message Couldn't execlp() to send Alpha message QPAGEQPAGE env variable not set QPAGEARGSQPAGEARGS env variable not set Qpage program <%s> not found %s '%s' -p '%s'Could not popen() to use QpageSENDPAGESENDPAGE env variable not set SENDPAGEARGSSENDPAGEARGS env variable not set Sendpage program <%s> not found sp-%s '%s' '-p%s'Could not popen() to use Sendpage%s/bin/sendsmssmsclient program <%s> not found Couldn't fork() to send smsclient message Couldn't execlp() to send smsclient message snmptrap_pgmSNMP trap program location is undefined in bbwarnsetup.cfg (snmptrap_pgm) SNMP trap program <%s> not found snmptrap_typeSNMP trap type is undefined in bbwarnsetup.cfg (snmptrap_type) CMUUCDSOLARISHPOVUnknown SNMP trap type <%s> entoidSNMP enterprise OID is undefined in bbwarnsetup.cfg (entoid) trapcodesSNMP trap codes are undefined in bbwarnsetup.cfg (trapcodes) disk%s %s %s %s %s %s %s%s:%s %s %s %s %s %s %s %s - &red%*s %s %s &yellowprocs%s:%s SNMP trap code for <%s> not defined in bbwarnsetup.cfg (trapcodes) 999%d6Couldn't fork() to send SNMP trap message %s STRING ( %s )-a-s-g-i-epublic-c-h%s STRING(%s)-ds01-vHP Openview based SNMP trap handling not yet implemented Unknown snmptrap type <%s> defined in bbwarnsetup.cfg ext-%s/ext/pg/%sCould not find script: Couldn't fork() for user defined notification scriptRCPTCouldn't execlp() %s/etc/bbwarnrules.cfgbbwarnrules.cfg not foundbbwarnsetup.cfg not found - using defaultsnotification message missingsummary.notify-admin.pagehelprecovered%s/nprec_%sCould not create recovery tag file bbwarn%s/FAILOVER-BBPAGERTRUEpagedelay;cfgdelimdisk:100 cpu:200 procs:300 msgs:400 conn:500 http:600 dns:800 ERR:999svcerrlist911pagehelpcode[0-9]*Invalid host defined in messageNETERR7%s.%sERRunmatched-%s,ignforall%d.%d.%d.%d%03d%03d%03d%03dnotify-admin999999999999Can't open bbwarnrules.cfgunmatched-*Empty column %dInvalid rule line: Invalid rule line(hosts undefined): hg-%s token is emptyColumn 1 is empty|Invalid rule line(services undefined): *Invalid rule line(invalid day range): Invalid rule line(invalid time range): Invalid rule line(recipients undefined): :^~-Invalid recipient: %sInvalid recipient: <%s>, overidding qualifier ignored[~^]?[0-9]+[~^]?[0-9]+-[0-9]+Invalid recipient: <%s>, invalid overidding qualifier pg-%s %s:%s%s/pagemsg.%dprefixsuffixpagelevels pagelevelsmailpagetypepageaddhtmlpathbriefrcptGROUPnp_*%s/%s000000The contents of <%s> could not be readThe file <%s> could not be openedCould not allocate memory<%s> has suddenly disappeared ...BBLOGSTATUSBBWEBHTMLLOGSCGIBINURLBBWEBHOSTBBWEBHOSTURL.*@.*ext-.*%s/np_%sEVENT_HOSTpurple%7d0000000 %s %s %s 0000000 %s %s %s 0000000[0-9][0-9][0-9][0-9][0-9][0-9][0-9][ ]%7d %s %s %s %07d [%07d] - %07dunmatched-DYNAMIC Please see: %s%s/bb-hostsvc.sh?HOSTSVC=%s Please see: %s/bb-hostsvc.sh?HOSTSVC=%sTEXT Please see: %s/logs/%s Please see: %s/%s.html seconds-- Event Duration: %s seconds%s - %s - %s %s BBALPHAMSGACKCODEBBHOSTSVCBBHOSTNAMEMACHIPBBSVCNUMBBSVCNAMEBBNUMERICBBCOLORLEVELBBHOSTSVCDOTSBBHOSTSVCCOMMASDOWNSECSMSGDOWNSECSRECOVERED!BB%s! %s - %sBB[0-9]sms-.*alpha-.*qp-.*sp-.*hsp-.*trap-.*smsclient-.*Unknown recipient <%s> - it may need to be prefixed with pg-NULL request for bb_doack()ackEmpty request for bb_doack()Truncating ack request. Is %d chars, max %d characters allowed.ack_eventack_event message is missing Ack number and delayack:ack_eventack_event message is missing the Ack numberInvalid Ack number <%s>ack_event message is missing the delay valueInvalid delay <%s>+%32s %512s %16s %512shost.not.found.in.tagfilecolor.not.found.in.tagfilerecipient.not.found.in.tagfileglobal-ackfork errorack addtag_event %s %s rm_eventmessage is missing host.service & event durationack:rm_eventInvalid hostname: <%s> message is missing event durationInvalid event duration <%s>Message contains invalid argumentsinvalid host.service <%s> pagetype token is not defined in bbwarnsetup.cfgpagetype <%s> is invalid pagerecoveredpagerecovered token is not defined in bbwarnsetup.cfg%s recovered %s Problem has been resolved after %d secondsack rmtag_event %sThe rm_npfiles hold buffer is too small%512saddtag_eventmessage details are missingack:addtag_event/ack.rmtag_eventmessage is missing host.serviceack:rmtag_eventInvalid ack type: <%s> CONNECTION TO %s TIMED OUT...0.0.0.0localhostUnknown host: %sCAN'T ALLOCATE MEMORY IN bbsend() Can't open stream socketCAN'T CONNECT TO bbd SERVER @ %s%d.%d.%d.%dBBHOSTSr%s %sFQDNTRUE0.0.0.0redpurpleyellowgreenblueclear ^(%s)$^%s%s$[.,]..**([_])]*%s/%saCan't touch %s %swabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:%s bbd FILENAME CONSTAINS INVALID CHARACTERS - IGNORED: %s %s %s %s %s %s %s %s %s bbutils bb_errmsg() invalid arguments =Could not rename %s to %s - errno: %d bb_rename¤¢bbdÿÿÿÿÿÿÿÿø£Þîþ.>N^n~Žž®¾ÎÞîþ‘‘.‘>‘N‘^‘n‘~‘Ž‘ž‘®‘¾‘ΑÞ‘î‘þ‘’’.’>’N’^’n’~’Ž’ž’®’¾’Î’Þ’î’þ’““.“>“N“^“n“~“Ž“ž“®“¾“ΓÞ“î“þ“””.”>”N”^”n”~”Ž”ž”®”¾”Δ ° À`(‰˜ƒ ñ ¨¢€0(þÿÿoÈŒÿÿÿoðÿÿoŒ¢ƒd•d•9<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m d•init.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((p7 ˜ƒ˜p?‰ GÿÿÿoŒ ®TþÿÿoÈŒÈ @c  l  u 00 € ~°°„Èȉà”ààËÀ`Àà•à`àà 1 €¢€£”¢”­˜¢˜´ ¢ »¨¢¨PÀø£ø É˜¤ Ï ¤ °Â Ô ¤ ÚDƒãÇ5ìã7È«8òx>Ðy HRô€(˜ƒ‰ŒÈŒ 0 ° È à” À`à`€¢”¢˜¢ ¢¨¢ø£˜¤ ¤ñÿ • • +ñÿ2ñÿ 0• =ˆ¢A ¢OŒ¢[0• q”¢„• °¤˜ • ¤Ð• ¯¢½˜¢2ñÿ €` Ë€` ᜢ¤°` ¯”¢û”¢ñÿ À` ñÿ à• à ठ(àÄ 1À¢~ ?àä Iñÿ üÅ Uð$_à$jä$tè${ì$ƒ% ŒE •ñÿ hÙ žhÙU ¦ÀÙÄ ±„Ú4 ·¸Ú ¾ÌÚ ÃàÚ' ÎÛ ÙeàÞ éà ò<㎠ýÌãm <äk ¨ä­ #Xæ  0dçy 9àè DäéÁ O¨ë! ]Ìí làîù  zÜø5 ‡ e  … Ÿ ¥ « Å ¹ å È  Ó % à E î e ü …   ¥  Å 3 å C  P % ^ñÿ ìI gìI; v E}$E€ñÿ N ˆ@E –@e\VH ¨De´Ø>ÅÄà  Òl[ Ý0ÄÌ å@4¬ î`e ù`…t´d  X$ è>*øž=ÄXÝ MÁ_`] i€… s ¤Ž2 ø£©(R¿8DÒH"óX.€¥hR.x&@äE LN¹ W° ]x‘œnˆ‘=€à•7 ŠF  “˜‘p¥@g µ¨‘2Çf Ѹ‘-ãÈ‘ô f  ÷Ø‘¬" † !è‘-3¤¤E$† Qø‘2h’/{@†  „’=š@¦  §@Æ ´DÆ Á(’çÒ8’/åH’Dõ¢üà”  X’@ ¤VT  h’Á0 ´Ÿ 9 x’IJ ˆ’Â\ ˜’Úm HÆ w LÆ ~ ¨’«› ,— ª á ¼ û+9 Ä ¨¤ß X\ë í PÆ õ `Æ  ÿ VB ¸’Å `æ % È’7: °R‰ D Dg O ˜¤ñÿ[ @£( ` h²  f ìZh p Éf z \P ؒʬ Ô · `æ  Á ¤Yh Í ÐÃ_ Û è’]î ø’ª €¢  “= À`! “q3 – F (“˜X 8“¹k LZ v H“-‡ `  X“~¤ h“"À x“ÐÓ d Þ Hg î h ó T l ˆ“· ˜“ü, ¨“®> ¸“N (JØ U È“Àg l p Ø“-‚ ˜¤ñÿ‰ ¨¢Ÿ è“ô¯ Pg ñÿ´ øV„ º ø“=Ê €  Ó üÅØ Ý ”>î ¼OS þ ”h ¬¤% (”=8 Z> C „[Ñ L 8”œU€&  _ H” p 0¤ z ä`‰ €F  „F œ ˆF § X”=·  F œ¾ h”-Ñ x”dã €¢ð dZ… ú |P_ ˆ”=˜”¸,¨”:=Lg Hh_­ X@G  a¸”+q|X$ | ‹È”‹initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__bbd.cbbdisplays_envlinebuf.0msgbuf.1bbd_timeout.2message.3dohostsvc.cbbacksdirwebhistorycgibinurlbbskinlogtimeheadnamefootnamebbpage.ccleanupgetsvccodeusageerrmsgdoneusage_donegetoldinfoneterrgetsetupgetdelaysave_notifsave_recoveriessave_acklogsend_mailsend_numericsend_smssend_alphasend_qpagesend_sendpagesend_smsclientsend_snmptrapsend_extpagercpt_envbbalphamsg_envackcode_envbbhostsvc_envbbhostname_envmachip_envbbsvcnum_envbbsvcname_envbbnumeric_envbbcolorlevel_envbbhostsvcdots_envbbhostsvccommas_envdownsecsmsg_envdownsecs_envrecovered_envbbsend.cbbsend_timeoutipaddrrcutils.cworktimestr.0bbhomegettimestrmachineaddrmkdir@@GLIBC_2.0checkrequestappendfiledosecdbbb_doackbbnotesdirsavestatuslogbblogstrtoupperrename@@GLIBC_2.0strncat@@GLIBC_2.0getdirnextentrystrchr@@GLIBC_2.0bb_renamebbhtmldir__ctype_tolower@@GLIBC_2.0getpid@@GLIBC_2.0_DYNAMICsiglongjmp@@GLIBC_2.0regexec@@GLIBC_2.0__register_frame_info@@GLIBC_2.0localtime@@GLIBC_2.0statunchstrpgetservbyport@@GLIBC_2.0strcmp@@GLIBC_2.0getcolornumbbwebdirclose@@GLIBC_2.0_fp_hwsavefilebbpidfprintf@@GLIBC_2.0fork@@GLIBC_2.0pagergetenv@@GLIBC_2.0signal@@GLIBC_2.0fflush@@GLIBC_2.0regfree@@GLIBC_2.0pclose@@GLIBC_2.1getservbyname@@GLIBC_2.0bbhistlogsdirbbd_dieunlink@@GLIBC_2.0bb_isdisabledperiodminsbblogstatusbb_errmsgstriptrailspacesgetlinebbhostsbb_putenvbbsaveputenv@@GLIBC_2.0allhistname__errno_location@@GLIBC_2.0ftell@@GLIBC_2.0getfooteraccept@@GLIBC_2.0bbhistdirbbdisplaysgetsecurityinet_ntoa@@GLIBC_2.0bbhosthistlogreplacestr_initpopen@@GLIBC_2.1listen@@GLIBC_2.0loadfilesbb_hostsmalloc@@GLIBC_2.0headerpage_sizesetsid@@GLIBC_2.0ipdotaddrfscanf@@GLIBC_2.0fread@@GLIBC_2.0bb__deregister_frame_info@@GLIBC_2.0bbdispsyslog@@GLIBC_2.0stderr@@GLIBC_2.0periodhours__sigsetjmp@@GLIBC_2.0__xstat@@GLIBC_2.0bbtmpdirsetsockopt@@GLIBC_2.0bbdisabledirpurpleoffsetrecvfromstrpfseek@@GLIBC_2.0waitpid@@GLIBC_2.0time@@GLIBC_2.0bbprog_startfgets@@GLIBC_2.0space_sepexeclp@@GLIBC_2.0bb_utimefputs@@GLIBC_2.0strstr@@GLIBC_2.0sleep@@GLIBC_2.0bbdisplaybbpage__strtol_internal@@GLIBC_2.0enable_disableexpand_briefrcptsbb_page__ctype_toupper@@GLIBC_2.0valid_lognamebbpagerbbdatadirclean_stringstrncmp@@GLIBC_2.0secdbinet_addr@@GLIBC_2.0getipaddrheaderpage__bss_startmaindo_bbwritefiledohostsvcstripleadtrailspaces__libc_start_main@@GLIBC_2.0bb_offlinebblogsdirgetdirfirstchecksecurityrealloc@@GLIBC_2.0strcat@@GLIBC_2.0data_startbind@@GLIBC_2.0_finimemcpy@@GLIBC_2.0calc_purple_offsetfclose@@GLIBC_2.1strrchr@@GLIBC_2.0getdirdonectime@@GLIBC_2.0bbrelaysclosedir@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3opendir@@GLIBC_2.0pagelevelsfooterpage_sizefqdnsave_histloggethostbyname@@GLIBC_2.0regcomp@@GLIBC_2.0strspn@@GLIBC_2.0exit@@GLIBC_2.0bbsendcalloc@@GLIBC_2.0bbpagerssscanf@@GLIBC_2.0_edata_GLOBAL_OFFSET_TABLE_free@@GLIBC_2.0_endmatchsend@@GLIBC_2.0securitygetheaderutime@@GLIBC_2.0stripleadspacesmemset@@GLIBC_2.0__ctype_b@@GLIBC_2.0connect@@GLIBC_2.0getdirnextreadfilestrncpy@@GLIBC_2.0fopen@@GLIBC_2.1bb_online_IO_stdin_usedbbwebbballhistlogperioddaysrecv@@GLIBC_2.0jmpenvsprintf@@GLIBC_2.0fwrite@@GLIBC_2.0__data_starttouchtimevalid_ipaddrsocket@@GLIBC_2.0readdir@@GLIBC_2.0alarm@@GLIBC_2.0footerpageconvert_web_strbbvardirwait@@GLIBC_2.0strtolower__gmon_start__strcpy@@GLIBC_2.0./bb/bb19c/bin/bbnet0100755002342100007640000007053107616533071012040 0ustar bbbbELF 4@X4 (44€4€ÀÀôô€ô€€€ 2 2 2  Âè Ch3hÃhà  /lib/ld-linux.so.2GNU%@*"$4>;27&5:?.-(0=<96,  ! # +)'%/ 138ÕŒ>MŒž$ŒÁ Ć4ŒRwDŒD$TŒ"ëdŒ@:tŒ:ñ„Œ-E”Œ /¤ŒÐ ´ŒüÄŒx·ÔŒ“¸äŒkôŒšpU$¬"©$ÄÉ42°D/TD^d@(tÂL„«§(Ä6”Ť7ê´ÊÿĪ!Ô2däq¢ô˜ÜŽ¹ùŽ- $Ž~c4Ž>pDŽ"„TŽÐŒdŽ·[tŽüã„Ž®É”Ž䤎ÀF´Ž-@ÄŽô¾ÔŽ=(äŽ>pôŽh;,Ä3=>œÎ$ Ô¤­.4=šD-‘T=˜d¸Ãt: „‹__gmon_start__libc.so.6strcpyprintfutimerecvconnect__ctype_bgetenv__strtol_internalfgetsmemcpyputs__cxa_finalizemallocsiglongjmpsocketreaddirfflush__ctype_toupperputenvsendalarm__sigsetjmprenamestrrchrcallocwritefprintfctimestrcatinet_addr__deregister_frame_infostrstrsignalstrncmpstrncpysscanfstrncatfreadregcompgettimeofdaymemsetregexectimeopendirgethostbynamesprintffclosestderr__xstat__errno_locationexitfopen_IO_stdin_usedstrspn__libc_start_mainregfreestrchrclosedir__ctype_tolower__register_frame_infoclosefreeGLIBC_2.1.3GLIBC_2.1GLIBC_2.0si Eii Qii [dÃ> Ä$Ä(Ä,Ä4€Â„ˆŒÂ”˜œ  Â ¤Â ¨Â ¬Â °Â´Â¸Â¼ÂÀÂÄÂÈÂÌÂÐÂÔÂØÂÜÂàÂäÂèÂìÂð ôÂ!øÂ"üÂ#Ã$Ã%Ã& Ã'Ã(Ã)Ã*Ã+ Ã,$Ã-(Ã.,Ã/0Ã04Ã18Ã2<Ã3@Ã5DÃ6HÃ7LÃ9PÃ:TÃ;XÃ<\Ã=`Ã?U‰åƒìèÝèsè>!ÉÃÿ5xÂÿ%|Âÿ%€Âhéàÿÿÿÿ%„ÂhéÐÿÿÿÿ%ˆÂhéÀÿÿÿÿ%ŒÂhé°ÿÿÿÿ%Âh é ÿÿÿÿ%”Âh(éÿÿÿÿ%˜Âh0é€ÿÿÿÿ%œÂh8épÿÿÿÿ% Âh@é`ÿÿÿÿ%¤ÂhHéPÿÿÿÿ%¨ÂhPé@ÿÿÿÿ%¬ÂhXé0ÿÿÿÿ%°Âh`é ÿÿÿÿ%´Âhhéÿÿÿÿ%¸Âhpéÿÿÿÿ%¼Âhxéðþÿÿÿ%ÀÂh€éàþÿÿÿ%ÄÂhˆéÐþÿÿÿ%ÈÂhéÀþÿÿÿ%ÌÂh˜é°þÿÿÿ%ÐÂh é þÿÿÿ%ÔÂh¨éþÿÿÿ%ØÂh°é€þÿÿÿ%ÜÂh¸épþÿÿÿ%àÂhÀé`þÿÿÿ%äÂhÈéPþÿÿÿ%èÂhÐé@þÿÿÿ%ìÂhØé0þÿÿÿ%ðÂhàé þÿÿÿ%ôÂhèéþÿÿÿ%øÂhðéþÿÿÿ%üÂhøéðýÿÿÿ%Ãhéàýÿÿÿ%ÃhéÐýÿÿÿ%ÃhéÀýÿÿÿ% Ãhé°ýÿÿÿ%Ãh é ýÿÿÿ%Ãh(éýÿÿÿ%Ãh0é€ýÿÿÿ%Ãh8épýÿÿÿ% Ãh@é`ýÿÿÿ%$ÃhHéPýÿÿÿ%(ÃhPé@ýÿÿÿ%,ÃhXé0ýÿÿÿ%0Ãh`é ýÿÿÿ%4Ãhhéýÿÿÿ%8Ãhpéýÿÿÿ%<Ãhxéðüÿÿÿ%@Ãh€éàüÿÿÿ%DÃhˆéÐüÿÿÿ%HÃhéÀüÿÿÿ%LÃh˜é°üÿÿÿ%PÃh é üÿÿÿ%TÃh¨éüÿÿÿ%XÃh°é€üÿÿÿ%\Ãh¸épüÿÿÿ%`ÃhÀé`üÿÿ1í^‰áƒäðPTRhp­hÜ‹QVht‘èóýÿÿô‰öU‰åSPè[æ2‹ƒð…ÀtÿЋ]üÉÉöU‹,‰åƒì…ÒuI‹(‹…Àtt&B£(Âÿ‹(‹ …Éuê¸$…Àtƒì h`ÂèèüÿÿƒÄ¸£,‰ì]ÃvU‰åƒì‰ì]öU‰å¸TŒƒì…Àtƒìh0Äh`ÂèÓûÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰åSƒì jèVüÿÿ‰ÃƒÄEðPSèwýÿÿƒÄƒ=PÄ„‡‹‰Á+ Hĉ HÄ‹C‰Â+LĉLÄ…ÒyAÿ£HÄ‚@B£LÄ‹ Lĺ­‹Ûh‰È÷êÁú ‰ÈÁø)‰УLă=DÂtƒìPÿ5HÄhÀ­è’üÿÿƒÄÇPÄëvÇPÄ‹£HÄ‹C£LÄ‹]üÉÉöU‰åWVSƒì ‹}‹M ¾ÇEðƒÿŽï»ŽÛ‹A‰Â€8-…Ív‰Ð¶ƒê-u ¶Pƒêqu¶P…ÒuÇDÂ醉ö‹Q¶ƒè-u ¶BƒèQu¶B…Àu ÇHÂë\‹Q¶ƒè-u ¶Bƒèsu¶B…Àu ÇPÂë4ƒìhÞ­ÿ5$ÄèAúÿÿƒÄh®ÿ5$Äè.úÿÿÇ$è2üÿÿ‰öFÿEðƒÁ‰ØC9ø} ‹Q€:-„6ÿÿÿ‹Y‹A‰Eì9÷|;}ð~4ƒìh@®ÿ5$ÄèáùÿÿƒÄh®ÿ5$ÄèÎùÿÿÇ$èÒûÿÿ‰öƒì hf®èÃùÿÿƒÄ…Àtjj jPè úÿÿƒÄ£TÂ…À ÇTƒì hr®èùÿÿƒÄ…Àtjj jPèjúÿÿƒÄ£XÂ…À ÇXƒì h~®èWùÿÿƒÄ…Àtjj jPè4úÿÿƒÄ£\Â…À Ç\ ƒì Sè9£LƒąÀu;}ðuƒì ÿuìëƒì jè£Lƒăì ÿ5LÂèìúÿÿU‰åWVSƒì‹]¾h èAùÿÿ£<ƒÄ hÿSPè=ûÿÿƒÄ jhŠ®ÿ5<è¨ùÿÿƒÄ…ÀuÇ8ƒ<Ç„PëÇ8ÂÇ„ƒìj:ÿ5<èð÷ÿÿƒÄ‰Ã…Ûtƒìh„h’®SèdúÿÿƒÄ…Àt‰Þƒìj/ÿ5<è»÷ÿÿƒÄ‰Ã‰€…Àt\ƒìjh–®Sè ùÿÿƒÄ…Àu …öu‰Þÿ€ƒì ‹=€ü¹ÿÿÿÿ°ò®÷ÑQèNøÿÿ‰ÃƒÄÿ5€Sè½úÿÿƒÄ¡€Æëƒì jè&øÿÿ‰ÃƒÄfÇ/…ötƃì ÿ5<è§øÿÿ£`äƒÄƒøÿ…‚¡<€8u ƒì h¡®ë ‰öƒì ÿ5<è2ùÿÿ‰ÂƒÄ…Òu=ƒ=HÂt*ƒìÿ5<h«®h€äèèùÿÿƒÄh€äj葃ĸë&v‹Bƒìÿr ÿ0h`äèWøÿÿƒÄ‰€¸eô[^_]ÃU‰åWSì0 Ç…Ìßÿÿ}èü¹¸ó«fÇEè¡`ä‰Eìf¡„fÁÈf‰Eêè¶úÿÿÇ@¡T£<ƒìjh è'÷ÿÿƒÄ…Àt¸cƒ=<Âc„þƒìh,šjèoöÿÿƒÄÿ5<Âè1ùÿÿƒÄ jjjèùÿÿ‰…ÐßÿÿƒÄ…Ày2ƒ=H„„ƒìh¼®j肃Äÿ5$Äè,öÿÿƒÄëbvƒìjEèPÿµÐßÿÿè`øÿÿƒÄ…ÀyQƒ=HÂt-ÿ5„ÿ5<hà®h€äèuøÿÿƒÄh€äjèƒÄƒì ÿµÐßÿÿè…õÿÿ¸é+vƒ=PÂ…ƒ=8ÂtVƒ=€t!ƒìÿ5„ÿ5<h¯ÿ5€h ¯ëƒì ÿ5„ÿ5<h¯h`¯…ØßÿÿPèã÷ÿÿƒÄ ë‰öƒìhœ¯…ØßÿÿPèÈ÷ÿÿƒÄƒ}tF‹}ü¹ÿÿÿÿ°ò®ƒùþt-ƒìhûÿuØßÿÿSèf÷ÿÿƒÄh£¯SèöÿÿƒÄë vÆ…Øßÿÿj•Øßÿÿ‰×ü¹ÿÿÿÿ°ò®÷ÑIQRÿµÐßÿÿèåöÿÿÆ…ØßÿÿÇ@¡T£<ƒÄjh èõÿÿƒÄ…Àtlƒ=<Âcucƒì ÿµÐßÿÿè=ôÿÿ¸céãvƒì hÀ¯èƒõÿÿƒÄÿµÐßÿÿèôÿÿ黃ì hé¯èƒôÿÿè*øÿÿƒÄÿµÐßÿÿèðóÿÿé–vƒìh,šjè ôÿÿƒÄƒ=8„&ƒ=< Ç<Â é ƒì jè¢öÿÿÇ@¡T£<ƒă=8Âtƒø  Ç< ƒìjh è$ôÿÿƒÄ…À…)ÿÿÿƒ½Ôßÿÿ~‹…ÔßÿÿÆ„(Øßÿÿƒ=„„%ÿÿÿƒ=8ÂtSƒ½ÌßÿÿuJ…Øßÿÿƒìhø¯PèôÿÿƒÄ‰Â…ÒtƒÂƽØßÿÿü¹ÿÿÿÿ°ò®÷ÑI‰Ôßÿÿ…Òt Ç…Ìßÿÿƒ½Ìßÿÿ-ƒìÿµÔßÿÿ…ØßÿÿPjè©òÿÿƒÄƒ½Ìßÿÿu Ç…Ìßÿÿƒì ÿ5<Âè•õÿÿƒÄjh …ØßÿÿPÿµÐßÿÿè9õÿÿ‰…ÔßÿÿƒÄ…À¼þÿÿƒì ÿµÐßÿÿèZòÿÿèöÿÿ¸eø[_]ÃU‰åƒìÿ@ƒ=@Âu¡X£<Âë[vƒ=@Âu¡\£<ÂëCvÇ<Âcƒ=HÂt-ÿ5„ÿ5<h°h€äè®ôÿÿƒÄh€äjèWƒÄƒìjh è}ñÿÿU‰åWVSƒì ‹]ÇEì‰]ð…Ûtƒ}tƒ}t ƒ} …Ù¸éw‰öƒ}ìu*ƒì ÿu èÿñÿÿ‰EìƒÄ…À„ƒìÿu jPèÓóÿÿƒÄ9Þt@Æ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰È÷ÐTþ‹E H9ÂÃìSÿuìè_òÿÿƒÄ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷Ò‹}¹ÿÿÿÿò®‰Ë‰Ø÷ÐTþ‹E H9ƒƒìÿuÿuìèòÿÿ‹}ü¹ÿÿÿÿ°ò®‰Ê‰Ð÷Ð\ÿƒÄƒìÿuSè§ñÿÿƒÄ‰Æ…ö…ÿÿÿƒ}ì„€‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰Î‰ð÷ÐTþ‹E H9Â~,ë ‰ö¸ëNƒìÿuìÿuðèZóÿÿƒÄÿuìèòÿÿ¸ë-ƒìSÿuìè|ñÿÿƒÄÿuìÿuðè.óÿÿƒÄÿuìècòÿÿƒÄ¸eô[^_]ÃvU‰åWS‹]…Ût@‰ßü¹ÿÿÿÿ°ò®ƒùþt/‰Ù¾¡,ĉÇöDP t A¾öDG uõ9Ët ƒìQSèÇòÿÿƒÄeø[_]ÃU‰åWS‹]…Ût;‰ßü¹ÿÿÿÿ°ò®ƒùþt*‰ß¹ÿÿÿÿò®÷ÑL þë‰öÆI9Ùr¾¡,ÄöDP ué[_]ÃU‰åSƒì‹]SèPÿÿÿ‰$èœÿÿÿ‹]üÉÃvU‰åWƒì‹U‰×ü¹ÿÿÿÿ°ò®÷ÑI¸ƒùw7¸ÿÿÿÿ‰Eì‰Eð‰Eô‰EøƒìEøPEôPEðPEìPh@°Rè.ñÿÿƒÄ ¸‹}üÉÃU‰åWVSƒìL‹u‹] ÇE´ƒ>u:ƒì hL°èØîÿÿ‰ÂƒÄ…Òt$‰×ü¹ÿÿÿÿ°ò®ƒùþtƒìhT°Rè@ñÿÿ‰ƒÄƒ>„MƒìÿujSèôðÿÿƒÄE؉E°EȉE¬E¸‰E¨é ‰öÇE´éƒì Sèãþÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþ„Û€; „Ò€;#„É÷Eu¸÷E„¢¾¡,ÄöDP„ÇEØÇEÜÇEàÇEäÇEÈÇEÌÇEÐÇEÔÇE¸ÇE¼ÇEÀÇEăìjSÿu°è.ðÿÿƒÄÿu¨ÿu¬hV°ÿu°è¸ïÿÿƒÄÿu¬è-þÿÿƒÄƒø„ ÿÿÿƒìÿujSèÓïÿÿƒÄƒìÿ6‹EHPSè0îÿÿƒÄ…À…éþÿÿƒ>tƒ}´uƒì ÿ6è îÿÿǃċE´eô[^_]ÃU‰åWVSì@¸ƒ}„f‹}ü¹ÿÿÿÿ°ò®¸ƒùþ„K‹}¹ÿÿÿÿ°ò®÷ÑI‹EH9Áƒ+ƒìÿuÿu è½ïÿÿÇ$L°èÁìÿÿƒÄ…À„ƒìhT°Pè8ïÿÿ‰…ä¿ÿÿƒÄ…À„ç颉öƒ½à¿ÿÿ„{è¿ÿÿ‰ßü¹ÿÿÿÿ°ò®¸ùÿßÿÿ”ÀH!…à¿ÿÿƒì Sè3üÿÿ¾•è¿ÿÿ¡,ăÄöDP„S‰Ù‰ÂA¾öDBuõ€9.tð‰Â¡,ÄöDP „,ÆAƒìQèßÿÿSèîîÿÿ‰$èÖûÿÿÇ…Ü¿ÿÿÇ$\°èàëÿÿƒÄ…Àt#‰Æ¿a°¹üó¦—Â’À8Âu Ç…Ü¿ÿÿ‹}ü¹ÿÿÿÿ°ò®÷ÑqÿèßÿÿƒìVÿuSè‘ìÿÿƒÄ…À…  ƒ½Ü¿ÿÿt¾¡,ÄöDP u €9të~¾¡,ÄöDP u €9t€9.ue…è¿ÿÿ‰Æ¿f°¹üó¦—Â’À8Âuƒ}tƒì…è¿ÿÿPÿu èîÿÿƒÄ¸ë_‰ö½è¿ÿÿü¹ÿÿÿÿ°ò®ùÿßÿÿt Ç…à¿ÿÿƒìÿµä¿ÿÿhÿ…è¿ÿÿPèœëÿÿƒÄ…À…1þÿÿƒì ÿµä¿ÿÿèìÿÿƒÄ¸eô[^_]ÃvU‰åWVS‹]¶ƒèru¶Cƒèeu ¶Cƒèdu¶C…Àu ¸é¢v‰Þ¿r°¹üó¦—Â’À8Âu¸ë‰Þ¿y°¹üó¦—Â’À8Âu¸ë_‰Þ¿€°¹üó¦—Â’À8Âu¸ë?‰Þ¿†°¹üó¦—Â’À8Âu¸ë‰Þ¿‹°¹üó¦—Á’¸8Ñ”À[^_]ÃU‰åVSƒì‹u‹] ŠEˆE÷€;t"ëŠU÷ˆ¾ƒìPVè&éÿÿƒÄ…ÀuçC€;uæeø[^]ÉöU‰åƒìEüPè1êÿÿEü‰$èæêÿÿƒÄPh`ÄèHìÿÿƒÄj h`ÄèÙèÿÿƒÄ…ÀtƸ`ÄÉÃU‰åWS‹]€;tv¾¡,ÄöDP tÆ C€;uèh‘°h“°‰ßü¹ÿÿÿÿ°ò®÷ÑIQSè÷ÿÿ¸eø[_]ÃU‰åWVSƒì4‹} ü¹ÿÿÿÿ°ò®÷ѱÿVjèÎêÿÿ‰ÃƒÄ¸…Û„D÷Etƒìÿu h–°SèBëÿÿëD÷Etƒìÿu h°Sè&ëÿÿë(÷Etƒìÿu h¡°Sè ëÿÿë ƒìÿu Sè<ëÿÿƒÄ¿ ÷Et¿ ÷Eth¥°hª°VSè@öÿÿh¬°h¯°ë@h±°h·°VSè#öÿÿh¯°h¬°VSèöÿÿƒÄ h¬°h¯°VSèþõÿÿh·°h±°VSèíõÿÿƒÄ ƒìWSEÈPè˜éÿÿƒÄ…Àtƒì SèØéÿÿ¸ë9ƒì SèÇéÿÿÇ$jjÿu]ÈSè0çÿÿ‰ÆƒÄSè¥çÿÿƒÄ¸…ö”Àeô[^_]ÃU‰å‹M…Éë‰ö¾‹ Ä‹‚ˆAt€9uê]ÃU‰å‹M…Éë‰ö¾‹(Ä‹‚ˆAt€9uê]ÃU‰åWVSìl ‹}ǵˆßÿÿé˜C Pÿu hº°Vè–éÿÿEˆƒÄ PVjè‡çÿÿƒÄ…Àupfƒ}˜yÇ÷E u)ëXöE™@tÇ÷E uëAÇ÷Et1ƒìjÿuƒÃ SèœýÿÿƒÄ…ÀtƒìSÿuè]éÿÿƒÄ¸ë vƒì ÿuè%éÿÿ‰ÃƒÄ…Û…Pÿÿÿ¸eô[^_]ÃvU‰åWVSƒì‹}‹u Vèãçÿÿ‰ÃƒÄ¸…Ût=ƒìÿuÿuÿuÿuVSèçþÿÿƒÄ ƒøu ‰¸ë‰öƒì SèsçÿÿǸeô[^_]ÃU‰åƒì‹E…Àu¸ë(ƒìÿuÿuÿuÿuÿu PèŒþÿÿ‰ÂƒÄ ¸ƒú”ÀÉÉöU‰åƒì‹E…Àt ƒì Pè çÿÿÉÃU‰åVSƒì‹u‹] [›ÁãEôPèæÿÿ؉Eô‰Eè‰EìƒÄhÀ°VèÏçÿÿƒÄ…Àtƒì PèæÿÿƒÄë‰öƒìVh°ÿ5$Äèåÿÿ¸ëƒìEèPVèOçÿÿ¸eø[^]ÃvU‰åWS‹U‹] …ÒtM…ÛtI‰×ü¹ÿÿÿÿ°ò®¸ƒùþt8ƒìÿuRèKçÿÿ‰ÇƒÄ…ÿtƒìShÒ°Wè“äÿÿ‰<$èûåÿÿ¸ë¸eø[_]ÃU‰åƒì hÕ°ÿu ÿuè‚ÿÿÿÉÃU‰åƒì hÀ°ÿu ÿuèjÿÿÿÉÃU‰åWVSƒì|‹u‹] ÇE„¸…ö„¦‰÷ü¹ÿÿÿÿ°ò®¸ƒùþ„Œ…ÛŽ„EˆƒìPVjè´äÿÿƒÄ…Àuk‰ß9]´}‹}´ƒìhT°Vèuæÿÿ‰ÃƒÄ…ÛtJƒìGPjèÞåÿÿ‰E„ƒÄ…Àt&SjWPè:äÿÿƒÄ…Àuƒì ÿu„èØåÿÿÇE„ƒÄƒì SèõäÿÿƒÄ‹E„eô[^_]ÃvU‰åWVSƒì‹]‰ßü¹ÿÿÿÿ°ò®÷Ñqÿhà°SèLåÿÿƒÄ9ðt5Sƒì èÌùÿÿƒÄ Ph@±ÿ5$Äè(ãÿÿƒÄÿ5$ÄèJãÿÿ¸é‰ßü¹ÿÿÿÿ°ò®÷Ѹ€| þ.te‰ß¹ÿÿÿÿ°ò®÷Ѹ€| þ,tLƒìj.SèrâÿÿƒÄ…Àu¸ë3¸€;.t)€;-t$€;,tƒþ~ƒìj/Sè äÿÿƒÄ‰Â¸…Ò”Àeô[^_]ÃU‰åWVSƒì ‹U¾ƒ} tE…ÒtA»0‰ßü¹ÿÿÿÿ°ò®ƒùþt+‰×¹ÿÿÿÿò®ƒùþtƒìÿu RSƒì èÉøÿÿƒÄ Ph|±ë]‰öƒ} t"»0‰ßü¹ÿÿÿÿ°ò®ƒùþt ƒì ÿu Së%vƒ} t>…Òt:‰×ü¹ÿÿÿÿ°ò®ƒùþt)ƒì ÿu Rƒì èjøÿÿƒÄ Ph‰±ÿ5$ÄèÆáÿÿƒÄ ë%ƒìèHøÿÿƒÄ Ph ±ÿ5$Äè¤áÿÿ¾ƒÄƒì ÿ5$Äè¾áÿÿ‰ðeô[^_]ÃU‰åWVSƒì ‹u‹]…ötƒ} u ¸ÿÿÿÿéõ‰÷ü¹ÿÿÿÿ°ò®¸ÿÿÿÿƒùþ„Ú‰÷¹ÿÿÿÿ°ò®÷ÑA¸ÿÿÿÿ9M‚¾ƒìÿujSèŒãÿÿƒÄVSèäÿÿƒÄhʱSèDâÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈPÿu Sètàÿÿ‰$è,áÿÿ‰EðƒÄ…Àtc‰ßü¹ÿÿÿÿ°ò®‰Ê÷ÒJ‰÷¹ÿÿÿÿò®÷Ñ9ÊvC‰÷¹ÿÿÿÿò®‰È÷ÐTÿ‰ß¹ÿÿÿÿ°ò®÷щMð‰÷¹ÿÿÿÿò®MðÑéÆDƒì SèÅàÿÿ‰EðƒÄ‹Eðeô[^_]ÃU‰åWS‹U…Ò„–‰×ü¹ÿÿÿÿ°ò®ƒùþ„‰Óë`vŠSBÎ<wRˆÑÁá¾C‹(ÄŠ‚BÐ< w L ÐëvB¿L É<w%ˆ C€{tƒìCPSèëâÿÿƒÄë ‰öÆë!vC…Ût€;tƒìj%SègßÿÿƒÄ‰Ã…Ûu†eø[_]ÃvU‰åWVSì`‹}‹] SWèßÿÿ‰ÆƒÄ…öt1ƒìèêßÿÿƒÄÿ0SWhà±èŸÿÿSè2âÿÿƒÄSh²èÜüÿÿƒÄ‰ðeô[^_]ÃvU¡d‰åSƒìƒøÿ»dÂtv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[Ãúvègâÿÿ‹]üÉà Seconds: %ld.%02ld -q-Q-sbbnet: Invalid argument Format: bbnet [-s] [-q] [-Q] machine[:port]|http-request bbnet: incorrect number of arguments BBNETTIMER1BBNETTIMER2BBNETTIMER3http://:%d/http:///localhostUnknown host: %sCan't open socketCan't connect to server %s on port %d1.9cHEAD %s HTTP/1.0 User-Agent: BigBrother/%s Host: %s:%d HEAD / HTTP/1.0 User-Agent: BigBrother/%s Host: %s:%d quit *** bbnet: Stop waiting for server data Telnet test OK Timeout with server %s on port %d%d.%d.%d.%dBBHOSTSr%s %sFQDNTRUE0.0.0.0redpurpleyellowgreenblueclear ^(%s)$^%s%s$[.,]..**([_])]*%s/%saCan't touch %s %swabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:%s bbd FILENAME CONSTAINS INVALID CHARACTERS - IGNORED: %s %s %s %s %s %s %s %s %s bbutils bb_errmsg() invalid arguments =Could not rename %s to %s - errno: %d bb_renamepÂbbnet ÿÿÿÿÿÿÿÿhà ŒŒ*Œ:ŒJŒZŒjŒzŒŠŒšŒªŒºŒÊŒÚŒêŒúŒ *:JZjzŠšªºÊÚêú ŽŽ*Ž:ŽJŽZŽjŽzŽŠŽšŽªŽºŽÊŽÚŽêŽúŽ *:JZjzŠ Ü‹ p­(ĆÄ‚ E tÂÈŠì‰(þÿÿo¬‰ÿÿÿoðÿÿo*‰¢ƒdÄdÄ9<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m dÄinit.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((œ7 Ä‚Ä?ĆÄeGÿÿÿo*‰* €Tþÿÿo¬‰¬ @c ì‰ì l ô‰ô u Š È ~Ü‹Ü „ô‹ô  ‰  Ðp­p-• ­ -€   2@£`Â`2­dÂd2´lÂl2»tÂt2ôÀhÃh3 ÉÄ 4Ï Ä 4 A Ô 4¤ ÚÄ;ƒãGUzìÁVŒMWò]à B øhaô€(Ä‚Ć*‰¬‰ì‰ô‰ Š Ü‹ ô‹   p­ ­ Â`ÂdÂlÂtÂhÃÄ Äñÿ Ä Ä +ñÿ2ñÿ ð =(ÂAlÂO,Â[ð q`„P 0Ę` ¤ ¯0½dÂ2ñÿ 0­ Ë0­ áh¤`­ ¯`ÂîpÂû`Âñÿ p­ ñÿ   HÄLÄPÄ%ñÿ ¸š -`Ä ;LÂ>£H I$¨ TX¥$ _Œ>qŒž„|¥Ý ”$ŒÁ¦D¬`ä¯Ь] ¹ ÄÔ<ÂÚhÃã4ŒRùDŒD TŒ"-dŒ@>XÂEô¡Ü QHÂZtŒ:k ­r ¨ {„Œ-Ž”Œ  ¤ŒÐ²´ŒÄÄŒx×ü© áÈœK ò”Ô «  ÔŒ“äŒ9€ä B¤•‡ K¸š¹ VôŒšfÜ‹ lp~$¬"²$ÄÄ42ÛD/îTDþ0  @Âd@%\£T /tÂA„«^(Äy©ë ‡ТB ””ŧ¤7¼hŸ‰ ÆÄñÿÒt‘4 פ§h á ö´Ê,š‹ \¦h 'Ī9€=  HÔ2Zp­`äqrô˜„Ž¹—§ ¢Ž-³$Ž~Ç4Ž>ßDŽ"ûTŽÐ8¨“û dŽ·2tŽüETÂL„Ž®^”Žn¤ŽÀ€´Ž-’Äñÿ™t¯Ďô¿@ñÿÄ°£„ ÊÔŽ=ÚäŽ>ëtœS ûôŽh ,Ä"=5Ħ> @<¨Ñ Iœ\$ m¤­|„Pˆ4=˜ œŸD-²\¹ ÂƧ… Ð4_ ÝT=ï<÷d¸ t: ¬­ +4¥$ 6 E„‹W Ò initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__bbnet.csec.0usec.1stop.2utils.cworktimestr.0rcgettimestrappendfilestrtoupperrename@@GLIBC_2.0strncat@@GLIBC_2.0getdirnextentrystrchr@@GLIBC_2.0quietipbb_rename__ctype_tolower@@GLIBC_2.0timer_DYNAMICsiglongjmp@@GLIBC_2.0regexec@@GLIBC_2.0__register_frame_info@@GLIBC_2.0write@@GLIBC_2.0timer2getcolornumnoerrorsclose@@GLIBC_2.0_fp_hwsavefilefprintf@@GLIBC_2.0getenv@@GLIBC_2.0signal@@GLIBC_2.0fflush@@GLIBC_2.0regfree@@GLIBC_2.0bb_errmsgstriptrailspacesgetlinebbhostsbb_putenvputenv@@GLIBC_2.0__errno_location@@GLIBC_2.0errormsgbnetsendreplacestrputs@@GLIBC_2.0_initmalloc@@GLIBC_2.0fread@@GLIBC_2.0__deregister_frame_info@@GLIBC_2.0stderr@@GLIBC_2.0__sigsetjmp@@GLIBC_2.0__xstat@@GLIBC_2.0time@@GLIBC_2.0bbprog_startloopcntfgets@@GLIBC_2.0space_sepstrstr@@GLIBC_2.0__strtol_internal@@GLIBC_2.0__ctype_toupper@@GLIBC_2.0valid_lognameclean_stringstrncmp@@GLIBC_2.0inet_addr@@GLIBC_2.0getipaddr__bss_startmainwritefilestripleadtrailspaces__libc_start_main@@GLIBC_2.0timeoutgetdirfirststrcat@@GLIBC_2.0dirdata_startprintf@@GLIBC_2.0_finimemcpy@@GLIBC_2.0fclose@@GLIBC_2.1strrchr@@GLIBC_2.0getdirdonectime@@GLIBC_2.0closedir@@GLIBC_2.0gettimeofday@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3opendir@@GLIBC_2.0httpsetupgethostbyname@@GLIBC_2.0regcomp@@GLIBC_2.0timer1strspn@@GLIBC_2.0exit@@GLIBC_2.0calloc@@GLIBC_2.0sscanf@@GLIBC_2.0_edata_GLOBAL_OFFSET_TABLE_free@@GLIBC_2.0_endmatchsend@@GLIBC_2.0utime@@GLIBC_2.0stripleadspacesmemset@@GLIBC_2.0__ctype_b@@GLIBC_2.0connect@@GLIBC_2.0getdirnextreadfilestrncpy@@GLIBC_2.0fopen@@GLIBC_2.1_IO_stdin_usedportsilentrecv@@GLIBC_2.0jmpenvsprintf@@GLIBC_2.0timer3__data_starttouchtimevalid_ipaddrsocket@@GLIBC_2.0machinereaddir@@GLIBC_2.0alarm@@GLIBC_2.0convert_web_strstrtolower__gmon_start__strcpy@@GLIBC_2.0stopwatch./bb/bb19c/bin/touchtime0100755002342100007640000004065307616533071012751 0ustar bbbbELF †4ð34 (44€4€ÀÀôô€ô€€€õõøøžøž <xxŸxŸ   /lib/ld-linux.so.2GNU    ¸…"=$…-64…pKD…¬"… qT…Dcd…9¦t…Ê„…2~”…˜E¤…-'´…"ŒÄ…jÔ…-!ä…>‘ô… —DŽv†- __gmon_start__libc.so.6printfutime__cxa_finalizemallocfprintfctime__deregister_frame_infomktimesscanftimesprintffclosestderrexitfopen_IO_stdin_used__libc_start_main__register_frame_infoGLIBC_2.1.3GLIBC_2.1GLIBC_2.0si Îii Úii ätŸ 4Ÿ8Ÿ<Ÿ@ŸDŸHŸLŸPŸ TŸ XŸ \Ÿ `Ÿ dŸhŸlŸpŸU‰åƒìèMèãèÞÉÃÿ5,Ÿÿ%0Ÿÿ%4Ÿhéàÿÿÿÿ%8ŸhéÐÿÿÿÿ%<ŸhéÀÿÿÿÿ%@Ÿhé°ÿÿÿÿ%DŸh é ÿÿÿÿ%HŸh(éÿÿÿÿ%LŸh0é€ÿÿÿÿ%PŸh8épÿÿÿÿ%TŸh@é`ÿÿÿÿ%XŸhHéPÿÿÿÿ%\ŸhPé@ÿÿÿÿ%`ŸhXé0ÿÿÿÿ%dŸh`é ÿÿÿÿ%hŸhhéÿÿÿÿ%lŸhpéÿÿÿÿ%pŸhxéðþÿÿ1í^‰áƒäðPTRh Žhì„QVh<‰è3ÿÿÿô‰öU‰åSPè[ÃÚ‹ƒL…ÀtÿЋ]üÉÉöU‹Ÿ‰åƒì…ÒuI‹Ÿ‹…Àtt&B£Ÿÿ‹Ÿ‹ …Éuê¸D……Àtƒì hŸèˆþÿÿƒÄ¸£Ÿ‰ì]ÃvU‰åƒì‰ì]öU‰å¸…ƒì…Àtƒìh hŸèþÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰å‹M¸ÿÿÿÿ¶ƒêJu¶Qƒêau ¶Qƒênu¶Q…Òu ¸éඃêFu¶Qƒêeu ¶Qƒêbu¶Q…Òu ¸é³¶ƒêMu¶Qƒêau ¶Qƒêru¶Q…Òu ¸é‡¶ƒêAu¶Qƒêpu ¶Qƒêru¶Q…Òu ¸é[¶ƒêMu¶Qƒêau ¶Qƒêyu¶Q…Òu ¸é/¶ƒêJu¶Qƒêuu ¶Qƒênu¶Q…Òu ¸é¶ƒêJu¶Qƒêuu ¶Qƒêlu¶Q…Òu ¸é׶ƒêAu¶Qƒêuu ¶Qƒêgu¶Q…Òu ¸é«¶ƒêSu¶Qƒêeu ¶Qƒêpu¶Q…Òu ¸é¶ƒêOu¶Qƒêcu ¶Qƒêtu¶Q…Òu ¸ ëVv¶ƒêNu¶Qƒêou ¶Qƒêvu¶Q…Òu ¸ ë*v¶ƒêDu¶Qƒêeu ¶Qƒêcu¶Q…Òu¸ ]ÃvU‰åWVSƒìH‹} hèâûÿÿ‰ÆÇ$èÔûÿÿ‰E¸ƒÄƒ}u|‹W¶ƒè-u ¶Bƒèeu¶B…Àt`‹W¶ƒè-u ¶Bƒèau¶B…ÀtD‹W¶ƒè-u ¶Bƒècu¶B…Àt(ƒìEÄPhŽÿwèüÿÿƒÄ Vh„Žÿwéævƒ}uN‹W¶ƒè-u ¶Bƒèeu¶B…Àt‹W¶ƒè-u ¶Bƒèau¶B…ÀuƒìEÄPhŽÿw鑉öƒ}u.‹W¶ƒè-u ¶Bƒècu¶B…ÀuƒìEÀPhŽÿwë\ƒ}ub‹W¶ƒè-u ¶Bƒèeu¶B…Àt‹W¶ƒè-u ¶Bƒèau¶B…Àu ÇEÄëEÇEÄâÿÿÿƒìVh„ŽÿwèûÿÿƒÄë'vƒìÿ7h‹Žÿ5 è7úÿÿÇ$èËúÿÿv‹EÄ@€Áà‰Eăì E¼Pè=úÿÿEĉE¼ƒÄ‹W¶ƒè-u ¶Bƒècu¶B…ÀuLƒì EÀPè\úÿÿƒÄ Ph„Ž]ÈSèªúÿÿ‰ßü¹ÿÿÿÿ°ò®÷ÑÆD þƒÄSh„Žè úÿÿÇ$è=úÿÿ‹W¶ƒè-u ¶Bƒèeu¶B…Àuƒìÿu¼hŽèÐùÿÿÇ$èúÿÿ‹W¶ƒè-u ¶Bƒèau¶B…ÀuLƒì E¼Pè¼ùÿÿƒÄ Ph„Ž]ÈSè úÿÿ‰ßü¹ÿÿÿÿ°ò®÷ÑÆD þƒÄSh„ŽèiùÿÿÇ$èùÿÿ‹W¶ƒè-u ¶Bƒèdu¶B…Àt ‹W¶ƒè-u ¶Bƒèxu¶B…À…ƒì j,èÆøÿÿ‰ÃƒÄƒ}t#ƒìÿ7h¯Žÿ5 è–øÿÿÇ$è*ùÿÿ‰öƒì CPC Pÿu¸hÊŽÿwèùÿÿƒÄÿu¸è^úÿÿ‰CklÇCÇCÇÇC ÿÿÿÿE¼‰$èbøÿÿ‰E¼ƒÄ‹W¶ƒè-u ¶Bƒèxu¶B…Àuƒì SèGøÿÿƒÄPë/‹W¶ƒè-u ¶Bƒèdu¶B…Àuƒì SèøÿÿƒÄ‹U¼)ÂRhÓŽè(øÿÿƒÄƒì jè[øÿÿvƒì jè¾÷ÿÿ‰Ã‹E¼‰‹E¼‰CƒÄh׎VècøÿÿƒÄ…Àt ƒì Pèó÷ÿÿƒÄSVè9øÿÿÇ$è øÿÿVÿ7hÙŽÿ5 èY÷ÿÿÇ$èí÷ÿÿU¡Ÿ‰åSƒìƒøÿ»Ÿtv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[Ãþvè7øÿÿ‹]üÉÃJanFebMarAprMayJunJulAugSepOctNovDec-e-a-c%d%s%ldFormat: %s [offset] filename -d-xFormat: %s -d|e WEB-TIME %s %d %d%d a%s: Can't open filename %s $ŸtouchtimeÿÿÿÿÿÿÿÿxŸ…*…:…J…Z…j…z…Š…š…ª…º…Ê…Ú…ê…ú… † ì„ Ž(ƒÄ Î (Ÿ€l„\„þÿÿo„ÿÿÿoðÿÿoòƒ¢ƒdD†dD†9<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m dD†init.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((œ7 ÄÄ@?ƒîGÿÿÿoòƒò(Tþÿÿo„@c \„\l d„du l„l€ ~ì„ì„…‰ †  Ž •@Ž@µøžø£Ÿ­Ÿ´ Ÿ »(Ÿ(PÀxŸx É Ï Ô¤ Ú¼ƒã?1Dìƒ2xû2òÈ8Ð< ˜>ô€(ăòƒ„\„d„ l„ ì„ … † Ž@ŽøžŸŸ Ÿ(ŸxŸ  ñÿ D† D† +ñÿ2ñÿ p† =ŸA ŸOŸ[p† qŸ„І  ˜à† ¤‡ ¯Ÿ½Ÿ2ñÿ à Ëà ៤Ž ¯Ÿî$ŸûŸñÿ Ž ñÿ ‡ xŸ…"?@ŽF$…-Yì„ _4…pqD…¬"” ¦ ‡ ¯T…D¿d…9ÑŸ Ø † ß ñÿë<‰› ðt…Ê øž „…2* Ž0”…˜B¤…-S´…"oÄ…Ô…-‘ ñÿ˜(Ÿ®4 ñÿ³ä…>Äô… ÕDŽä†-÷øž initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__touchtime.c_DYNAMIC__register_frame_info@@GLIBC_2.0_fp_hwfprintf@@GLIBC_2.0_initmalloc@@GLIBC_2.0__deregister_frame_info@@GLIBC_2.0stderr@@GLIBC_2.0getmonthtime@@GLIBC_2.0mktime@@GLIBC_2.0bbprog_start__bss_startmain__libc_start_main@@GLIBC_2.0data_startprintf@@GLIBC_2.0_finifclose@@GLIBC_2.1ctime@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3exit@@GLIBC_2.0sscanf@@GLIBC_2.0_edata_GLOBAL_OFFSET_TABLE__endutime@@GLIBC_2.0fopen@@GLIBC_2.1_IO_stdin_usedsprintf@@GLIBC_2.0__data_start__gmon_start__./bb/bb19c/bin/dumphostsvc0100755002342100007640000010105607616533071013322 0ustar bbbbELFðŒ4,k4 (44€4€ÀÀôô€ô€€€ E E E Õ ÕbFÖÖ   /lib/ld-linux.so.2GNU%4 +2)-0 /3 &%!(*1,$  #' ".,Š>ø<Šž›LŠÁ«ÀÖ\ŠD»lŠ"¥|Š-?ŒŠ qœŠ“¬Šxˆ¼Š“OÌŠbÜŠp슺üŠ¬"(ÄÖ9ÈÖG ‹/‹DF,‹@Ò<‹ÂxÌÖÙL‹Å\‹Êél‹]³|‹ª!Œ‹2Lœ‹q2¬‹˜–¼‹¹­Ì‹-¢Ü‹~Sì‹""ü‹Ð ŒüzŒ®`,Œž<ŒÀñLŒ-Ñ\Œô/lŒ>|Œh5ÐÖጌœeœŒ kd·*¬Œ-@¼ŒdiÌŒ¸ ÜŒ‹__gmon_start__libc.so.6strcpyprintfstdoututime__ctype_bgetenvfgetsmemcpy__cxa_finalizemallocreaddirfflush__ctype_toupperputenvrenamestrrchrcallocfprintfctimestrcat__deregister_frame_infostrstrstrncmpstrncpyreallocsscanfstrncatfreadregcompmemsetregexectimeopendirsprintffclosestderrfwrite__xstat__errno_locationexitfopen_IO_stdin_usedstrspn__libc_start_mainregfreestrchrclosedir__ctype_tolower__register_frame_infofreeGLIBC_2.1.3GLIBC_2.1GLIBC_2.0si Öii âii ì Ö2ÀÖÄÖÈÖÌÖÐÖ+\Õ`ÕdÕhÕlÕpÕtÕxÕ |Õ €Õ „Õ ˆÕ ŒÕՔ՘՜ՠդըլհմոռÕÀÕÄÕÈÕ ÌÕ!ÐÕ"ÔÕ#ØÕ$ÜÕ%àÕ&äÕ'èÕ(ìÕ)ðÕ*ôÕ,øÕ-üÕ/Ö0Ö1Ö3U‰åƒìèè›èÖ,ÉÃÿ5TÕÿ%XÕÿ%\Õhéàÿÿÿÿ%`ÕhéÐÿÿÿÿ%dÕhéÀÿÿÿÿ%hÕhé°ÿÿÿÿ%lÕh é ÿÿÿÿ%pÕh(éÿÿÿÿ%tÕh0é€ÿÿÿÿ%xÕh8épÿÿÿÿ%|Õh@é`ÿÿÿÿ%€ÕhHéPÿÿÿÿ%„ÕhPé@ÿÿÿÿ%ˆÕhXé0ÿÿÿÿ%ŒÕh`é ÿÿÿÿ%Õhhéÿÿÿÿ%”Õhpéÿÿÿÿ%˜Õhxéðþÿÿÿ%œÕh€éàþÿÿÿ% ÕhˆéÐþÿÿÿ%¤ÕhéÀþÿÿÿ%¨Õh˜é°þÿÿÿ%¬Õh é þÿÿÿ%°Õh¨éþÿÿÿ%´Õh°é€þÿÿÿ%¸Õh¸épþÿÿÿ%¼ÕhÀé`þÿÿÿ%ÀÕhÈéPþÿÿÿ%ÄÕhÐé@þÿÿÿ%ÈÕhØé0þÿÿÿ%ÌÕhàé þÿÿÿ%ÐÕhèéþÿÿÿ%ÔÕhðéþÿÿÿ%ØÕhøéðýÿÿÿ%ÜÕhéàýÿÿÿ%àÕhéÐýÿÿÿ%äÕhéÀýÿÿÿ%èÕhé°ýÿÿÿ%ìÕh é ýÿÿÿ%ðÕh(éýÿÿÿ%ôÕh0é€ýÿÿÿ%øÕh8épýÿÿÿ%üÕh@é`ýÿÿÿ%ÖhHéPýÿÿÿ%ÖhPé@ýÿÿÿ%ÖhXé0ýÿÿ1í^‰áƒäðPTRh0·hŠQVhðèKþÿÿô‰öU‰åSPè[Ã2H‹ƒ¼…ÀtÿЋ]üÉÉöU‹,Õ‰åƒì…ÒuI‹(Õ‹…Àtt&B£(Õÿ‹(Õ‹ …Éuê¸üŠ…Àtƒì h<ÕèpýÿÿƒÄ¸£,Õ‰ì]ÃvU‰åƒì‰ì]öU‰å¸lŠƒì…ÀtƒìhÔÖh<Õè›üÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰åWVSì|@ƒ}tƒì h€·è}ýÿÿÇ$èþÿÿƒì h¹·ècüÿÿ‰ÂƒÄ…Òt2‰×ü¹ÿÿÿÿ°ò®÷ÑIùÎ~7ƒìRhÀ·è5ýÿÿÇ$èÉýÿÿƒì h ¸èýÿÿÇ$è¯ýÿÿvƒìRhÿ·…ˆßÿÿPèþÿÿÇ$\¸èëûÿÿ‰…€¿ÿÿƒÄ…Àuƒì h€¸èÑüÿÿÇ$èeýÿÿEˆƒìP‹U ÿrjè0üÿÿƒÄƒøÿu ƒì‹E ÿphÀ¸è•üÿÿÇ$è)ýÿÿfƒ}˜x!ƒì‹U ÿrh¹ènüÿÿÇ$èýÿÿ‰ö‹E ‹X‰ßü¹ÿÿÿÿ°ò®÷ÑIùÿvƒìSh@¹è5üÿÿƒÄƒì‹U ÿrh¹ˆ¿ÿÿSè8ýÿÿƒÄSµˆßÿÿVè|ƒÄ ‹E ÿph‰¹SèýÿÿƒÄSVè6ƒÄ‹E´ƒè€Pjè‰üÿÿ‰ÆƒÄ…öuƒì h ¹èÃûÿÿÇ$èWüÿÿvƒìhÖ¹‹U ÿrè±üÿÿ‰ÃƒÄ…Ûu(ƒì‹E ÿphà¹è…ûÿÿ‰4$èMüÿÿÇ$èüÿÿSjÿu´VèÄúÿÿƒÄƒøu‰÷ü¹ÿÿÿÿ°ò®÷ÑI;M´t(ƒì‹U ÿrh ºè5ûÿÿ‰4$èýûÿÿÇ$èÁûÿÿƒì Sè7ûÿÿ‹EЉ…„¿ÿÿ…„¿ÿÿ‰$è@ûÿÿ‰$…ˆßÿÿPÿµ€¿ÿÿ‹E ÿpVè\‰ÃƒÄ …Ût3ÿ5ÄÖj‰ßü¹ÿÿÿÿ°ò®÷ÑIQSèíûÿÿ‰$è…ûÿÿÇ$èIûÿÿƒì h ¹è›úÿÿÇ$è/ûÿÿvU‰åWSƒìl‹}‹] h€ºètùÿÿ£×ƒÄ…Àu Çׇºƒì hˆºèQùÿÿ£×ƒÄ…Àu Çׇºƒì h“ºè.ùÿÿ£×ƒÄ…Àu Çׇºƒì hºè ùÿÿ£×ƒÄ…Àu Çפºƒì h©ºèèøÿÿ£ ׃ąÀu Ç ×±ºƒ=$7tƒì ÿ5$7è‹úÿÿƒÄÇ$7…Ût SWhÁºë ƒìWhǺh ×è­úÿÿƒÄE˜ƒìPh ×jè÷øÿÿƒÄƒøÿ„£‹EÄ£ 7ƒìPjèúÿÿ£$7ƒÄ…Àt¡$7ƃìhÙºh ×è=úÿÿ‰ÃƒÄ…Ût\SjÿuÄÿ5$7èsøÿÿƒÄƒøu‹=$7ü¹ÿÿÿÿ°ò®÷ÑI;MÄtƒì ÿ5$7èµùÿÿÇ$7ƒÄƒì SèïøÿÿƒÄë ‰ö¸ë¸eø[_]ÃU‰åWSƒì`‹}‹] ƒ=,7tƒì ÿ5,7è_ùÿÿƒÄÇ,7…Ût SWhÁºë ƒìWhÛºh ÷èùÿÿƒÄE˜ƒìPh ÷jèË÷ÿÿƒÄƒøÿ„£‹EÄ£(7ƒìPjè×øÿÿ£,7ƒÄ…Àt¡,7ƃìhÙºh ÷èùÿÿ‰ÃƒÄ…Ût\SjÿuÄÿ5,7èG÷ÿÿƒÄƒøu‹=,7ü¹ÿÿÿÿ°ò®÷ÑI;MÄtƒì ÿ5,7è‰øÿÿÇ,7ƒÄƒì SèÃ÷ÿÿƒÄë ‰ö¸ë¸eø[_]ÃU‰åWVSì0ajOÿu˜þÿSèkøÿÿƒÄj Sè öÿÿƒÄ…ÀtÆ…˜þÿƒìj PèöÿÿƒÄ…ÀtÆ‹}ü¹ÿÿÿÿ°ò®÷Ñ¡ 7Lÿ¡(7ÁÁ‰Ÿýÿƒì QèWöÿÿ‰… ŸýÿƒÄ…Àu ¸éÆ‹ ŸýÿÆèßÿÿƒìh jSèÁ÷ÿÿƒÄ hÿÿu SèÀ÷ÿÿƒÄj.SèåöÿÿƒÄ‰… Ÿýÿ…Àt Æÿ… Ÿýÿ…èßÿÿ‰…$Ÿýÿë ‹$ŸýÿÆ.ƒìj,ÿµ$Ÿýÿè7õÿÿƒÄ‰…$Ÿýÿ…ÀuÚ…èßÿÿ‰…$Ÿýÿjh èÿÿ‰ôžýÿQPèÔjh …èŸÿÿ‰…ðžýÿPÿµ$ŸýÿèµƒÄ ƒ=$7„ƒì ÿ5 7èWõÿÿ‰ÇƒÄ…ÿ„vƒìÿ5$7Wè;÷ÿÿƒÄÿuhíºÿ5 7Wè´µ˜þÿVÿ5×hõºè¿ÿÿSèÖöÿÿƒÄ Sh»ÿ5 7Wèÿuh»ÿ5 7WèmƒÄ h»h6»ÿ5 7WèThA»hF»ÿ5 7Wè>ƒÄ VhM»ÿ5 7Wè)ÿµ$ŸýÿhV»ÿ5 7WèƒÄ ÿµ Ÿýÿh^»ÿ5 7Wèø ÿµôžýÿhe»ÿ5 7Wèá ƒÄ ÿµðžýÿho»ÿ5 7WèÇ ÿ5×hu»ÿ5 7Wè° ƒÄ ÿ5×h}»ÿ5 7Wè– ÿ5 ×hˆ»ÿ5 7Wè ƒÄWÿµ Ÿýÿè€ôÿÿ‰<$èXõÿÿëG‰öƒìh »ë0‰öƒìhó»ÿµ ŸýÿèUôÿÿƒÄh ×ÿµ ŸýÿèBôÿÿƒÄh ¼ÿµ Ÿýÿè/ôÿÿƒÄƒì hq¼è/óÿÿ‰ÃƒÄ…Ûu»‡ºƒì h}¼èóÿÿ‰…,ŸýÿƒÄ…Àu Ç…,Ÿýÿ‡ºƒì h‰¼èðòÿÿ‰…(ŸýÿƒÄ…Àu Ç…(Ÿýÿ‡ºƒì h•¼èÌòÿÿ‰…4ŸýÿƒÄ…Àu Ç…4Ÿýÿ‡ºƒì hŸ¼è¨òÿÿ‰…0ŸýÿƒÄ…Àu Ç…0Ÿýÿ‡ºƒìhÀ¼ÿµ ŸýÿènóÿÿƒÄh½ÿµ Ÿýÿè[óÿÿƒÄh ½ÿµ ŸýÿèHóÿÿƒÄh`½ÿµ Ÿýÿè5óÿÿƒÄ Sh‡½èþÿSèPôÿÿƒÄSÿµ Ÿýÿèóÿÿÿµ Ÿýÿÿµ$Ÿýÿh ½Sè*ôÿÿƒÄSÿµ ŸýÿèëòÿÿƒÄhÁ½ÿµ ŸýÿèØòÿÿ‹M‰Ÿýÿ‰Ïü¹ÿÿÿÿ°ò®÷ÑAÿ‹•ŸýÿƒÄ€zÿ t‹ŸýÿÆDÆ Ç…üžýÿ‡º¸‡º‰…Ÿýÿƒìj ÿµŸýÿèºòÿÿƒÄ‰…Ÿýÿ…Àt]ƃìj ÿµŸýÿèšòÿÿƒÄ‰…Ÿýÿ…Àt=Æ‹ŸýÿA‰üžýÿƒìj ÿµŸýÿèmòÿÿƒÄ‰…Ÿýÿ…Àt@‰…Ÿýÿ‹Ÿýÿƃ½Ÿýÿu"‹½Ÿýÿü¹ÿÿÿÿ°ò®÷Ñ‹…ŸýÿLÿ‰Ÿýÿ˜?þÿ‰ìžýÿ» ƒìSjQèÈòÿÿƒÄ …˜þÿ‰…èžýÿSjPè°òÿÿƒÄ ˜ÿýÿ‰äžýÿSjQè˜òÿÿƒÄ …˜Ÿýÿ‰…àžýÿSjPè€òÿÿƒÄ ˜ßýÿ‰ÜžýÿSjQèhòÿÿƒÄ µ˜_þÿSjVèVòÿÿƒÄ hÿÿ5×VèRòÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPhϽVèÝïÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPÿµ$ŸýÿVè·ïÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPhÕ½Vè’ïÿÿƒÄ ‰÷ü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPÿµ ŸýÿVèlïÿÿƒÄ …˜¿ýÿSjPèšñÿÿ¿‡ºÇ$è)ðÿÿ‰Ã…8ŸýÿƒÄ PVjèðÿÿƒÄ…À…„9xŸýÿŽxƒìhÿVèĉ…øžýÿƒÄ…À„;ƒìÿµÜžýÿÿµàžýÿÿµäžýÿÿµèžýÿÿµìžýÿh×½PèãðÿÿƒÄ…˜¿ýÿjhæ½PèðÿÿƒÄ ˜¿ýÿ‰Øžýÿ‰Ïü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈP…˜þÿPÿµØžýÿè…îÿÿƒÄ˜ßýÿ‰ßü¹ÿÿÿÿ°ò®ƒùþ„’ƒìSÿµøžýÿèXïÿÿƒÄ‰Æ…ötz‰ßü¹ÿÿÿÿ°ò®÷Ñ4€>tdƒì Vè¼ ƒÄ ‹½Øžýÿü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPh¾ÿµØžýÿèîÿÿƒÄ ‹½Øžýÿü¹ÿÿÿÿ°ò®÷ÑI¸ÿ)ÈPVÿµØžýÿèØíÿÿƒÄƒì ÿµøžýÿèçïÿÿë…˜¿ýÿƒìjh¾PèïÿÿƒÄ¿)¾ƒì ÿµ0Ÿýÿÿµ4Ÿýÿÿ5×h@¾…è?ÿÿPèðïÿÿƒÄÿµ0Ÿýÿÿµ4ŸýÿWÿ5×h ¾…è_ÿÿPèÉïÿÿƒÄÿµ0Ÿýÿÿµ4ŸýÿWÿ5×h¿…èÿÿPè¢ïÿÿƒÄÿµ0Ÿýÿÿµ4ŸýÿWÿ5×h`¿…èÿþÿPè{ïÿÿƒÄÿµ0Ÿýÿÿµ4Ÿýÿÿ5×hÀ¿…èßþÿPèUïÿÿƒÄÿµ0Ÿýÿÿµ4Ÿýÿÿ5×h À…è¿þÿPè/ïÿÿÇ…ŸýÿƒÄ 饋ŸýÿƃìÿµŸýÿèŸþÿSè.ïÿÿƒÄ…è?ÿÿPhcÀh S褅è_ÿÿPhjÀh SèƒÄ …èÿÿPhoÀh Sès…èÿþÿPhwÀh Sè\ƒÄ …èßþÿPhÀh SèB…è¿þÿPh†Àh Sè+‹… Ÿýÿ‰…Ôžýÿ‰Çü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®÷ÑŒ þ‹…ŸýÿHƒÄ 9ÁvV‹½ Ÿýÿ¹ÿÿÿÿ°ò®÷Ñqÿ‰ß¹ÿÿÿÿò®÷Ñ‹…Ÿýÿ„ÿ‰…ŸýÿƒìPÿµ Ÿýÿè®ìÿÿ‰… ŸýÿƒÄ…À„9ƃì…èŸþÿPÿµ Ÿýÿè”ìÿÿƒÄhŒÀÿµ ŸýÿèìÿÿƒÄƒ½Ÿýÿu ƒìhŽÀÿµ ŸýÿèbìÿÿÇ…ŸýÿƒÄ‹ŸýÿA‰Ÿýÿƒìj ÿµŸýÿèëÿÿƒÄ‰…Ÿýÿ…Àt‹…Ÿýÿ9…Ÿýÿ‚-þÿÿ‹½Ÿýÿü¹ÿÿÿÿ°ò®÷ѱÿ‹ Ÿýÿ‰ß¹ÿÿÿÿò®÷ÑLÿ‹…ŸýÿH9ÁvGµŸýÿ‰ß¹ÿÿÿÿ°ò®÷ÑqÿƒìÿµŸýÿSè¬ëÿÿ‰… ŸýÿƒÄ…Àu ƒì Sé;‰ö‹ ŸýÿƃìÿµŸýÿÿµ Ÿýÿè†ëÿÿƒÄƒ½Ÿýÿu ƒìhšÀëƒìh¡Àÿµ Ÿýÿè]ëÿÿƒÄƒìh©Àÿµ ŸýÿèGëÿÿƒÄh½ÿµ Ÿýÿè4ëÿÿƒÄhÀÀÿµ Ÿýÿè!ëÿÿƒÄhßÀÿµ ŸýÿèëÿÿƒÄ ÿµ,ŸýÿhöÀµèþÿVè$ìÿÿƒÄVÿµ ŸýÿèåêÿÿƒÄ ÿµŸýÿhÁVèìÿÿƒÄVÿµ ŸýÿèÂêÿÿƒÄ ÿµüžýÿhÁVèÞëÿÿƒÄVÿµ ŸýÿèŸêÿÿ˜¿ýÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþt-ƒì SèÔSÿµ(ŸýÿhÁVèšëÿÿƒÄVÿµ Ÿýÿè[êÿÿƒÄƒìh)Áÿµ ŸýÿèEêÿÿƒÄh5Áÿµ Ÿýÿè2êÿÿƒÄƒ=×t6ƒ=×t-‹5׿?Á¹üó¦—Â’À8Âuÿu ÿ5×h`Áë ƒìÿu h ÂèþÿSè ëÿÿƒÄSÿµ ŸýÿèÊéÿÿƒÄƒìh`Âÿµ Ÿýÿè´éÿÿƒÄƒ=,7„Hƒì ÿ5(7èöèÿÿ‰…ŸýÿƒÄ…À„ƒìÿ5,7PèÖêÿÿƒÄÿuhíºÿ5(7ÿµŸýÿèJµ˜þÿVÿ5×hõºè¿ÿÿSèlêÿÿƒÄ Sh»ÿ5(7ÿµŸýÿèÿuh»ÿ5(7ÿµŸýÿèùƒÄ h»h6»ÿ5(7ÿµŸýÿèÛhA»hF»ÿ5(7ÿµŸýÿèÀƒÄ VhM»ÿ5(7ÿµŸýÿè¦ÿµ$ŸýÿhV»ÿ5(7ÿµŸýÿèŠƒÄ ÿµ Ÿýÿh^»ÿ5(7ÿµŸýÿèkÿ5×hu»ÿ5(7ÿµŸýÿèOƒÄ ÿ5×h}»ÿ5(7ÿµŸýÿè0ÿ5 ×hˆ»ÿ5(7ÿµŸýÿ苽Ÿýÿü¹ÿÿÿÿ°ò®÷ѱÿ‹ Ÿýÿ‰ß¹ÿÿÿÿò®÷ÑLÿ‹…ŸýÿHƒÄ 9ÁvCµŸýÿ‰ß¹ÿÿÿÿ°ò®÷ÑqÿƒìÿµŸýÿSè´çÿÿ‰… ŸýÿƒÄ…Àuƒì SëF‹ ŸýÿƃìÿµŸýÿÿµ Ÿýÿè’çÿÿƒÄÿµŸýÿèdèÿÿë_‰öƒìh »ëH‰öƒì ÿµÔžýÿèFèÿÿ¸ëEvƒìh·Âÿµ ŸýÿèIçÿÿƒÄh ÷ÿµ Ÿýÿè6çÿÿƒÄhàÂÿµ Ÿýÿè#çÿÿƒÄ‹… Ÿýÿeô[^_]ÉöU‰åWVSƒì ‹]ÇEì‰]ð…Ûtƒ}tƒ}t ƒ} …Ù¸éw‰öƒ}ìu*ƒì ÿu è#æÿÿ‰EìƒÄ…À„ƒìÿu jPè§çÿÿƒÄ9Þt@Æ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰È÷ÐTþ‹E H9ÂÃìSÿuìècæÿÿƒÄ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷Ò‹}¹ÿÿÿÿò®‰Ë‰Ø÷ÐTþ‹E H9ƒƒìÿuÿuìè!æÿÿ‹}ü¹ÿÿÿÿ°ò®‰Ê‰Ð÷Ð\ÿƒÄƒìÿuSè»åÿÿƒÄ‰Æ…ö…ÿÿÿƒ}ì„€‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰Î‰ð÷ÐTþ‹E H9Â~,ë ‰ö¸ëNƒìÿuìÿuðèþæÿÿƒÄÿuìèsæÿÿ¸ë-ƒìSÿuìè€åÿÿƒÄÿuìÿuðèÒæÿÿƒÄÿuìèGæÿÿƒÄ¸eô[^_]ÃvU‰åWS‹]…Ût@‰ßü¹ÿÿÿÿ°ò®ƒùþt/‰Ù¾¡ÐÖ‰ÇöDP t A¾öDG uõ9Ët ƒìQSèkæÿÿƒÄeø[_]ÃU‰åWS‹]…Ût;‰ßü¹ÿÿÿÿ°ò®ƒùþt*‰ß¹ÿÿÿÿò®÷ÑL þë‰öÆI9Ùr¾¡ÐÖöDP ué[_]ÃU‰åSƒì‹]SèPÿÿÿ‰$èœÿÿÿ‹]üÉÃvU‰åWƒì‹U‰×ü¹ÿÿÿÿ°ò®÷ÑI¸ƒùw7¸ÿÿÿÿ‰Eì‰Eð‰Eô‰EøƒìEøPEôPEðPEìPh@ÃRèåÿÿƒÄ ¸‹}üÉÃU‰åWVSƒìL‹u‹] ÇE´ƒ>u:ƒì hLÃèãÿÿ‰ÂƒÄ…Òt$‰×ü¹ÿÿÿÿ°ò®ƒùþtƒìhTÃRèåÿÿ‰ƒÄƒ>„MƒìÿujSèÈäÿÿƒÄE؉E°EȉE¬E¸‰E¨é ‰öÇE´éƒì Sèãþÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþ„Û€; „Ò€;#„É÷Eu¸÷E„¢¾¡ÐÖöDP„ÇEØÇEÜÇEàÇEäÇEÈÇEÌÇEÐÇEÔÇE¸ÇE¼ÇEÀÇEăìjSÿu°èòãÿÿƒÄÿu¨ÿu¬hVÃÿu°èœãÿÿƒÄÿu¬è-þÿÿƒÄƒø„ ÿÿÿƒìÿujSè§ãÿÿƒÄƒìÿ6‹EHPSèDâÿÿƒÄ…À…éþÿÿƒ>tƒ}´uƒì ÿ6è¤âÿÿǃċE´eô[^_]ÃU‰åWVSì@¸ƒ}„f‹}ü¹ÿÿÿÿ°ò®¸ƒùþ„K‹}¹ÿÿÿÿ°ò®÷ÑI‹EH9Áƒ+ƒìÿuÿu èaãÿÿÇ$LÃèáÿÿƒÄ…À„ƒìhTÃPèüâÿÿ‰…ä¿ÿÿƒÄ…À„ç颉öƒ½à¿ÿÿ„{è¿ÿÿ‰ßü¹ÿÿÿÿ°ò®¸ùÿßÿÿ”ÀH!…à¿ÿÿƒì Sè3üÿÿ¾•è¿ÿÿ¡ÐÖƒÄöDP„S‰Ù‰ÂA¾öDBuõ€9.tð‰Â¡ÐÖöDP „,ÆAƒìQèßÿÿSè’âÿÿ‰$èÖûÿÿÇ…Ü¿ÿÿÇ$\Ãè$àÿÿƒÄ…Àt#‰Æ¿aùüó¦—Â’À8Âu Ç…Ü¿ÿÿ‹}ü¹ÿÿÿÿ°ò®÷ÑqÿèßÿÿƒìVÿuSè•àÿÿƒÄ…À…  ƒ½Ü¿ÿÿt¾¡ÐÖöDP u €9të~¾¡ÐÖöDP u €9t€9.ue…è¿ÿÿ‰Æ¿fùüó¦—Â’À8Âuƒ}tƒì…è¿ÿÿPÿu è¨áÿÿƒÄ¸ë_‰ö½è¿ÿÿü¹ÿÿÿÿ°ò®ùÿßÿÿt Ç…à¿ÿÿƒìÿµä¿ÿÿhÿ…è¿ÿÿPè°ßÿÿƒÄ…À…1þÿÿƒì ÿµä¿ÿÿèàÿÿƒÄ¸eô[^_]ÃvU‰åWVS‹]¶ƒèru¶Cƒèeu ¶Cƒèdu¶C…Àu ¸é¢v‰Þ¿rùüó¦—Â’À8Âu¸ë‰Þ¿yùüó¦—Â’À8Âu¸ë_‰Þ¿€Ã¹üó¦—Â’À8Âu¸ë?‰Þ¿†Ã¹üó¦—Â’À8Âu¸ë‰Þ¿‹Ã¹üó¦—Á’¸8Ñ”À[^_]ÃU‰åVSƒì‹u‹] ŠEˆE÷€;t"ëŠU÷ˆ¾ƒìPVèšÝÿÿƒÄ…ÀuçC€;uæeø[^]ÉöU‰åƒìEüPèEÞÿÿEü‰$èêÞÿÿƒÄPh èìßÿÿƒÄj h èMÝÿÿƒÄ…ÀtƸ ÉÃU‰åWS‹]€;tv¾¡ÐÖöDP tÆ C€;uèh‘Ãh“Éßü¹ÿÿÿÿ°ò®÷ÑIQSè÷ÿÿ¸eø[_]ÃU‰åWVSƒì4‹} ü¹ÿÿÿÿ°ò®÷ѱÿVjè²Þÿÿ‰ÃƒÄ¸…Û„D÷Etƒìÿu h–ÃSèöÞÿÿëD÷Etƒìÿu hÃSèÚÞÿÿë(÷Etƒìÿu h¡ÃSè¾Þÿÿë ƒìÿu SèàÞÿÿƒÄ¿ ÷Et¿ ÷Eth¥ÃhªÃVSè@öÿÿh¬Ãh¯Ãë@h±Ãh·ÃVSè#öÿÿh¯Ãh¬ÃVSèöÿÿƒÄ h¬Ãh¯ÃVSèþõÿÿh·Ãh±ÃVSèíõÿÿƒÄ ƒìWSEÈPè|ÝÿÿƒÄ…Àtƒì Sè¼Ýÿÿ¸ë9ƒì Sè«ÝÿÿÇ$jjÿu]ÈSè”Ûÿÿ‰ÆƒÄSèÙÛÿÿƒÄ¸…ö”Àeô[^_]ÃU‰å‹M…Éë‰ö¾‹ÀÖ‹‚ˆAt€9uê]ÃU‰å‹M…Éë‰ö¾‹ÌÖ‹‚ˆAt€9uê]ÃU‰åWVSìl ‹}ǵˆßÿÿé˜C Pÿu hºÃVèJÝÿÿEˆƒÄ PVjè›ÛÿÿƒÄ…Àupfƒ}˜yÇ÷E u)ëXöE™@tÇ÷E uëAÇ÷Et1ƒìjÿuƒÃ SèœýÿÿƒÄ…ÀtƒìSÿuèÝÿÿƒÄ¸ë vƒì ÿuèÙÜÿÿ‰ÃƒÄ…Û…Pÿÿÿ¸eô[^_]ÃvU‰åWVSƒì‹}‹u Vè×Ûÿÿ‰ÃƒÄ¸…Ût=ƒìÿuÿuÿuÿuVSèçþÿÿƒÄ ƒøu ‰¸ë‰öƒì SèwÛÿÿǸeô[^_]ÃU‰åƒì‹E…Àu¸ë(ƒìÿuÿuÿuÿuÿu PèŒþÿÿ‰ÂƒÄ ¸ƒú”ÀÉÉöU‰åƒì‹E…Àt ƒì PèÛÿÿÉÃU‰åVSƒì‹u‹] [›ÁãEôPè,Úÿÿ؉Eô‰Eè‰EìƒÄhÀÃVè“ÛÿÿƒÄ…Àtƒì Pè“ÚÿÿƒÄë‰öƒìVhÂÃÿ5ÈÖèHÙÿÿ¸ëƒìEèPVè#Ûÿÿ¸eø[^]ÃvU‰åWS‹U‹] …ÒtM…ÛtI‰×ü¹ÿÿÿÿ°ò®¸ƒùþt8ƒìÿuRèÛÿÿ‰ÇƒÄ…ÿtƒìShÒÃWè×Øÿÿ‰<$èÿÙÿÿ¸ë¸eø[_]ÃU‰åƒì hÕÃÿu ÿuè‚ÿÿÿÉÃU‰åƒì hÀÃÿu ÿuèjÿÿÿÉÃU‰åWVSƒì|‹u‹] ÇE„¸…ö„¦‰÷ü¹ÿÿÿÿ°ò®¸ƒùþ„Œ…ÛŽ„EˆƒìPVjèÈØÿÿƒÄ…Àuk‰ß9]´}‹}´ƒìhTÃVè9Úÿÿ‰ÃƒÄ…ÛtJƒìGPjèÂÙÿÿ‰E„ƒÄ…Àt&SjWPè^ØÿÿƒÄ…Àuƒì ÿu„è¼ÙÿÿÇE„ƒÄƒì SèùØÿÿƒÄ‹E„eô[^_]ÃvU‰åWVSƒì‹]‰ßü¹ÿÿÿÿ°ò®÷ÑqÿhàÃSè0ÙÿÿƒÄ9ðt5Sƒì èÌùÿÿƒÄ Ph@Äÿ5ÈÖèl×ÿÿƒÄÿ5ÈÖè~×ÿÿ¸é‰ßü¹ÿÿÿÿ°ò®÷Ѹ€| þ.te‰ß¹ÿÿÿÿ°ò®÷Ѹ€| þ,tLƒìj.SèæÖÿÿƒÄ…Àu¸ë3¸€;.t)€;-t$€;,tƒþ~ƒìj/Sè$ØÿÿƒÄ‰Â¸…Ò”Àeô[^_]ÃU‰åWVSƒì ‹U¾ƒ} tE…ÒtA»0Õ‰ßü¹ÿÿÿÿ°ò®ƒùþt+‰×¹ÿÿÿÿò®ƒùþtƒìÿu RSƒì èÉøÿÿƒÄ Ph|Äë]‰öƒ} t"»0Õ‰ßü¹ÿÿÿÿ°ò®ƒùþt ƒì ÿu Së%vƒ} t>…Òt:‰×ü¹ÿÿÿÿ°ò®ƒùþt)ƒì ÿu Rƒì èjøÿÿƒÄ Ph‰Äÿ5ÈÖè ÖÿÿƒÄ ë%ƒìèHøÿÿƒÄ Ph Äÿ5ÈÖèèÕÿÿ¾ƒÄƒì ÿ5ÈÖèòÕÿÿ‰ðeô[^_]ÃU‰åWVSƒì ‹u‹]…ötƒ} u ¸ÿÿÿÿéõ‰÷ü¹ÿÿÿÿ°ò®¸ÿÿÿÿƒùþ„Ú‰÷¹ÿÿÿÿ°ò®÷ÑA¸ÿÿÿÿ9M‚¾ƒìÿujSè`×ÿÿƒÄVSè¶×ÿÿƒÄhÊÄSèHÖÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈPÿu SèèÔÿÿ‰$è`Õÿÿ‰EðƒÄ…Àtc‰ßü¹ÿÿÿÿ°ò®‰Ê÷ÒJ‰÷¹ÿÿÿÿò®÷Ñ9ÊvC‰÷¹ÿÿÿÿò®‰È÷ÐTÿ‰ß¹ÿÿÿÿ°ò®÷щMð‰÷¹ÿÿÿÿò®MðÑéÆDƒì SèùÔÿÿ‰EðƒÄ‹Eðeô[^_]ÃU‰åWS‹U…Ò„–‰×ü¹ÿÿÿÿ°ò®ƒùþ„‰Óë`vŠSBÎ<wRˆÑÁá¾C‹ÌÖŠ‚BÐ< w L ÐëvB¿L É<w%ˆ C€{tƒìCPSèÖÿÿƒÄë ‰öÆë!vC…Ût€;tƒìj%SèÛÓÿÿƒÄ‰Ã…Ûu†eø[_]ÃvU‰åWVSì`‹}‹] SWèÓÿÿ‰ÆƒÄ…öt1ƒìèÔÿÿƒÄÿ0SWhàÄèŸÿÿSèæÕÿÿƒÄShÅèÜüÿÿƒÄ‰ðeô[^_]ÃvU¡@Õ‰åSƒìƒøÿ»@Õtv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[Ãvè÷Õÿÿ‹]üÉÃdumphostsvc: invalid argument BBHOMEdumphostsvc: BBHOME is invalid - %s %s/webdumphostsvc: BBHOME is undefined BBWEBdumphostsvc: BBWEB is undefined dumphostsvc: file not found - %s dumphostsvc: invalid file - %s dumphostsvc: invalid file mode - %s %s_header%s_footerdumphostsvc: out of memory rdumphostsvc: can't open file - %s dumphostsvc: error while reading - %s BBACKSWEBHISTORYCGIBINURLBBSKINgifsLOGTIMELOGTIME not set%s/%s%s/hostsvc_headerr%s/hostsvc_footer&BBDATE%s/bkg-%s.gif&BBBACKGROUND&BBWEBWed, 15 May 2002 11:00:00 GMT&BBRELDATE1.9c&BBREL&BBCOLOR&BBHOST&BBSVC&BBIPNAME&BBIP&BBSKIN&CGIBINURL&LOGTIME

bbd is out of memory ... investigate



was not found, please create this file with your custom header

MKBBROWFONTMKBBCOLFONTMKBBACKFONTDOTHEIGHTDOTWIDTH

 
%s - %s

/ack..%s %s %s %s %sCurrent acknowledgement by - comment: This event has been acked-ackgreenredyellowpurpleclearblue&green&red&yellow&purple&clear&blue


%s
%s

%s
TRUE



HISTORY


was not found, please create this file with your custom footer

%d.%d.%d.%dBBHOSTSr%s %sFQDNTRUE0.0.0.0redpurpleyellowgreenblueclear ^(%s)$^%s%s$[.,]..**([_])]*%s/%saCan't touch %s %swabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:%s bbd FILENAME CONSTAINS INVALID CHARACTERS - IGNORED: %s %s %s %s %s %s %s %s %s bbutils bb_errmsg() invalid arguments =Could not rename %s to %s - errno: %d bb_renameLÕdumphostsvcÿÿÿÿÿÿÿÿÖ2ŠBŠRŠbŠrŠ‚Š’Š¢Š²ŠŠÒŠâŠòŠ‹‹"‹2‹B‹R‹b‹r‹‚‹’‹¢‹²‹‹Ò‹â‹ò‹ŒŒ"Œ2ŒBŒRŒbŒrŒ‚Œ’Œ¢Œ²ŒÂŒÒŒâŒ Š 0·(Ô…”‚ Ö PÕ`¤ˆtˆ0þÿÿo4ˆÿÿÿoðÿÿoʇ¢ƒdd9<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m dinit.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((l7 ”‚”@?Ô…ÔöGÿÿÿoʇÊhTþÿÿo4ˆ4@c tˆtl |ˆ|(u ¤ˆ¤` ~Š „Š ЉðŒð @*0·07•`·`7À  Õ E£<Õ¬<Šž¿0¯Ý ÏLŠÁᄶ] ëÀÖÖ\ŠD"lŠ"C¨«Ü O`·VÀ± _|Š-rŒŠ „œŠ–¬Šx©°³ ³|¦K ÄH§Ô Ó´´  ݼŠ“ïÌŠ Ø’, l¤¹ Š &ÜŠp8 7HìŠYüŠ¬"|ÄÖŽÈÖ  ‹/³‹DÃ0Õ ÊðŒ Ñ,‹@â­T ì<‹ÂþÌÖIJë '„¬B 4L‹ÅG©‰ Q$7\°Öñÿhð  mX±h w”f Ȧ –\‹Ê³°h ¿l‹]Ò|‹ªä Õ ïŒ‹20·œ‹q¬‹˜+¼‹¹>¸° IÌ‹-ZÜ‹~nì‹"Šü‹Ð(7­ ŒüÀŒ®Ò,Œâ<ŒÀôLŒ-°Öñÿ PÕ#\Œô307ñÿ8d­„ >‘Ø HlŒ>Y(¦S i|Œh{ÐÖx°> ›ð±Ñ ¤ŒŒœ·œŒ Èd·×¬Œ-꼌dü Õ а… è¦_ ÌŒ¸3,7>Ôµ­ Nè®$ Y hÜŒ‹initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__dumphostsvc.cdohostsvc.cbbacksdirwebhistorycgibinurlbbskinlogtimeheadnamefootnameutils.cworktimestr.0gettimestrappendfilestrtoupperrename@@GLIBC_2.0strncat@@GLIBC_2.0getdirnextentrystrchr@@GLIBC_2.0bb_rename__ctype_tolower@@GLIBC_2.0_DYNAMICregexec@@GLIBC_2.0__register_frame_info@@GLIBC_2.0getcolornum_fp_hwsavefilefprintf@@GLIBC_2.0getenv@@GLIBC_2.0fflush@@GLIBC_2.0regfree@@GLIBC_2.0bb_errmsgstriptrailspacesgetlinebbhostsbb_putenvputenv@@GLIBC_2.0__errno_location@@GLIBC_2.0getfooterreplacestr_initmalloc@@GLIBC_2.0headerpage_sizefread@@GLIBC_2.0__deregister_frame_info@@GLIBC_2.0stdout@@GLIBC_2.0stderr@@GLIBC_2.0__xstat@@GLIBC_2.0time@@GLIBC_2.0bbprog_startfgets@@GLIBC_2.0space_sepstrstr@@GLIBC_2.0__ctype_toupper@@GLIBC_2.0valid_lognameclean_stringstrncmp@@GLIBC_2.0getipaddrheaderpage__bss_startmainwritefiledohostsvcstripleadtrailspaces__libc_start_main@@GLIBC_2.0getdirfirstrealloc@@GLIBC_2.0strcat@@GLIBC_2.0data_startprintf@@GLIBC_2.0_finimemcpy@@GLIBC_2.0fclose@@GLIBC_2.1strrchr@@GLIBC_2.0getdirdonectime@@GLIBC_2.0closedir@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3opendir@@GLIBC_2.0footerpage_sizeregcomp@@GLIBC_2.0strspn@@GLIBC_2.0exit@@GLIBC_2.0calloc@@GLIBC_2.0sscanf@@GLIBC_2.0_edata_GLOBAL_OFFSET_TABLE_free@@GLIBC_2.0_endmatchgetheaderutime@@GLIBC_2.0stripleadspacesmemset@@GLIBC_2.0__ctype_b@@GLIBC_2.0getdirnextreadfilestrncpy@@GLIBC_2.0fopen@@GLIBC_2.1_IO_stdin_usedsprintf@@GLIBC_2.0fwrite@@GLIBC_2.0__data_starttouchtimevalid_ipaddrreaddir@@GLIBC_2.0footerpageconvert_web_strstrtolower__gmon_start__strcpy@@GLIBC_2.0./bb/bb19c/bin/getipaddr0100755002342100007640000005646707616533072012726 0ustar bbbbELF0Œ4`H4 (44€4€ÀÀôô€ô€€€ " " " ² ²„à!„#„³„³   /lib/ld-linux.so.2GNU%0 (.&* ,/ #"%'-)!   $+˜‰>⨉ž~¸‰ÁŽ@´ÿȉDž؉"—è‰-8ø‰ cŠvŠxz(Š“28ŠTHŠpêXŠ¬hŠ¬"#D´*xŠ/ˆŠD?˜Š@ĨŠÂjH´˸ŠÅdȊʥ؊ª!èŠ2øŠ˜ˆ‹¹Ÿ‹-…(‹~E8‹" H‹ÐðX‹ü]h‹®Cx‹ˆ‹ÀÛ˜‹-´¨‹ô(¸‹>øÈ‹h.L´ÓØ‹œHè‹ N¤ ø‹-[Œ¸ Œ‹__gmon_start__libc.so.6strcpyprintfutime__ctype_bgetenvfgets__cxa_finalizemallocreaddirfflush__ctype_toupperputenvrenamestrrchrcallocfprintfctimestrcat__deregister_frame_infostrstrstrncmpstrncpysscanfstrncatfreadregcompmemsetregexectimeopendirsprintffclosestderr__xstat__errno_locationexitfopen_IO_stdin_usedstrspn__libc_start_mainregfreestrchrclosedir__ctype_tolower__register_frame_infofreeGLIBC_2.1.3GLIBC_2.1GLIBC_2.0si ¹ii Åii Ï€³.@´D´H´L´(ܲà²ä²è²ì²ð²ô²ø² ü² ³ ³ ³ ³³³³³ ³$³(³,³0³4³8³<³@³D³H³L³ P³!T³"X³#\³$`³%d³&h³'l³)p³*t³,x³-|³/U‰åƒìèÙèoèªÉÃÿ5Ô²ÿ%زÿ%ܲhéàÿÿÿÿ%à²héÐÿÿÿÿ%ä²héÀÿÿÿÿ%è²hé°ÿÿÿÿ%ì²h é ÿÿÿÿ%ð²h(éÿÿÿÿ%ô²h0é€ÿÿÿÿ%ø²h8épÿÿÿÿ%ü²h@é`ÿÿÿÿ%³hHéPÿÿÿÿ%³hPé@ÿÿÿÿ%³hXé0ÿÿÿÿ% ³h`é ÿÿÿÿ%³hhéÿÿÿÿ%³hpéÿÿÿÿ%³hxéðþÿÿÿ%³h€éàþÿÿÿ% ³hˆéÐþÿÿÿ%$³héÀþÿÿÿ%(³h˜é°þÿÿÿ%,³h é þÿÿÿ%0³h¨éþÿÿÿ%4³h°é€þÿÿÿ%8³h¸épþÿÿÿ%<³hÀé`þÿÿÿ%@³hÈéPþÿÿÿ%D³hÐé@þÿÿÿ%H³hØé0þÿÿÿ%L³hàé þÿÿÿ%P³hèéþÿÿÿ%T³hðéþÿÿÿ%X³høéðýÿÿÿ%\³héàýÿÿÿ%`³héÐýÿÿÿ%d³héÀýÿÿÿ%h³hé°ýÿÿÿ%l³h é ýÿÿÿ%p³h(éýÿÿÿ%t³h0é€ýÿÿÿ%x³h8épýÿÿÿ%|³h@é`ýÿÿ1í^‰áƒäðPTRhp hp‰QVh0èwþÿÿô‰öU‰åSPè[Ãr&‹ƒ°…ÀtÿЋ]üÉÉöU‹¬²‰åƒì…ÒuI‹¨²‹…Àtt&B£¨²ÿ‹¨²‹ …Éuê¸hŠ…Àtƒì h¼²èœýÿÿƒÄ¸£¬²‰ì]ÃvU‰åƒì‰ì]öU‰å¸Ø‰ƒì…ÀtƒìhP´h¼²èÇüÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰åVSì ‹] ¹‹Eƒèƒøv ƒì jè þÿÿ‹S¶ƒè-u ¶Bƒèfu¶B…Àu¹AÿPh µøßÿÿVÿ4‹è׃Ļ…À”ÃKƒãVh« è;ýÿÿ‰$èÃýÿÿvU‰åWVSƒì ‹]ÇEì‰]ð…Ûtƒ}tƒ}t ƒ} …Ù¸éw‰öƒ}ìu*ƒì ÿu èCüÿÿ‰EìƒÄ…À„ƒìÿu jPè§ýÿÿƒÄ9Þt@Æ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰È÷ÐTþ‹E H9ÂÃìSÿuìèsüÿÿƒÄ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷Ò‹}¹ÿÿÿÿò®‰Ë‰Ø÷ÐTþ‹E H9ƒƒìÿuÿuìè1üÿÿ‹}ü¹ÿÿÿÿ°ò®‰Ê‰Ð÷Ð\ÿƒÄƒìÿuSèÛûÿÿƒÄ‰Æ…ö…ÿÿÿƒ}ì„€‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰Î‰ð÷ÐTþ‹E H9Â~,ë ‰ö¸ëNƒìÿuìÿuðèîüÿÿƒÄÿuìèsüÿÿ¸ë-ƒìSÿuìèûÿÿƒÄÿuìÿuðèÂüÿÿƒÄÿuìèGüÿÿƒÄ¸eô[^_]ÃvU‰åWS‹]…Ût@‰ßü¹ÿÿÿÿ°ò®ƒùþt/‰Ù¾¡L´‰ÇöDP t A¾öDG uõ9Ët ƒìQSè[üÿÿƒÄeø[_]ÃU‰åWS‹]…Ût;‰ßü¹ÿÿÿÿ°ò®ƒùþt*‰ß¹ÿÿÿÿò®÷ÑL þë‰öÆI9Ùr¾¡L´öDP ué[_]ÃU‰åSƒì‹]SèPÿÿÿ‰$èœÿÿÿ‹]üÉÃvU‰åWƒì‹U‰×ü¹ÿÿÿÿ°ò®÷ÑI¸ƒùw7¸ÿÿÿÿ‰Eì‰Eð‰Eô‰EøƒìEøPEôPEðPEìPhÀ RèûÿÿƒÄ ¸‹}üÉÃU‰åWVSƒìL‹u‹] ÇE´ƒ>u:ƒì hÌ è<ùÿÿ‰ÂƒÄ…Òt$‰×ü¹ÿÿÿÿ°ò®ƒùþtƒìhÔ Rèûÿÿ‰ƒÄƒ>„MƒìÿujSèÈúÿÿƒÄE؉E°EȉE¬E¸‰E¨é ‰öÇE´éƒì Sèãþÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþ„Û€; „Ò€;#„É÷Eu¸÷E„¢¾¡L´öDP„ÇEØÇEÜÇEàÇEäÇEÈÇEÌÇEÐÇEÔÇE¸ÇE¼ÇEÀÇEăìjSÿu°èòùÿÿƒÄÿu¨ÿu¬hÖ ÿu°èœùÿÿƒÄÿu¬è-þÿÿƒÄƒø„ ÿÿÿƒìÿujSè§ùÿÿƒÄƒìÿ6‹EHPSèdøÿÿƒÄ…À…éþÿÿƒ>tƒ}´uƒì ÿ6è¤øÿÿǃċE´eô[^_]ÃU‰åWVSì@¸ƒ}„f‹}ü¹ÿÿÿÿ°ò®¸ƒùþ„K‹}¹ÿÿÿÿ°ò®÷ÑI‹EH9Áƒ+ƒìÿuÿu èQùÿÿÇ$Ì è%÷ÿÿƒÄ…À„ƒìhÔ Pèüøÿÿ‰…ä¿ÿÿƒÄ…À„ç颉öƒ½à¿ÿÿ„{è¿ÿÿ‰ßü¹ÿÿÿÿ°ò®¸ùÿßÿÿ”ÀH!…à¿ÿÿƒì Sè3üÿÿ¾•è¿ÿÿ¡L´ƒÄöDP„S‰Ù‰ÂA¾öDBuõ€9.tð‰Â¡L´öDP „,ÆAƒìQèßÿÿSè‚øÿÿ‰$èÖûÿÿÇ…Ü¿ÿÿÇ$Ü èDöÿÿƒÄ…Àt#‰Æ¿á ¹üó¦—Â’À8Âu Ç…Ü¿ÿÿ‹}ü¹ÿÿÿÿ°ò®÷ÑqÿèßÿÿƒìVÿuSèµöÿÿƒÄ…À…  ƒ½Ü¿ÿÿt¾¡L´öDP u €9të~¾¡L´öDP u €9t€9.ue…è¿ÿÿ‰Æ¿æ ¹üó¦—Â’À8Âuƒ}tƒì…è¿ÿÿPÿu è˜÷ÿÿƒÄ¸ë_‰ö½è¿ÿÿü¹ÿÿÿÿ°ò®ùÿßÿÿt Ç…à¿ÿÿƒìÿµä¿ÿÿhÿ…è¿ÿÿPèÐõÿÿƒÄ…À…1þÿÿƒì ÿµä¿ÿÿèöÿÿƒÄ¸eô[^_]ÃvU‰åWVS‹]¶ƒèru¶Cƒèeu ¶Cƒèdu¶C…Àu ¸é¢v‰Þ¿ò ¹üó¦—Â’À8Âu¸ë‰Þ¿ù ¹üó¦—Â’À8Âu¸ë_‰Þ¿¡¹üó¦—Â’À8Âu¸ë?‰Þ¿¡¹üó¦—Â’À8Âu¸ë‰Þ¿ ¡¹üó¦—Á’¸8Ñ”À[^_]ÃU‰åVSƒì‹u‹] ŠEˆE÷€;t"ëŠU÷ˆ¾ƒìPVèºóÿÿƒÄ…ÀuçC€;uæeø[^]ÉöU‰åƒìEüPèeôÿÿEü‰$èêôÿÿƒÄPh€´èÜõÿÿƒÄj h€´èmóÿÿƒÄ…ÀtƸ€´ÉÃU‰åWS‹]€;tv¾¡L´öDP tÆ C€;uèh¡h¡‰ßü¹ÿÿÿÿ°ò®÷ÑIQSè÷ÿÿ¸eø[_]ÃU‰åWVSƒì4‹} ü¹ÿÿÿÿ°ò®÷ѱÿVjè²ôÿÿ‰ÃƒÄ¸…Û„D÷Etƒìÿu h¡SèöôÿÿëD÷Etƒìÿu h¡SèÚôÿÿë(÷Etƒìÿu h!¡Sè¾ôÿÿë ƒìÿu SèÐôÿÿƒÄ¿ ÷Et¿ ÷Eth%¡h*¡VSè@öÿÿh,¡h/¡ë@h1¡h7¡VSè#öÿÿh/¡h,¡VSèöÿÿƒÄ h,¡h/¡VSèþõÿÿh7¡h1¡VSèíõÿÿƒÄ ƒìWSEÈPè|óÿÿƒÄ…Àtƒì Sè¼óÿÿ¸ë9ƒì Sè«óÿÿÇ$jjÿu]ÈSè´ñÿÿ‰ÆƒÄSèùñÿÿƒÄ¸…ö”Àeô[^_]ÃU‰å‹M…Éë‰ö¾‹@´‹‚ˆAt€9uê]ÃU‰å‹M…Éë‰ö¾‹H´‹‚ˆAt€9uê]ÃU‰åWVSìl ‹}ǵˆßÿÿé˜C Pÿu h:¡VèJóÿÿEˆƒÄ PVjè»ñÿÿƒÄ…Àupfƒ}˜yÇ÷E u)ëXöE™@tÇ÷E uëAÇ÷Et1ƒìjÿuƒÃ SèœýÿÿƒÄ…ÀtƒìSÿuèñòÿÿƒÄ¸ë vƒì ÿuèÉòÿÿ‰ÃƒÄ…Û…Pÿÿÿ¸eô[^_]ÃvU‰åWVSƒì‹}‹u Vè×ñÿÿ‰ÃƒÄ¸…Ût=ƒìÿuÿuÿuÿuVSèçþÿÿƒÄ ƒøu ‰¸ë‰öƒì SèwñÿÿǸeô[^_]ÃU‰åƒì‹E…Àu¸ë(ƒìÿuÿuÿuÿuÿu PèŒþÿÿ‰ÂƒÄ ¸ƒú”ÀÉÉöU‰åƒì‹E…Àt ƒì PèñÿÿÉÃU‰åVSƒì‹u‹] [›ÁãEôPèLðÿÿ؉Eô‰Eè‰EìƒÄh@¡Vè“ñÿÿƒÄ…Àtƒì Pè“ðÿÿƒÄë‰öƒìVhB¡ÿ5D´èhïÿÿ¸ëƒìEèPVè#ñÿÿ¸eø[^]ÃvU‰åWS‹U‹] …ÒtM…ÛtI‰×ü¹ÿÿÿÿ°ò®¸ƒùþt8ƒìÿuRèñÿÿ‰ÇƒÄ…ÿtƒìShR¡Wè÷îÿÿ‰<$èÿïÿÿ¸ë¸eø[_]ÃU‰åƒì hU¡ÿu ÿuè‚ÿÿÿÉÃU‰åƒì h@¡ÿu ÿuèjÿÿÿÉÃU‰åWVSƒì|‹u‹] ÇE„¸…ö„¦‰÷ü¹ÿÿÿÿ°ò®¸ƒùþ„Œ…ÛŽ„EˆƒìPVjèèîÿÿƒÄ…Àuk‰ß9]´}‹}´ƒìhÔ Vè9ðÿÿ‰ÃƒÄ…ÛtJƒìGPjèÂïÿÿ‰E„ƒÄ…Àt&SjWPè~îÿÿƒÄ…Àuƒì ÿu„è¼ïÿÿÇE„ƒÄƒì SèùîÿÿƒÄ‹E„eô[^_]ÃvU‰åWVSƒì‹]‰ßü¹ÿÿÿÿ°ò®÷Ñqÿh`¡Sè0ïÿÿƒÄ9ðt5Sƒì èÌùÿÿƒÄ PhÀ¡ÿ5D´èŒíÿÿƒÄÿ5D´èžíÿÿ¸é‰ßü¹ÿÿÿÿ°ò®÷Ѹ€| þ.te‰ß¹ÿÿÿÿ°ò®÷Ѹ€| þ,tLƒìj.SèíÿÿƒÄ…Àu¸ë3¸€;.t)€;-t$€;,tƒþ~ƒìj/Sè$îÿÿƒÄ‰Â¸…Ò”Àeô[^_]ÃU‰åWVSƒì ‹U¾ƒ} tE…ÒtA»°²‰ßü¹ÿÿÿÿ°ò®ƒùþt+‰×¹ÿÿÿÿò®ƒùþtƒìÿu RSƒì èÉøÿÿƒÄ Phü¡ë]‰öƒ} t"»°²‰ßü¹ÿÿÿÿ°ò®ƒùþt ƒì ÿu Së%vƒ} t>…Òt:‰×ü¹ÿÿÿÿ°ò®ƒùþt)ƒì ÿu Rƒì èjøÿÿƒÄ Ph ¢ÿ5D´è*ìÿÿƒÄ ë%ƒìèHøÿÿƒÄ Ph ¢ÿ5D´èìÿÿ¾ƒÄƒì ÿ5D´èìÿÿ‰ðeô[^_]ÃU‰åWVSƒì ‹u‹]…ötƒ} u ¸ÿÿÿÿéõ‰÷ü¹ÿÿÿÿ°ò®¸ÿÿÿÿƒùþ„Ú‰÷¹ÿÿÿÿ°ò®÷ÑA¸ÿÿÿÿ9M‚¾ƒìÿujSè`íÿÿƒÄVSè¦íÿÿƒÄhJ¢SèXìÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈPÿu Sèëÿÿ‰$è€ëÿÿ‰EðƒÄ…Àtc‰ßü¹ÿÿÿÿ°ò®‰Ê÷ÒJ‰÷¹ÿÿÿÿò®÷Ñ9ÊvC‰÷¹ÿÿÿÿò®‰È÷ÐTÿ‰ß¹ÿÿÿÿ°ò®÷щMð‰÷¹ÿÿÿÿò®MðÑéÆDƒì Sèëÿÿ‰EðƒÄ‹Eðeô[^_]ÃU‰åWS‹U…Ò„–‰×ü¹ÿÿÿÿ°ò®ƒùþ„‰Óë`vŠSBÎ<wRˆÑÁá¾C‹H´Š‚BÐ< w L ÐëvB¿L É<w%ˆ C€{tƒìCPSèìÿÿƒÄë ‰öÆë!vC…Ût€;tƒìj%SèûéÿÿƒÄ‰Ã…Ûu†eø[_]ÃvU‰åWVSì`‹}‹] SWè¯éÿÿ‰ÆƒÄ…öt1ƒìè>êÿÿƒÄÿ0SWh`¢èŸÿÿSèæëÿÿƒÄSh‡¢èÜüÿÿƒÄ‰ðeô[^_]ÃvU¡À²‰åSƒìƒøÿ»À²tv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[ÃVvè÷ëÿÿ‹]üÉÃ-f%s%d.%d.%d.%dBBHOSTSr%s %sFQDNTRUE0.0.0.0redpurpleyellowgreenblueclear ^(%s)$^%s%s$[.,]..**([_])]*%s/%saCan't touch %s %swabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:%s bbd FILENAME CONSTAINS INVALID CHARACTERS - IGNORED: %s %s %s %s %s %s %s %s %s bbutils bb_errmsg() invalid arguments =Could not rename %s to %s - errno: %d bb_rename̲getipaddrÿÿÿÿÿÿÿÿ„³ž‰®‰¾‰ΉÞ‰î‰þ‰ŠŠ.Š>ŠNŠ^ŠnŠ~ŠŽŠžŠ®Š¾ŠΊÞŠîŠþŠ‹‹.‹>‹N‹^‹n‹~‹Ž‹ž‹®‹¾‹΋Þ‹î‹þ‹ŒŒ p‰ p („…„‚ ¹ вH(ˆˆ(þÿÿoÀ‡ÿÿÿoðÿÿo^‡¢ƒdTŒdTŒ9<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m dTŒinit.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((\7 „‚„?„…„ÙGÿÿÿo^‡^`TþÿÿoÀ‡À@c ˆl ˆ u (ˆ(H ~p‰p „ˆ‰ˆ  ‰0Œ0 @p p •      ² "£¼²¼"­À²À"´ȲÈ"»вÐ"´À„³„# É$´@$Ï@´@$@ Ô@$¤ Úä+ƒãgEzìáFŒmGò8Mp ? ¨Vô€(„‚„…^‡À‡ˆˆ (ˆ p‰ ˆ‰ 0Œ p    ²¼²À²Ȳв„³$´@´ñÿ TŒ TŒ +ñÿ2ñÿ €Œ =¨²AȲO¬²[€Œ q¼²„àŒ P´˜ðŒ ¤  ¯°²½À²2ñÿ 0  Ë0  áIJ¤`  ¯¼²î̲û¼²ñÿ p  ñÿ 0 ñÿ ¸ €´ +–H 6$› AX˜$ L˜‰>^¨‰žq|˜Ý ¸‰Á“П] @´¸„³ÁȉDÔ؉"õô”Ü    › è‰-$ø‰ 6ŠHŠx[üœ eÈK v”Ô …ž  (Š“¡8Š½¸¹ Èp‰ ÎHŠpàXŠñhŠ¬"D´&xŠ/9ˆŠDI°² P0Œ W˜Š@h\–T r¨ŠÂ„H´Ÿœë ­ЕB º¸ŠÅÍh’‰ ×$´ñÿã0… 褚h ò ÈŠÊ$\™h 0ØŠªB ² MèŠ2_p eøŠ˜w‹¹Šš •‹-¦(‹~º8‹"ÖH‹ÐéX‹üüh‹®x‹ˆ‹À0˜‹-B$´ñÿIв_¨‹ôo€Ôñÿt°–„ z¸‹>‹tS ›È‹h­L´ÂÄ™> Í<›Ñ ÖØ‹œéè‹ ú¤  ø‹- ²)š… 34_ @Œ¸S Ÿ­ c4˜$ n }Œ‹initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__getipaddr.cutils.cworktimestr.0gettimestrappendfilestrtoupperrename@@GLIBC_2.0strncat@@GLIBC_2.0getdirnextentrystrchr@@GLIBC_2.0bb_rename__ctype_tolower@@GLIBC_2.0_DYNAMICregexec@@GLIBC_2.0__register_frame_info@@GLIBC_2.0getcolornum_fp_hwsavefilefprintf@@GLIBC_2.0getenv@@GLIBC_2.0fflush@@GLIBC_2.0regfree@@GLIBC_2.0bb_errmsgstriptrailspacesgetlinebbhostsbb_putenvputenv@@GLIBC_2.0__errno_location@@GLIBC_2.0replacestr_initmalloc@@GLIBC_2.0fread@@GLIBC_2.0__deregister_frame_info@@GLIBC_2.0stderr@@GLIBC_2.0__xstat@@GLIBC_2.0time@@GLIBC_2.0bbprog_startfgets@@GLIBC_2.0space_sepstrstr@@GLIBC_2.0__ctype_toupper@@GLIBC_2.0valid_lognameclean_stringstrncmp@@GLIBC_2.0getipaddr__bss_startmainwritefilestripleadtrailspaces__libc_start_main@@GLIBC_2.0getdirfirststrcat@@GLIBC_2.0data_startprintf@@GLIBC_2.0_finifclose@@GLIBC_2.1strrchr@@GLIBC_2.0getdirdonectime@@GLIBC_2.0closedir@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3opendir@@GLIBC_2.0regcomp@@GLIBC_2.0strspn@@GLIBC_2.0exit@@GLIBC_2.0calloc@@GLIBC_2.0sscanf@@GLIBC_2.0_edata_GLOBAL_OFFSET_TABLE_free@@GLIBC_2.0_endmatchutime@@GLIBC_2.0stripleadspacesmemset@@GLIBC_2.0__ctype_b@@GLIBC_2.0getdirnextreadfilestrncpy@@GLIBC_2.0fopen@@GLIBC_2.1_IO_stdin_usedsprintf@@GLIBC_2.0__data_starttouchtimevalid_ipaddrreaddir@@GLIBC_2.0convert_web_strstrtolower__gmon_start__strcpy@@GLIBC_2.0./bb/bb19c/bin/bbstat0100755002342100007640000004151607616533072012227 0ustar bbbbELFÐ…464 (44€4€ÀÀôô€ô€€€    ¡ ¡0˜˜¡˜¡   /lib/ld-linux.so.2GNU   µÔ„"(ä„ Vô„p]…¬"|…DA$…@/4…«£D…Ê!T…2Gd…"‰t…u„…-Ž”… ”D¤…- ´…‹__gmon_start__libc.so.6strcpyprintfgetenv__strtol_internalfgets__cxa_finalizemalloc__deregister_frame_infosscanftimesprintfexitfopen_IO_stdin_used__libc_start_main__register_frame_infoGLIBC_2.1GLIBC_2.1.3GLIBC_2.0ii Ësi Õii ᔡX¡\¡`¡d¡h¡l¡p¡t¡x¡ |¡ €¡ „¡ ˆ¡ Œ¡¡U‰åƒìè=èÓè ÉÃÿ5P¡ÿ%T¡ÿ%X¡héàÿÿÿÿ%\¡héÐÿÿÿÿ%`¡héÀÿÿÿÿ%d¡hé°ÿÿÿÿ%h¡h é ÿÿÿÿ%l¡h(éÿÿÿÿ%p¡h0é€ÿÿÿÿ%t¡h8épÿÿÿÿ%x¡h@é`ÿÿÿÿ%|¡hHéPÿÿÿÿ%€¡hPé@ÿÿÿÿ%„¡hXé0ÿÿÿÿ%ˆ¡h`é ÿÿÿÿ%Œ¡hhéÿÿÿÿ%¡hpéÿÿÿ1í^‰áƒäðPTRhh¬„QVh ‡èSÿÿÿô‰öU‰åSPè[ÃN‹ƒH…ÀtÿЋ]üÉÉöU‹,¡‰åƒì…ÒuI‹(¡‹…Àtt&B£(¡ÿ‹(¡‹ …Éu긅…Àtƒì h8¡è˜þÿÿƒÄ¸£,¡‰ì]ÃvU‰åƒì‰ì]öU‰å¸Ô„ƒì…Àtƒìh8¢h8¡è#þÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰åWVS‹]‰Þ¿`¹üó¦—Â’À8„ƒ‰Þ¿f¹ó¦—Â’À8Âtk¶ƒèru¶Cƒèeu ¶Cƒèdu¶C…ÀtI‰Þ¿q¹üó¦—Â’À8Ât0‰Þ¿x¹ó¦—Â’À8Ât‰Þ¿~¹ó¦—Â’À8Âu ƒ} xƒ}$y¸ë¸‹U 9U$žÀ[^_]ÃU‰åWVS쨋}‹u Ç…ÌïÿÿÇ…ÈïÿÿaÇ…¬ïÿÿÇ…°ïÿÿÇ…´ïÿÿÇ…¸ïÿÿÇ…¼ïÿÿÇ…ÀïÿÿÇ…”ïÿÿÇ…˜ïÿÿÇ…œïÿÿÇ… ïÿÿÇ…¤ïÿÿÇ…¨ïÿÿhè¬üÿÿ‰…tïÿÿÇ$èšüÿÿ‰…pïÿÿÇ$èˆüÿÿ‰…lïÿÿÇ$èvüÿÿ‰…hïÿÿÇ$èdüÿÿ‰…dïÿÿÇ$èRüÿÿ‰…`ïÿÿƒÄƒÿt ƒì jèºüÿÿ‰öjj jÿvèjüÿÿƒÄ‰…Ôïÿÿjj jÿv èSüÿÿ‰…Ðïÿÿ…äïÿÿ‰$èüÿÿ‰…äïÿÿƒÄ‹•Ðïÿÿ9Ð}‰…Ðïÿÿƒì hèÙûÿÿ‰ÃÇ$èËûÿÿ‰…ÄïÿÿÇ$ƒè©ûÿÿƒÄ…Àt$jj jPèæûÿÿƒÄ‰…Èïÿÿƒødv Ç…ÈïÿÿaÿvƒìhènûÿÿƒÄ Ph”µèïÿÿVèüÿÿÇ…XïÿÿÇ…\ïÿÿšƒÄhVèçûÿÿ‰…ØïÿÿƒÄ…À…‡ƒì jè¬ûÿÿÇ…àïÿÿÇ…Üïÿÿ‹•dïÿÿÆ‹…hïÿÿÆ‹•lïÿÿÆ‹…pïÿÿÆ‹•tïÿÿƃì…àïÿÿP…ÜïÿÿPÿµ`ïÿÿÿµdïÿÿÿµhïÿÿÿµlïÿÿÿµpïÿÿRh Sè@ûÿÿ‰ÁƒÄ0ƒ½Ìïÿÿu^‹…Ðïÿÿ9…Üïÿÿ~,‹…`ïÿÿÇcleafÇ@rÇ…àïÿÿÇ…XïÿÿéÙ‹•Ôïÿÿ9•Üïÿÿ~ ‹…Üïÿÿ‰…ÔïÿÿÇ…ÌïÿÿƒùuwƒìSÿµÄïÿÿèðúÿÿƒÄ ÿµØïÿÿhÿSèLúÿÿƒÄ…ÀtÇ…\ïÿÿÊéÚþÿÿ‰öƒìÿµÄïÿÿSèµúÿÿƒÄ‹•Ðïÿÿ;•Üïÿÿ~‰Ð+…Üïÿÿ‰…àïÿÿëÇ…àïÿÿëƒùu<ÿµàïÿÿÿµÜïÿÿÿµ`ïÿÿÿµdïÿÿÿµhïÿÿÿµlïÿÿÿµpïÿÿÿµtïÿÿèjûÿÿƒÄ …ÀuÇ…\ïÿÿÊéÉ‹…Üïÿÿ…àïÿÿ;…ÔïÿÿŽ±‹•Ôïÿÿ9•Üïÿÿ})Љ…àïÿÿ‰•Üïÿÿ‹…Ôïÿÿ9…ÜïÿÿŒu‹•Ðïÿÿ9•Üïÿÿc‹•Üïÿÿ‰Ð…àïÿÿ;…Ðïÿÿ~‹…Ðïÿÿ)Љ…àïÿÿ‹µ`ïÿÿ¿`¹üó¦—Â’À8Âu‹…àïÿÿ…¸ïÿÿÿ… ïÿÿé ‹•`ïÿÿ¶ƒèru¶Bƒèeu ¶Bƒèdu¶B…Àu‹…àïÿÿ…Àïÿÿÿ…¨ïÿÿéÌ‹µ`ïÿÿ¿f¹üó¦—Â’À8Âu‹•àïÿÿ•¼ïÿÿÿ…¤ïÿÿé—‹µ`ïÿÿ¿x¹üó¦—Â’À8Âu‹…àïÿÿ…°ïÿÿÿ…˜ïÿÿëfv‹µ`ïÿÿ¿q¹üó¦—Â’À8Âu‹•àïÿÿ•´ïÿÿÿ…œïÿÿë2v‹µ`ïÿÿ¿~¹üó¦—Â’À8Âu‹…àïÿÿ…¬ïÿÿÿ…”ïÿÿ‹•Ðïÿÿ9•ÜïÿÿƒìÿµØïÿÿhÿSèË÷ÿÿƒÄ…À…düÿÿ‹Ðïÿÿ+Ôïÿÿ‹…ÀïÿÿºRPß,$XÙïÿÿÙ‘ÙÀ‰ $Ú<$Ù…ïÿÿØñÙïÿÿ‹…¼ïÿÿ‰$Pß,$XØñÙŒïÿÿ‹…¸ïÿÿ‰$Pß,$XØñÙˆïÿÿ‹…°ïÿÿ‰$Pß,$XØñÙ€ïÿÿ‹…¬ïÿÿ‰$Pß,$XØñÙ|ïÿÿ‹…´ïÿÿ‰$Pß,$XZÞñÙ„ïÿÿØ¥ïÿÿÙ•xïÿÿÝ‘ÙÉÚéßàöÄEu!ƒ½Xïÿÿu ƒì hÐë6‰öƒì h×ë*‰öÛ…ÈïÿÿÙ…xïÿÿÚéßàöÄu ƒì hÞë ƒì hæè×öÿÿƒÄƒì Ù…xïÿÿÝ$hëè¾öÿÿƒÄ ÿµÐïÿÿÿµÔïÿÿhñè¥öÿÿƒÄÙ…ïÿÿÝ$hëèöÿÿƒÄÙ…ŒïÿÿÝ$hëèyöÿÿƒÄÙ…ˆïÿÿÝ$hëècöÿÿƒÄÙ…„ïÿÿÝ$hëèMöÿÿƒÄÙ…€ïÿÿÝ$hëè7öÿÿƒÄÙ…|ïÿÿÝ$hëè!öÿÿƒÄÿµ\ïÿÿhøèöÿÿƒÄÿµ¨ïÿÿhüèûõÿÿƒÄÿµ¤ïÿÿhüèèõÿÿƒÄÿµ ïÿÿhüèÕõÿÿƒÄÿµœïÿÿhüèÂõÿÿƒÄÿµ˜ïÿÿhüè¯õÿÿƒÄÿµ”ïÿÿh‘èœõÿÿÇ$è°õÿÿU¡<¡‰åSƒìƒøÿ»<¡tv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[Ã2vè÷õÿÿ‹]üÉÃgreenyellowredpurpleclearblueBBREPWARNBBHIST%s/%sOKrw%256s %256s %256s %256s %256s %256s %d %dNOTOKgreen clear yellow red %.2f %d %d %s %d %d ÈBHáz®ÿX@H¡bbstatÿÿÿÿÿÿÿÿ˜¡Ú„ê„ú„ ……*…:…J…Z…j…z…Š…š…ª…º… ¬„ (Ü‚¼ Ë L¡x4„,„þÿÿoìƒÿÿÿoðÿÿoȃ¢ƒdô…dô…9<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m dô…init.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((”7 ¼¼ ?Ü‚ÜëGÿÿÿoȃÈ$Tþÿÿoìƒì@c ,„,l 4„4x u¬„¬{ĄĀЅÐ@ †Œ@@à ” ¡ š8¡8¤<¡<«D¡D²L¡LL·˜¡˜ À8¢8Æ8¢8Ë8¤ Ñ܃Ú_3Dã£4x5é´: ; T@úô€(¼Ü‚ȃìƒ,„4„ ¬„ Ä„ Ð…  @ ¡8¡<¡D¡L¡˜¡8¢8¢ñÿ ô… ô… +ñÿ2ñÿ † =(¡AD¡O,¡[ † q8¡„€† 8¢˜† ¤À† ¯0¡½<¡2ñÿ Ð ËÐ á@¡¤ ¯8¡îH¡û8¡ñÿ  ñÿ І ІÏ ˜¡'Ô„"H@Oä„ a¬„ gô„py…¬"œ…D¬0¡³Ð… º$…@Ë4…«è8¢ñÿô ‡$ ùD…Ê ¡ !T…23 9d…"Ut…e„…-w8¢ñÿ~L¡”P¢ñÿ™”… ªD¹¤…-Ì ¡Ù è´…‹initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__bbstat.cisvalidline_DYNAMIC__register_frame_info@@GLIBC_2.0_fp_hwgetenv@@GLIBC_2.0_initmalloc@@GLIBC_2.0__deregister_frame_info@@GLIBC_2.0time@@GLIBC_2.0bbprog_startfgets@@GLIBC_2.0__strtol_internal@@GLIBC_2.0__bss_startmain__libc_start_main@@GLIBC_2.0data_startprintf@@GLIBC_2.0_fini__cxa_finalize@@GLIBC_2.1.3exit@@GLIBC_2.0sscanf@@GLIBC_2.0_edata_GLOBAL_OFFSET_TABLE__endfopen@@GLIBC_2.1_IO_stdin_usedsprintf@@GLIBC_2.0__data_start__gmon_start__strcpy@@GLIBC_2.0./bb/bb19c/bin/bbrun0100755002342100007640000006230407616533072012056 0ustar bbbbELF4`O4 (44€4€ÀÀôô€ô€€€ ) ) ) ¹ ¹Œà!Œ*ŒºŒº   /lib/ld-linux.so.2GNU%4,2*.! 03'&")+1-%  $  ( #/¦4Š>DŠž£TŠÁ³@»JdŠ2$tŠDÄŠ"¼”Š-1¤Š ‚´Š›ÄŠxWÔŠ%™äŠ“WôŠ ‹œm‹p$‹Ñ4‹¬"HD»OD‹/,T‹DQd‹@ét‹Ât„‹Ú8”‹«‰H»ð¤‹Å‰´‹ÊÊÄ‹ªAÔ‹˜­ä‹¹Äô‹-ªŒ~^Œ"1$ŒÐ4Œü‚DŒ®hTŒµdŒÀtŒ-Ù„Œô!”Œ>¤Œh'L»ø´ŒœmÄŒ s¤¥9ÔŒ-z䌸 ôŒ‹__gmon_start__libc.so.6strcpyutime__ctype_bgetenv__strtol_internalgetpidfgetspclose__cxa_finalizemallocsleepreaddirfflush__ctype_toupperputenvpopenrenamestrrchrcallocfprintfctimestrcat__deregister_frame_infostrstrstrncmpstrncpysscanfstrncatfreadregcompmemsetregexectimeopendirsprintffclosestderr__xstat__errno_locationexitfopen_IO_stdin_usedstrspn__libc_start_mainregfreestrchrclosedir__ctype_tolower__register_frame_infofreeGLIBC_2.1.3GLIBC_2.1GLIBC_2.0si Þii êii ôˆº2@»D»H»L»,Ô¹عܹà¹ä¹è¹ì¹ð¹ ô¹ ø¹ ü¹ º ºº ººººº º$º(º,º0º4º8º<º@ºDº Hº!Lº"Pº#Tº$Xº%\º&`º'dº(hº)lº*pº+tº-xº.|º0€º1„º3U‰åƒìèè³èÉÃÿ5̹ÿ%йÿ%Ô¹héàÿÿÿÿ%عhéÐÿÿÿÿ%ܹhéÀÿÿÿÿ%à¹hé°ÿÿÿÿ%ä¹h é ÿÿÿÿ%è¹h(éÿÿÿÿ%ì¹h0é€ÿÿÿÿ%ð¹h8épÿÿÿÿ%ô¹h@é`ÿÿÿÿ%ø¹hHéPÿÿÿÿ%ü¹hPé@ÿÿÿÿ%ºhXé0ÿÿÿÿ%ºh`é ÿÿÿÿ%ºhhéÿÿÿÿ% ºhpéÿÿÿÿ%ºhxéðþÿÿÿ%ºh€éàþÿÿÿ%ºhˆéÐþÿÿÿ%ºhéÀþÿÿÿ% ºh˜é°þÿÿÿ%$ºh é þÿÿÿ%(ºh¨éþÿÿÿ%,ºh°é€þÿÿÿ%0ºh¸épþÿÿÿ%4ºhÀé`þÿÿÿ%8ºhÈéPþÿÿÿ%<ºhÐé@þÿÿÿ%@ºhØé0þÿÿÿ%Dºhàé þÿÿÿ%Hºhèéþÿÿÿ%Lºhðéþÿÿÿ%Pºhøéðýÿÿÿ%Tºhéàýÿÿÿ%XºhéÐýÿÿÿ%\ºhéÀýÿÿÿ%`ºhé°ýÿÿÿ%dºh é ýÿÿÿ%hºh(éýÿÿÿ%lºh0é€ýÿÿÿ%pºh8épýÿÿÿ%tºh@é`ýÿÿÿ%xºhHéPýÿÿÿ%|ºhPé@ýÿÿÿ%€ºhXé0ýÿÿÿ%„ºh`é ýÿÿ1í^‰áƒäðPTRhp¥h ŠQVhŽèƒþÿÿô‰öU‰åSPè[Ê,‹ƒÀ…ÀtÿЋ]üÉÉöU‹¬¹‰åƒì…ÒuI‹¨¹‹…Àtt&B£¨¹ÿ‹¨¹‹ …Éuê¸4‹…Àtƒì h´¹èˆýÿÿƒÄ¸£¬¹‰ì]ÃvU‰åƒì‰ì]öU‰å¸„Šƒì…ÀtƒìhP»h´¹è“üÿÿƒÄ‰ì]ô&U‰åƒì‰ì]öU‰åWVS윋M‹] Aþƒøv2ƒìhÀ¥hۥ較Äh¦hÛ¥èªÇ$èúýÿÿ‰öƒùuO‹S¶ƒè-u ¶Bƒèau¶B…Àt3ƒìh&¦hÛ¥èiƒÄh¦hÛ¥èWÇ$è§ýÿÿvƒùuÇ…xïÿÿ‹së Ç…xïÿÿ‹sEˆƒìPVjèdüÿÿƒÄ…Àt!ƒìh7¦hÛ¥èÿÇ$èOýÿÿv‰÷ü¹ÿÿÿÿ°ò®÷ÑIùùv!ƒìhP¦hÛ¥èÇÇ$èýÿÿvƒì hm¦èWûÿÿ‰…€ïÿÿƒÄ…Àuƒìhu¦hÛ¥èŒÇ$èÜüÿÿ‹½€ïÿÿü¹ÿÿÿÿ°ò®ƒùþtjj jÿµ€ïÿÿèöûÿÿƒÄ…Àuƒìh‡¦hÛ¥èAÇ$è‘üÿÿƒì h¡¦èÓúÿÿ‰ÂƒÄ…Òuƒìh§¦hÛ¥è Ç$è\üÿÿ‰×ü¹ÿÿÿÿ°ò®ƒùþuƒìh§¦hÛ¥èÝÇ$ è-üÿÿƒìh·¦RèŽüÿÿ‰ÃƒÄ…Ûu!ƒìhÀ¦hÛ¥è§Ç$ è÷ûÿÿvƒìèüùÿÿƒÄ Phá¦Sèúÿÿ‰$èUûÿÿƒÄ Vh妅ˆûÿÿPè@üÿÿƒìj/VèEûÿÿƒÄ ‰…„ïÿÿ…Àtÿ…„ïÿÿ뉵„ïÿÿ•ˆïÿÿ‰•tïÿÿ‰öƒì jè‚úÿÿ‰…|ïÿÿƒÄhí¦…ˆûÿÿPèúÿÿ‰ÆƒÄ…ö„Ÿ…ˆ÷ÿÿƒìhjPè•ûÿÿƒÄˆ÷ÿÿë\‰öƒ½xïÿÿt'‰ßü¹ÿÿÿÿ°ò®÷ÑÆD þƒìSÿµ„ïÿÿè±ëvƒìShï¦ÿ5D»è4ùÿÿƒÄƒìhjSè1ûÿÿƒÄƒìVhÿSèßùÿÿƒÄ…Àuƒì Vè?ùÿÿëƒìh§ÿ5D»èMƒÄƒì jèœùÿÿ‰Ã+|ïÿÿƒÄjj jÿµ€ïÿÿèÀùÿÿƒÄ9Ù…ÛyLSÿµ„ïÿÿh@§ÿµtïÿÿèÚúÿÿƒÄÿµtïÿÿhÛ¥èë÷ÛƒÄjj jÿµ€ïÿÿèqùÿÿ‰ÁƒÄ‰Ø™÷ù‰Ójj jÿµ€ïÿÿèTùÿÿƒÄ)Ø…À~ƒì ë‰öƒì jj jÿµ€ïÿÿè0ùÿÿƒÄPèùÿÿƒÄéSþÿÿvƒì ÿµ€ïÿÿSÿµ„ïÿÿh€§ÿµtïÿÿè<úÿÿƒÄÿµtïÿÿhÛ¥èMƒÄéþÿÿU‰åWVSƒì ‹]ÇEì‰]ð…Ûtƒ}tƒ}t ƒ} …Ù¸éw‰öƒ}ìu*ƒì ÿu èøÿÿ‰EìƒÄ…À„ƒìÿu jPè‡ùÿÿƒÄ9Þt@Æ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰È÷ÐTþ‹E H9ÂÃìSÿuìècøÿÿƒÄ‹}ìü¹ÿÿÿÿ°ò®‰Ê÷Ò‹}¹ÿÿÿÿò®‰Ë‰Ø÷ÐTþ‹E H9ƒƒìÿuÿuìè!øÿÿ‹}ü¹ÿÿÿÿ°ò®‰Ê‰Ð÷Ð\ÿƒÄƒìÿuSè«÷ÿÿƒÄ‰Æ…ö…ÿÿÿƒ}ì„€‹}ìü¹ÿÿÿÿ°ò®‰Ê÷҉߹ÿÿÿÿò®‰Î‰ð÷ÐTþ‹E H9Â~,ë ‰ö¸ëNƒìÿuìÿuðèÎøÿÿƒÄÿuìèSøÿÿ¸ë-ƒìSÿuìè€÷ÿÿƒÄÿuìÿuðè¢øÿÿƒÄÿuìè'øÿÿƒÄ¸eô[^_]ÃvU‰åWS‹]…Ût@‰ßü¹ÿÿÿÿ°ò®ƒùþt/‰Ù¾¡L»‰ÇöDP t A¾öDG uõ9Ët ƒìQSè;øÿÿƒÄeø[_]ÃU‰åWS‹]…Ût;‰ßü¹ÿÿÿÿ°ò®ƒùþt*‰ß¹ÿÿÿÿò®÷ÑL þë‰öÆI9Ùr¾¡L»öDP ué[_]ÃU‰åSƒì‹]SèPÿÿÿ‰$èœÿÿÿ‹]üÉÃvU‰åWƒì‹U‰×ü¹ÿÿÿÿ°ò®÷ÑI¸ƒùw7¸ÿÿÿÿ‰Eì‰Eð‰Eô‰EøƒìEøPEôPEðPEìPhÀ§RèòöÿÿƒÄ ¸‹}üÉÃU‰åWVSƒìL‹u‹] ÇE´ƒ>u:ƒì ḩèìôÿÿ‰ÂƒÄ…Òt$‰×ü¹ÿÿÿÿ°ò®ƒùþtƒìhÔ§Rèäöÿÿ‰ƒÄƒ>„MƒìÿujSè¨öÿÿƒÄE؉E°EȉE¬E¸‰E¨é ‰öÇE´éƒì Sèãþÿÿ‰ßü¹ÿÿÿÿ°ò®ƒÄƒùþ„Û€; „Ò€;#„É÷Eu¸÷E„¢¾¡L»öDP„ÇEØÇEÜÇEàÇEäÇEÈÇEÌÇEÐÇEÔÇE¸ÇE¼ÇEÀÇEăìjSÿu°èÒõÿÿƒÄÿu¨ÿu¬hÖ§ÿu°è|õÿÿƒÄÿu¬è-þÿÿƒÄƒø„ ÿÿÿƒìÿujSè‡õÿÿƒÄƒìÿ6‹EHPSè4ôÿÿƒÄ…À…éþÿÿƒ>tƒ}´uƒì ÿ6è„ôÿÿǃċE´eô[^_]ÃU‰åWVSì@¸ƒ}„f‹}ü¹ÿÿÿÿ°ò®¸ƒùþ„K‹}¹ÿÿÿÿ°ò®÷ÑI‹EH9Áƒ+ƒìÿuÿu è1õÿÿÇ$̧èÕòÿÿƒÄ…À„ƒìhÔ§PèÜôÿÿ‰…ä¿ÿÿƒÄ…À„ç颉öƒ½à¿ÿÿ„{è¿ÿÿ‰ßü¹ÿÿÿÿ°ò®¸ùÿßÿÿ”ÀH!…à¿ÿÿƒì Sè3üÿÿ¾•è¿ÿÿ¡L»ƒÄöDP„S‰Ù‰ÂA¾öDBuõ€9.tð‰Â¡L»öDP „,ÆAƒìQèßÿÿSèbôÿÿ‰$èÖûÿÿÇ…Ü¿ÿÿÇ$ܧèôñÿÿƒÄ…Àt#‰Æ¿á§¹üó¦—Â’À8Âu Ç…Ü¿ÿÿ‹}ü¹ÿÿÿÿ°ò®÷ÑqÿèßÿÿƒìVÿuSè¥òÿÿƒÄ…À…  ƒ½Ü¿ÿÿt¾¡L»öDP u €9të~¾¡L»öDP u €9t€9.ue…è¿ÿÿ‰Æ¿æ§¹üó¦—Â’À8Âuƒ}tƒì…è¿ÿÿPÿu èxóÿÿƒÄ¸ë_‰ö½è¿ÿÿü¹ÿÿÿÿ°ò®ùÿßÿÿt Ç…à¿ÿÿƒìÿµä¿ÿÿhÿ…è¿ÿÿPè ñÿÿƒÄ…À…1þÿÿƒì ÿµä¿ÿÿè÷ñÿÿƒÄ¸eô[^_]ÃvU‰åWVS‹]¶ƒèru¶Cƒèeu ¶Cƒèdu¶C…Àu ¸é¢v‰Þ¿ò§¹üó¦—Â’À8Âu¸ë‰Þ¿ù§¹üó¦—Â’À8Âu¸ë_‰Þ¿¨¹üó¦—Â’À8Âu¸ë?‰Þ¿¨¹üó¦—Â’À8Âu¸ë‰Þ¿ ¨¹üó¦—Á’¸8Ñ”À[^_]ÃU‰åVSƒì‹u‹] ŠEˆE÷€;t"ëŠU÷ˆ¾ƒìPVèZïÿÿƒÄ…ÀuçC€;uæeø[^]ÉöU‰åƒìEüPè5ðÿÿEü‰$èÊðÿÿƒÄPh€»è¼ñÿÿƒÄj h€»è ïÿÿƒÄ…ÀtƸ€»ÉÃU‰åWS‹]€;tv¾¡L»öDP tÆ C€;uèh¨h¨‰ßü¹ÿÿÿÿ°ò®÷ÑIQSè÷ÿÿ¸eø[_]ÃU‰åWVSƒì4‹} ü¹ÿÿÿÿ°ò®÷ѱÿVjè’ðÿÿ‰ÃƒÄ¸…Û„D÷Etƒìÿu h¨SèÖðÿÿëD÷Etƒìÿu h¨Sèºðÿÿë(÷Etƒìÿu h!¨Sèžðÿÿë ƒìÿu Sè°ðÿÿƒÄ¿ ÷Et¿ ÷Eth%¨h*¨VSè@öÿÿh,¨h/¨ë@h1¨h7¨VSè#öÿÿh/¨h,¨VSèöÿÿƒÄ h,¨h/¨VSèþõÿÿh7¨h1¨VSèíõÿÿƒÄ ƒìWSEÈPè\ïÿÿƒÄ…Àtƒì Sèœïÿÿ¸ë9ƒì Sè‹ïÿÿÇ$jjÿu]ÈSèdíÿÿ‰ÆƒÄSè©íÿÿƒÄ¸…ö”Àeô[^_]ÃU‰å‹M…Éë‰ö¾‹@»‹‚ˆAt€9uê]ÃU‰å‹M…Éë‰ö¾‹H»‹‚ˆAt€9uê]ÃU‰åWVSìl ‹}ǵˆßÿÿé˜C Pÿu h:¨Vè*ïÿÿEˆƒÄ PVjè‹íÿÿƒÄ…Àupfƒ}˜yÇ÷E u)ëXöE™@tÇ÷E uëAÇ÷Et1ƒìjÿuƒÃ SèœýÿÿƒÄ…ÀtƒìSÿuèÑîÿÿƒÄ¸ë vƒì ÿuè©îÿÿ‰ÃƒÄ…Û…Pÿÿÿ¸eô[^_]ÃvU‰åWVSƒì‹}‹u Vè·íÿÿ‰ÃƒÄ¸…Ût=ƒìÿuÿuÿuÿuVSèçþÿÿƒÄ ƒøu ‰¸ë‰öƒì SèWíÿÿǸeô[^_]ÃU‰åƒì‹E…Àu¸ë(ƒìÿuÿuÿuÿuÿu PèŒþÿÿ‰ÂƒÄ ¸ƒú”ÀÉÉöU‰åƒì‹E…Àt ƒì PèîìÿÿÉÃU‰åVSƒì‹u‹] [›ÁãEôPèìÿÿ؉Eô‰Eè‰EìƒÄh@¨VèsíÿÿƒÄ…Àtƒì PèsìÿÿƒÄë‰öƒìVhB¨ÿ5D»èëÿÿ¸ëƒìEèPVèíÿÿ¸eø[^]ÃvU‰åWS‹U‹] …ÒtM…ÛtI‰×ü¹ÿÿÿÿ°ò®¸ƒùþt8ƒìÿuRèïìÿÿ‰ÇƒÄ…ÿtƒìShR¨Wè§êÿÿ‰<$èßëÿÿ¸ë¸eø[_]ÃU‰åƒì hU¨ÿu ÿuè‚ÿÿÿÉÃU‰åƒì h@¨ÿu ÿuèjÿÿÿÉÃU‰åWVSƒì|‹u‹] ÇE„¸…ö„¦‰÷ü¹ÿÿÿÿ°ò®¸ƒùþ„Œ…ÛŽ„EˆƒìPVjè¸êÿÿƒÄ…Àuk‰ß9]´}‹}´ƒìhÔ§Vèìÿÿ‰ÃƒÄ…ÛtJƒìGPjè¢ëÿÿ‰E„ƒÄ…Àt&SjWPèNêÿÿƒÄ…Àuƒì ÿu„èœëÿÿÇE„ƒÄƒì SèÙêÿÿƒÄ‹E„eô[^_]ÃvU‰åWVSƒì‹]‰ßü¹ÿÿÿÿ°ò®÷Ñqÿh`¨SèëÿÿƒÄ9ðt5Sƒì èÌùÿÿƒÄ PhÀ¨ÿ5D»è<éÿÿƒÄÿ5D»èNéÿÿ¸é‰ßü¹ÿÿÿÿ°ò®÷Ѹ€| þ.te‰ß¹ÿÿÿÿ°ò®÷Ѹ€| þ,tLƒìj.Sè¦èÿÿƒÄ…Àu¸ë3¸€;.t)€;-t$€;,tƒþ~ƒìj/SèêÿÿƒÄ‰Â¸…Ò”Àeô[^_]ÃU‰åWVSƒì ‹U¾ƒ} tE…ÒtA»°¹‰ßü¹ÿÿÿÿ°ò®ƒùþt+‰×¹ÿÿÿÿò®ƒùþtƒìÿu RSƒì èÉøÿÿƒÄ Phü¨ë]‰öƒ} t"»°¹‰ßü¹ÿÿÿÿ°ò®ƒùþt ƒì ÿu Së%vƒ} t>…Òt:‰×ü¹ÿÿÿÿ°ò®ƒùþt)ƒì ÿu Rƒì èjøÿÿƒÄ Ph ©ÿ5D»èÚçÿÿƒÄ ë%ƒìèHøÿÿƒÄ Ph ©ÿ5D»è¸çÿÿ¾ƒÄƒì ÿ5D»èÂçÿÿ‰ðeô[^_]ÃU‰åWVSƒì ‹u‹]…ötƒ} u ¸ÿÿÿÿéõ‰÷ü¹ÿÿÿÿ°ò®¸ÿÿÿÿƒùþ„Ú‰÷¹ÿÿÿÿ°ò®÷ÑA¸ÿÿÿÿ9M‚¾ƒìÿujSè@éÿÿƒÄVSè†éÿÿƒÄhJ©SèHèÿÿƒÄ ‰ßü¹ÿÿÿÿ°ò®÷Ñ‹E)ÈPÿu Sè¨æÿÿ‰$è@çÿÿ‰EðƒÄ…Àtc‰ßü¹ÿÿÿÿ°ò®‰Ê÷ÒJ‰÷¹ÿÿÿÿò®÷Ñ9ÊvC‰÷¹ÿÿÿÿò®‰È÷ÐTÿ‰ß¹ÿÿÿÿ°ò®÷щMð‰÷¹ÿÿÿÿò®MðÑéÆDƒì SèÙæÿÿ‰EðƒÄ‹Eðeô[^_]ÃU‰åWS‹U…Ò„–‰×ü¹ÿÿÿÿ°ò®ƒùþ„‰Óë`vŠSBÎ<wRˆÑÁá¾C‹H»Š‚BÐ< w L ÐëvB¿L É<w%ˆ C€{tƒìCPSè_èÿÿƒÄë ‰öÆë!vC…Ût€;tƒìj%Sè›åÿÿƒÄ‰Ã…Ûu†eø[_]ÃvU‰åWVSì`‹}‹] SWèOåÿÿ‰ÆƒÄ…öt1ƒìèþåÿÿƒÄÿ0SWh`©èŸÿÿSèÆçÿÿƒÄSh‡©èÜüÿÿƒÄ‰ðeô[^_]ÃvU¡¸¹‰åSƒìƒøÿ»¸¹tv¼'ƒëÿЋƒøÿuôX[]ÃU‰åƒì‰ì]öU‰åSRè[ÃNvè×çÿÿ‹]üÉÃInvalid count of argumentsbbrunUsage: bbrun [-a] -aInvalid argumentProgram/script not foundProgram/script path too longBBSLEEPBBSLEEP undefinedBBSLEEP undefined/invalidBBPIDBBPID undefinedaCan't open file defined in BBPID%d %s 2>&1r%sCould not execute program/script(%s) Runtime of %dsecs is invalid(%s) Runtime of %dsecs is longer than BBSLEEP (%s)%d.%d.%d.%dBBHOSTSr%s %sFQDNTRUE0.0.0.0redpurpleyellowgreenblueclear ^(%s)$^%s%s$[.,]..**([_])]*%s/%saCan't touch %s %swabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:%s bbd FILENAME CONSTAINS INVALID CHARACTERS - IGNORED: %s %s %s %s %s %s %s %s %s bbutils bb_errmsg() invalid arguments =Could not rename %s to %s - errno: %d bb_renameĹÿÿÿÿÿÿÿÿŒº:ŠJŠZŠjŠzŠŠŠšŠªŠºŠÊŠÚŠêŠúŠ ‹‹*‹:‹J‹Z‹j‹z‹Š‹š‹ª‹º‹Ê‹Ú‹ê‹ú‹ ŒŒ*Œ:ŒJŒZŒjŒzŒŠŒšŒªŒºŒÊŒÚŒêŒúŒ Š p¥(Ô…”‚ Þ ȹh¤ˆ|ˆ(þÿÿo<ˆÿÿÿoðÿÿoÒ‡¢ƒd4d49<H€r€Œ€»€ó€0€€Ò€ý€,€V€€™€´€Õ€€1€V€€€©‚¢¢ ‚cV$‚ï[L‚b‚y‚¢¢¢‚ØƀǢڀ ñ€!€"€#3€%K€&a€1x€2€3§€4À€5Ø€6ñ€8 €9"€;B€=X€>n€?„€@š€A±€BÉ€C߀Dö€E €F$€G;€HT€Ii€NÏ€Qç€R€S€T9€UU€Vm€X…€[Ÿ€^·€eÍ€hç€l €q €r5 €uP €vm €yˆ €z¥ €}½ €€Ö €ƒñ €„ €‡& €Š@ ‚Ë”t ‚Fœ €¢Ò € €#V €Y €4u €< €Cú €F €S© €Zç €^€Ù€lù€tM€yn€ö€†4€Œ¢¢‚ L€b€8¢w‚Š‚b‚¢œ‚¢É€K¢¢L€€#Ô‚ç‚5ÁLÂwŠ‚Âœ¢Âø€×€€H8€Kg€L˜€UË€Z€^?€aw€b¯€\€€û€r€­¢¢–€5 €7!€89€9S€:¢m d4init.c/usr/src/build/53700-i386/BUILD/glibc-2.2.4/csu/gcc2_compiled.int:t(0,1)=r(0,1);-2147483648;2147483647;char:t(0,2)=r(0,2);0;127;long int:t(0,3)=r(0,3);-2147483648;2147483647;unsigned int:t(0,4)=r(0,4);0000000000000;0037777777777;long unsigned int:t(0,5)=r(0,5);0000000000000;0037777777777;long long int:t(0,6)=@s64;r(0,6);01000000000000000000000;0777777777777777777777;long long unsigned int:t(0,7)=@s64;r(0,7);0000000000000;01777777777777777777777;short int:t(0,8)=@s16;r(0,8);-32768;32767;short unsigned int:t(0,9)=@s16;r(0,9);0;65535;signed char:t(0,10)=@s8;r(0,10);-128;127;unsigned char:t(0,11)=@s8;r(0,11);0;255;float:t(0,12)=r(0,1);4;0;double:t(0,13)=r(0,1);8;0;long double:t(0,14)=r(0,1);12;0;complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;complex float:t(0,16)=r(0,16);8;0;complex double:t(0,17)=r(0,17);16;0;complex long double:t(0,18)=r(0,18);24;0;__builtin_va_list:t(0,19)=*(0,20)=(0,20)../include/libc-symbols.h/usr/src/build/53700-i386/BUILD/glibc-2.2.4/build-i386-linux/config.h../sysdeps/gnu/_G_config.h../sysdeps/unix/sysv/linux/bits/types.h../include/features.h../include/sys/cdefs.h../misc/sys/cdefs.h/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.hsize_t:t(8,1)=(0,4)__u_char:t(4,1)=(0,11)__u_short:t(4,2)=(0,9)__u_int:t(4,3)=(0,4)__u_long:t(4,4)=(0,5)__u_quad_t:t(4,5)=(0,7)__quad_t:t(4,6)=(0,6)__int8_t:t(4,7)=(0,10)__uint8_t:t(4,8)=(0,11)__int16_t:t(4,9)=(0,8)__uint16_t:t(4,10)=(0,9)__int32_t:t(4,11)=(0,1)__uint32_t:t(4,12)=(0,4)__int64_t:t(4,13)=(0,6)__uint64_t:t(4,14)=(0,7)__qaddr_t:t(4,15)=(4,16)=*(4,6)__dev_t:t(4,17)=(4,5)__uid_t:t(4,18)=(4,3)__gid_t:t(4,19)=(4,3)__ino_t:t(4,20)=(4,4)__mode_t:t(4,21)=(4,3)__nlink_t:t(4,22)=(4,3)__off_t:t(4,23)=(0,3)__loff_t:t(4,24)=(4,6)__pid_t:t(4,25)=(0,1)__ssize_t:t(4,26)=(0,1)__rlim_t:t(4,27)=(4,4)__rlim64_t:t(4,28)=(4,5)__id_t:t(4,29)=(4,3)__fsid_t:t(4,30)=(4,31)=s8__val:(4,32)=ar(4,33)=r(4,33);0000000000000;0037777777777;;0;1;(0,1),0,64;;__daddr_t:t(4,34)=(0,1)__caddr_t:t(4,35)=(4,36)=*(0,2)__time_t:t(4,37)=(0,3)__useconds_t:t(4,38)=(0,4)__suseconds_t:t(4,39)=(0,3)__swblk_t:t(4,40)=(0,3)__clock_t:t(4,41)=(0,3)__clockid_t:t(4,42)=(0,1)__timer_t:t(4,43)=(0,1)__key_t:t(4,44)=(0,1)__ipc_pid_t:t(4,45)=(0,9)__blksize_t:t(4,46)=(0,3)__blkcnt_t:t(4,47)=(0,3)__blkcnt64_t:t(4,48)=(4,6)__fsblkcnt_t:t(4,49)=(4,4)__fsblkcnt64_t:t(4,50)=(4,5)__fsfilcnt_t:t(4,51)=(4,4)__fsfilcnt64_t:t(4,52)=(4,5)__ino64_t:t(4,53)=(4,5)__off64_t:t(4,54)=(4,24)__t_scalar_t:t(4,55)=(0,3)__t_uscalar_t:t(4,56)=(0,5)__intptr_t:t(4,57)=(0,1)__socklen_t:t(4,58)=(0,4)../linuxthreads/sysdeps/pthread/bits/pthreadtypes.h../sysdeps/unix/sysv/linux/bits/sched.h__sched_param:T(10,1)=s4__sched_priority:(0,1),0,32;;_pthread_fastlock:T(9,1)=s8__status:(0,3),0,32;__spinlock:(0,1),32,32;;_pthread_descr:t(9,2)=(9,3)=*(9,4)=xs_pthread_descr_struct:__pthread_attr_s:T(9,5)=s36__detachstate:(0,1),0,32;__schedpolicy:(0,1),32,32;__schedparam:(10,1),64,32;__inheritsched:(0,1),96,32;__scope:(0,1),128,32;__guardsize:(8,1),160,32;__stackaddr_set:(0,1),192,32;__stackaddr:(0,19),224,32;__stacksize:(8,1),256,32;;pthread_attr_t:t(9,6)=(9,5)pthread_cond_t:t(9,7)=(9,8)=s12__c_lock:(9,1),0,64;__c_waiting:(9,2),64,32;;pthread_condattr_t:t(9,9)=(9,10)=s4__dummy:(0,1),0,32;;pthread_key_t:t(9,11)=(0,4)pthread_mutex_t:t(9,12)=(9,13)=s24__m_reserved:(0,1),0,32;__m_count:(0,1),32,32;__m_owner:(9,2),64,32;__m_kind:(0,1),96,32;__m_lock:(9,1),128,64;;pthread_mutexattr_t:t(9,14)=(9,15)=s4__mutexkind:(0,1),0,32;;pthread_once_t:t(9,16)=(0,1)_pthread_rwlock_t:T(9,17)=s32__rw_lock:(9,1),0,64;__rw_readers:(0,1),64,32;__rw_writer:(9,2),96,32;__rw_read_waiting:(9,2),128,32;__rw_write_waiting:(9,2),160,32;__rw_kind:(0,1),192,32;__rw_pshared:(0,1),224,32;;pthread_rwlock_t:t(9,18)=(9,17)pthread_rwlockattr_t:t(9,19)=(9,20)=s8__lockkind:(0,1),0,32;__pshared:(0,1),32,32;;pthread_spinlock_t:t(9,21)=(0,1)pthread_barrier_t:t(9,22)=(9,23)=s20__ba_lock:(9,1),0,64;__ba_required:(0,1),64,32;__ba_present:(0,1),96,32;__ba_waiting:(9,2),128,32;;pthread_barrierattr_t:t(9,24)=(9,25)=s4__pshared:(0,1),0,32;;pthread_t:t(9,26)=(0,5)wchar_t:t(11,1)=(0,3)wint_t:t(11,2)=(0,4)../include/wchar.h../wcsmbs/wchar.h../sysdeps/unix/sysv/linux/i386/bits/wchar.h__mbstate_t:t(13,1)=(13,2)=s8__count:(0,1),0,32;__value:(13,3)=u4__wch:(11,2),0,32;__wchb:(13,4)=ar(4,33);0;3;(0,2),0,32;;,32,32;;_G_fpos_t:t(3,1)=(3,2)=s12__pos:(4,23),0,32;__state:(13,1),32,64;;_G_fpos64_t:t(3,3)=(3,4)=s16__pos:(4,54),0,64;__state:(13,1),64,64;;../include/gconv.h../iconv/gconv.h :T(17,1)=e__GCONV_OK:0,__GCONV_NOCONV:1,__GCONV_NODB:2,__GCONV_NOMEM:3,__GCONV_EMPTY_INPUT:4,__GCONV_FULL_OUTPUT:5,__GCONV_ILLEGAL_INPUT:6,__GCONV_INCOMPLETE_INPUT:7,__GCONV_ILLEGAL_DESCRIPTOR:8,__GCONV_INTERNAL_ERROR:9,; :T(17,2)=e__GCONV_IS_LAST:1,__GCONV_IGNORE_ERRORS:2,;__gconv_fct:t(17,3)=(17,4)=*(17,5)=f(0,1)__gconv_init_fct:t(17,6)=(17,7)=*(17,8)=f(0,1)__gconv_end_fct:t(17,9)=(17,10)=*(17,11)=f(0,20)__gconv_trans_fct:t(17,12)=(17,13)=*(17,14)=f(0,1)__gconv_trans_context_fct:t(17,15)=(17,16)=*(17,17)=f(0,1)__gconv_trans_query_fct:t(17,18)=(17,19)=*(17,20)=f(0,1)__gconv_trans_init_fct:t(17,21)=(17,22)=*(17,23)=f(0,1)__gconv_trans_end_fct:t(17,24)=(17,25)=*(17,26)=f(0,20)__gconv_trans_data:T(17,27)=s20__trans_fct:(17,12),0,32;__trans_context_fct:(17,15),32,32;__trans_end_fct:(17,24),64,32;__data:(0,19),96,32;__next:(17,28)=*(17,27),128,32;;__gconv_step:T(17,29)=s56__shlib_handle:(17,30)=*(17,31)=xs__gconv_loaded_object:,0,32;__modname:(17,32)=*(0,2),32,32;__counter:(0,1),64,32;__from_name:(4,36),96,32;__to_name:(4,36),128,32;__fct:(17,3),160,32;__init_fct:(17,6),192,32;__end_fct:(17,9),224,32;__min_needed_from:(0,1),256,32;__max_needed_from:(0,1),288,32;__min_needed_to:(0,1),320,32;__max_needed_to:(0,1),352,32;__stateful:(0,1),384,32;__data:(0,19),416,32;;__gconv_step_data:T(17,33)=s36__outbuf:(17,34)=*(0,11),0,32;__outbufend:(17,34),32,32;__flags:(0,1),64,32;__invocation_counter:(0,1),96,32;__internal_use:(0,1),128,32;__statep:(17,35)=*(13,1),160,32;__state:(13,1),192,64;__trans:(17,28),256,32;;__gconv_info:T(17,36)=s8__nsteps:(8,1),0,32;__steps:(17,37)=*(17,29),32,32;__data:(17,38)=ar(4,33);0;-1;(17,33),64,0;;__gconv_t:t(17,39)=(17,40)=*(17,36)_G_iconv_t:t(3,5)=(3,6)=u44__cd:(17,36),0,64;__combined:(3,7)=s44__cd:(17,36),0,64;__data:(17,33),64,288;;,0,352;;_G_int16_t:t(3,8)=(0,8)_G_int32_t:t(3,9)=(0,1)_G_uint16_t:t(3,10)=(0,9)_G_uint32_t:t(3,11)=(0,4)_IO_stdin_used:G(0,1)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-85)GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.1 2.96-98)01.0101.0101.0101.0101.0101.0101.01.symtab.strtab.shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.got.rel.bss.rel.plt.init.plt.text.fini.rodata.data.eh_frame.ctors.dtors.got.dynamic.sbss.bss.stab.stabstr.comment.noteô€ô# 1((l7 ”‚”@?Ô…ÔþGÿÿÿoÒ‡ÒhTþÿÿo<ˆ<@c |ˆ|l „ˆ„ u ¤ˆ¤h ~ Š „$Š$ à‰ `p¥p%• ¥ %  ¹ )£´¹´)­¸¹¸)´À¹À)»ȹÈ)ÄÀŒºŒ* É,»@+Ï@»@+@ Ô@+¤ Úä2ƒãgLzìáMŒmNò8T° ? è]Üô€(”‚Ô…Ò‡<ˆ|ˆ„ˆ ¤ˆ Š $Š  p¥ ¥ ¹´¹¸¹À¹ȹŒº,»@»ñÿ 4 4 +ñÿ2ñÿ ` =¨¹AÀ¹O¬¹[` q´¹„À P»˜Ð ¤Ž ¯°¹½¸¹2ñÿ 0¥ Ë0¥ á¼¹¤`¥ ¯´¹îĹû´¹ñÿ p¥ ñÿ Ž ñÿ ´’ €» '›H 2   =T$ H4Š>ZDŠžmxÝ }TŠÁ̤] ™@»´dŠ2ÆŒºÏtŠDâ„Š"ð™Ü  ¥  ”Š-2¤Š D´ŠVÄŠxiÔŠ%{ø¡ …Ä”K –•Ô ¥ü¢  ¯äŠ“ÁôŠÝ´’¹ è Š î‹œÿ‹p$‹"4‹¬"ED»WD‹/jT‹Dz°¹ ˆd‹@™X›T £t‹Âµ„‹ÚÆ”‹«ãH»þ ¡ë ÌšB ¤‹Å,d—‰ 6,»ñÿBŽ£ G Ÿh Q• f´‹ÊƒXžh Ä‹ª¡ ¹ ¬p¥²Ô‹˜Ä䋹ן âô‹-óŒ~Œ"#$ŒÐ64ŒüIDŒ®[TŒkdŒÀ}tŒ-,»ñÿ–ȹ¬„Œô¼€ÛñÿÁ¬›„ Ç”Œ>Øp”S 褌húL»Àž> 8 Ñ #´Œœ6ÄŒ G¤¥VÔŒ-i ¹vŸ… €0•_ 䌸 ¤­ °0$ » ÊôŒ‹initfini.cgcc2_compiled.call_gmon_startinit.ccrtstuff.cp.0__DTOR_LIST__completed.1__do_global_dtors_aux__EH_FRAME_BEGIN__fini_dummyobject.2frame_dummyinit_dummyforce_to_data__CTOR_LIST____do_global_ctors_aux__CTOR_END____DTOR_END____FRAME_END__bbrun.cutils.cworktimestr.0gettimestrappendfilestrtoupperrename@@GLIBC_2.0strncat@@GLIBC_2.0getdirnextentrystrchr@@GLIBC_2.0bb_rename__ctype_tolower@@GLIBC_2.0getpid@@GLIBC_2.0_DYNAMICregexec@@GLIBC_2.0__register_frame_info@@GLIBC_2.0getcolornum_fp_hwsavefilefprintf@@GLIBC_2.0getenv@@GLIBC_2.0fflush@@GLIBC_2.0regfree@@GLIBC_2.0pclose@@GLIBC_2.1bb_errmsgstriptrailspacesgetlinebbhostsbb_putenvputenv@@GLIBC_2.0__errno_location@@GLIBC_2.0replacestr_initpopen@@GLIBC_2.1malloc@@GLIBC_2.0fread@@GLIBC_2.0__deregister_frame_info@@GLIBC_2.0stderr@@GLIBC_2.0__xstat@@GLIBC_2.0time@@GLIBC_2.0bbprog_startfgets@@GLIBC_2.0space_sepstrstr@@GLIBC_2.0sleep@@GLIBC_2.0__strtol_internal@@GLIBC_2.0__ctype_toupper@@GLIBC_2.0valid_lognameclean_stringstrncmp@@GLIBC_2.0getipaddr__bss_startmainwritefilestripleadtrailspaces__libc_start_main@@GLIBC_2.0getdirfirststrcat@@GLIBC_2.0data_start_finifclose@@GLIBC_2.1strrchr@@GLIBC_2.0getdirdonectime@@GLIBC_2.0closedir@@GLIBC_2.0__cxa_finalize@@GLIBC_2.1.3opendir@@GLIBC_2.0regcomp@@GLIBC_2.0strspn@@GLIBC_2.0exit@@GLIBC_2.0calloc@@GLIBC_2.0sscanf@@GLIBC_2.0_edata_GLOBAL_OFFSET_TABLE_free@@GLIBC_2.0_endmatchutime@@GLIBC_2.0stripleadspacesmemset@@GLIBC_2.0__ctype_b@@GLIBC_2.0getdirnextreadfilestrncpy@@GLIBC_2.0fopen@@GLIBC_2.1_IO_stdin_usedsprintf@@GLIBC_2.0__data_starttouchtimevalid_ipaddrreaddir@@GLIBC_2.0convert_web_strstrtolower__gmon_start__strcpy@@GLIBC_2.0./bb/bb19c/src/0040755002342100007640000000000007616533072011035 5ustar bbbb./bb/bb19c/src/bbrun.c0100644002342100007640000000731607616533072012315 0ustar bbbb/* * * bbrun.c * * Robert-Andre Croteau * Version 1.9b * Apr 08th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * Start a program and optionnally prefix that program's * output date and program name. * */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #include #ifdef TIMEH #include /* FOR TIMING STUFF SMM */ #if GETTIMEOFDAY #include #endif #else #include /* FOR TIMING STUFF SMM */ #endif #include char bbprog[] = ""; /* Don't define it as it won't appear in bb_errmsg() */ int main(argc, argv) int argc; char *argv[]; { char *progp,*execname; char *bbsleep,*bbpid; time_t starttime,endtime,bbtime,sleeptime; struct stat statbuf; char cmdline[1024]; FILE *pipef,*bbpidf; char pipeline[1024]; char errmsg[2048]; int prefix; int bb_errmsg(); /* There should be either 1 or 2 arguments */ if( argc != 2 && argc != 3 ) { bb_errmsg("bbrun","Invalid count of arguments"); bb_errmsg("bbrun","Usage: bbrun [-a] "); exit(2); } /* If there's 2, then the 1st one should be -a */ if( (argc == 3) && (strcmp(argv[1],"-a") != 0) ) { bb_errmsg("bbrun","Invalid argument"); bb_errmsg("bbrun","Usage: bbrun [-a] "); exit(3); } /* Is program name the 1st or 2nd argument */ if( argc == 2 ) { prefix = 0; progp = argv[1]; } else { prefix = 1; progp = argv[2]; } /* Does it exist ? */ if( stat(progp,&statbuf) != 0 ) { /* doesn't exist */ bb_errmsg("bbrun","Program/script not found"); exit(4); } if( strlen(progp) > (sizeof(cmdline)-strlen(" 2>&1 ")-1) ) { bb_errmsg("bbrun","Program/script path too long"); exit(5); } /* Env variable BBSLEEP should have been defined */ if( (bbsleep=getenv("BBSLEEP")) == NULL ) { bb_errmsg("bbrun","BBSLEEP undefined"); exit(6); } /* and non-null */ if( (strlen(bbsleep) == 0) || (atoi(bbsleep) == 0) ) { bb_errmsg("bbrun","BBSLEEP undefined/invalid"); exit(7); } /* Env variable BBPID should have been defined */ if( (bbpid=getenv("BBPID")) == NULL ) { bb_errmsg("bbrun","BBPID undefined"); exit(8); } /* and non-null */ if( strlen(bbpid) == 0 ) { bb_errmsg("bbrun","BBPID undefined"); exit(9); } if( (bbpidf=fopen(bbpid,"a")) == NULL ) { bb_errmsg("bbrun","Can't open file defined in BBPID"); exit(10); } else { fprintf(bbpidf,"%d\n",getpid()); fclose(bbpidf); } sprintf(cmdline,"%s 2>&1",progp); if( (execname=strrchr(progp,'/')) != NULL ) { execname++; } else { execname = progp; } while(1) { starttime = time(NULL); if( (pipef=popen(cmdline,"r")) != NULL ) { memset(pipeline,0,sizeof(pipeline)); while( fgets(pipeline,sizeof(pipeline)-1,pipef) != 0 ) { /* Remove newline */ if( prefix ) { pipeline[strlen(pipeline)-1] = '\0'; bb_errmsg(execname,pipeline); } else { fprintf(stderr,"%s",pipeline); } memset(pipeline,0,sizeof(pipeline)); } pclose(pipef); } else { bb_errmsg(stderr,"Could not execute program/script"); } endtime = time(NULL); bbtime = endtime - starttime; if( bbtime < atoi(bbsleep) ) { /* Fix for invalid BBTIME * If xntpd/ntpdate changes date back a few * seconds/mins/hours may cause this */ if( bbtime < 0 ) { sprintf(errmsg,"(%s) Runtime of %dsecs is invalid",execname,(int)bbtime); bb_errmsg("bbrun",errmsg); bbtime = 0 - bbtime; bbtime %= atoi(bbsleep); } sleeptime = atoi(bbsleep) - bbtime; if( sleeptime > 0 ) { sleep(sleeptime); } else { sleep(atoi(bbsleep)); } } else { sprintf(errmsg,"(%s) Runtime of %dsecs is longer than BBSLEEP (%s)",execname,(int)bbtime,bbsleep); bb_errmsg("bbrun",errmsg); } } exit(0); } ./bb/bb19c/src/bb.c0100644002342100007640000000556507616533072011574 0ustar bbbb/* * bb.c * * BIG BROTHER CLIENT PROGRAM * Sean MacGuire * Version 1.9 * Mar 13th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * SENDS THE INPUT LINE TO THE DAEMON ON THE BIG BROTHER PORT * Format: bb IP-ADDR [|-] * * IP-ADDR: IP-ADDR OF THE SERVER * LINE: * DATA: for page: * for status: * for summary: * * - Will read from standard input a one line status * message. */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #include #include /* SMM 1.10 FOR DDNS */ char bbprog[] = "bb"; int bbnotify(machine,data) char *machine; /* IP ADDRESS */ char *data; /* DATA TO SEND ACROSS */ { char *bbpage = NULL; char *bbdisplays = NULL; char *bbpagers = NULL; char *pagelevels = NULL; char v1[16],v2[128],v3[16]; int bbsend(); int rc = 1; char *datap; bbdisplays = (char *) getenv("BBDISPLAYS"); #if DEBUG debug("Sending: ** %s ** to %s - %s\n",data,machine,bbdisplays); #endif rc = bbsend(machine, bbdisplays, data); /* SEND IT ACROSS */ /* If BBPAGE is defined then send also a msg if it's a red alert */ /* What if BBPAGE == BBDISP ? for now send two messages */ /* keep it simple ... */ bbpage = (char *) getenv("BBPAGE"); bbpagers = (char *) getenv("BBPAGERS"); pagelevels = (char *) getenv("PAGELEVELS"); if( ! pagelevels || (strlen(pagelevels) == 0) ) pagelevels = PAGELEVELSDEFAULT; if( (bbpage != NULL) && (pagelevels != NULL) ) { /* %*s could have been used for v2 but */ /* Linux thought otherwise i.e. bug or I misunderstood the %*s (skip) */ sscanf(data,"%15s %127s %15s %*s",v1,v2,v3); #if DEBUG debug("v1:[%s] v2:[%s] v3:[%s]\n",v1,v2,v3); #endif if( !strncmp(v1,"status",6) ) { if( strstr(pagelevels,v3) ) { memcpy(data,"page ",6); /* Change msg type */ /* Get rid of expiry delay, if it's defined */ datap = data + 6; if( *datap == '+' ) { while( *datap && !isspace(*datap) ) { *datap = ' '; datap++; } } #if DEBUG debug("Sending: ** %s ** to %s - %s\n",data,bbpage,bbpagers); #endif rc = bbsend(bbpage,bbpagers,data); /* SEND IT ACROSS TO BBPAGER */ } } } return(rc); } int main(argc, argv) int argc; char *argv[]; { char data[1024]; int rc = 1; if (argc != 3) { fprintf(stderr, "bb: incorrect number of arguments\n"); fprintf(stderr, "Format: \n"); exit(1); } if( argv[2][0] == '-' ) { #if DEBUG debug("bb gets its input from stdin\n"); #endif /* It expects one line messages .... */ while (fgets(data,sizeof(data)-1,stdin) != NULL) { #if DEBUG debug("data came in [%s]\n",data); #endif rc = bbnotify(argv[1],data); } #if DEBUG debug("Done\n"); #endif } else { rc = bbnotify(argv[1],argv[2]); } exit(rc); } ./bb/bb19c/src/README0100644002342100007640000000565607616533072011726 0ustar bbbb-------------------------------------------------- BIG BROTHER PORTING INFORMATION Sean MacGuire Version 1.9b May 01st, 2002 (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. -------------------------------------------------- 1. Look at the Makefile... 2. Type "make" If there are complaints that "bzero" is undefined, edit the Makefile, add -DZERO to the CFLAGS and try again. *** NOTE *** bbnet.c is new, and may not port immediately. Please send and changes back to me... -------------------------------------------------- Testing the port -------------------------------------------------- 1. Set up the environment: The environment variable BBHOME must be defined. It's where all this stuff was installed (top level). sh: BBHOME="/home/sean/bb"; export BBHOME csh: setenv BBHOME "/home/sean/bb" 2. Try running bbd. It should exit immediately and the daemon should be up and running. 3. Now make sure that the log directory exists (it should already). The log directory is $BBLOGS (usually in $BBVAR/logs or $BBHOME/../bbvar/logs) 4. Run bb by hand as follows: bb "status test.test green hello world" This should create the file test.test in the BBLOG directory containing the phrase "hello world". Note the quotes are mandatory! 5. Check for zombie processes. ps -ef | grep bbd on System V derived machines ps -ef | grep defunct on DEC Unix (OSF/1) ps -lax | grep bbd on BSD-type machines ps -lax | grep exiting on DEC Ultrix There should be only one bbd process. If there is more than one, edit the Makefile and add -DZOMBIE to CFLAGS and compile again. This is known to occur on FreeBSD machines. (On Ultrix check for processes marked with the bbd process as parent process. On DEC Unix (OSF/1) check for processes marked with the bbd process as parent process.) 6. If it doesn't work, then in src/Makefile , add the -DDEBUG=1 compiler directive to the CFLAGS entry. Run a "make clean", "make bbd" and finally copy bbd to bin/. When you'll restart BB, debug output will be sent to BBOUT. 7. If all of this works, then install it by typing: make install 8. Now configure Big Brother for your system. Two things need to be done: edit the runbb.sh and define where BBHOME is and modify etc/bb-hosts. Please refer to the Web page for the most up-to-date information. 9. Compile directives -DREGEXEC, -DREGEX, -DREXEC - Regular expression constructs REGEXEC - if the OS supports regexec() REGEX - support for regex() RE_EXEC - support for re_exec() Check you man pages for the one support by your OS. -DZOMBIE - If your platform gets bbd zombie processes -DBZERO - If your OS doesn't have a bzero() call -DDEBUG - Enables debug tracing -DSIGSETJMP - Fixes some setjmp() problems under RedHat -DTIMEH - Use time.h instead of sys/time.h -DGETTIMEOFDAY - The OS supports gettimeofday() and you want timing stats. ./bb/bb19c/src/touchtime.c0100644002342100007640000001164507616533072013206 0ustar bbbb/* * touchtime.c * BIG BROTHER TOUCHTIME PROGRAM * Sean MacGuire * Version 1.9 * Mar 13th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * Create a file with the given name half an hour old... * Default creates a file 30 minutes old. (-30) * -e returns the current tick * * Format: touchtime [offset-time] filename * touchtime -e * touchtime -a * touchtime -c */ /* DYNIX also require */ /* Thanks to */ #include "bb.h" #include #include #ifdef TIMEH #include #else #include #endif #include char bbprog[] = "touchtime"; #define NOYEAR 1 /* FOR NOW */ /* * NEW CODE WARNING HERE... * LOW RISK FUNCTION... SHOULDN'T BE A PROBLEM */ int getmonth(month) char *month; { int mnum=-1; if (strcmp(month,"Jan") == 0) mnum=0; else if (strcmp(month,"Feb") == 0) mnum=1; else if (strcmp(month,"Mar") == 0) mnum=2; else if (strcmp(month,"Apr") == 0) mnum=3; else if (strcmp(month,"May") == 0) mnum=4; else if (strcmp(month,"Jun") == 0) mnum=5; else if (strcmp(month,"Jul") == 0) mnum=6; else if (strcmp(month,"Aug") == 0) mnum=7; else if (strcmp(month,"Sep") == 0) mnum=8; else if (strcmp(month,"Oct") == 0) mnum=9; else if (strcmp(month,"Nov") == 0) mnum=10; else if (strcmp(month,"Dec") == 0) mnum=11; #if DEBUG debug("Month number set to %d\n", mnum); #endif return(mnum); } int main(argc, argv) int argc; char *argv[]; { FILE *fp; time_t ticks,dateticks; struct tm *ta; struct utimbuf *tb; int howlong; char *touchfile = (char *)malloc(256); char *mon = (char *)malloc(256); char time_asc[32]; if (argc == 3 && strcmp(argv[1],"-e") && strcmp(argv[1],"-a") && strcmp(argv[1],"-c") ) { sscanf(argv[1], "%d", &howlong); sscanf(argv[2], "%s", touchfile); } else if (argc == 3 && (!strcmp(argv[1],"-e") || !strcmp(argv[1],"-a")) ) { sscanf(argv[2], "%d", &howlong); } else if (argc == 3 && (!strcmp(argv[1],"-c")) ) { /* Check if time_t is an 8-byte long */ if( sizeof(dateticks) > 4 ) { sscanf(argv[2], "%ld", &dateticks); } else { sscanf(argv[2], "%d", &dateticks); } } else if (argc == 2) { if ( !strcmp(argv[1],"-e") || !strcmp(argv[1],"-a") ) { howlong = 0; } else { howlong = -30; /* DEFAULT 30 MINUTES AGO */ sscanf(argv[1], "%s", touchfile); } } else { fprintf(stderr, "Format: %s [offset] filename\n", argv[0]); exit(1); } howlong *= 60; /* NOW IN SECONDS */ ticks = time(&ticks) + howlong; /* Display the date in ASCII based on the time tick given as argument */ if ( !strcmp(argv[1],"-c") ) { sprintf(time_asc,"%s",ctime(&dateticks)); time_asc[strlen(time_asc)-1] = '\0'; printf("%s",time_asc); exit(0); } /* Display the time tick value associated */ if ( !strcmp(argv[1],"-e") ) { printf("%d",ticks); exit(0); } /* Display the date in ASCII based on the offset given as argument */ if ( !strcmp(argv[1],"-a") ) { sprintf(time_asc,"%s",ctime(&ticks)); time_asc[strlen(time_asc)-1] = '\0'; printf("%s",time_asc); exit(0); } /* * NEW CODE WARNING SECTION... IF THERE'S A PROBLEM... IT'S HERE */ /* * SMM WEB-DATE MANIPULATION * -d SENDS BACK DIFF BETWEEN THEN AND NOW * -x RETURN THE EPOCH TIME (AT MIDNIGHT) GIVEN AN ASCII DATE * of the form Mon Day Year (apr 13 2000) */ if ( !strcmp(argv[1],"-d") || !strcmp(argv[1],"-x") ) { /* SMM */ ta=(struct tm *)malloc(sizeof (struct tm)); if (argc != 3) { fprintf(stderr, "Format: %s -d|e WEB-TIME\n", argv[0]); exit(2); } #if DEBUG debug("ARGV 2: %s\n", argv[2]); #endif sscanf(argv[2], "%s %d %d", mon, &ta->tm_mday, &ta->tm_year); ta->tm_mon=getmonth(mon); /* SMM */ ta->tm_year-=1900; /* ADJUST YEAR */ ta->tm_hour=0; ta->tm_min=0; ta->tm_sec=0; ta->tm_isdst=-1; #if DEBUG debug("DAY : %d\n", ta->tm_mday); debug("MON : %d\n", ta->tm_mon); debug("YEAR : %d\n", ta->tm_year); debug("HOUR : %d\n", ta->tm_hour); debug("MIN : %d\n", ta->tm_min); debug("SEC : %d\n", ta->tm_sec); #endif ticks=time(&ticks); /* TIME NOW */ #if DEBUG debug("TICKS: %d\n", ticks); debug("ASCII TIME: %s\n", ctime(&ticks)); #endif if ( !strcmp(argv[1],"-x") ) { /* PRINT THE EPOCH OF THE WEBTIME IN SECONDS */ printf("%d\n", mktime(ta)); } else if ( !strcmp(argv[1],"-d") ) { /* PRINT THE DIFFERENCE IN SECONDS */ printf("%d\n",ticks-mktime(ta)); } exit(0); } /* * END NEW CODE WARNING SECTION */ tb=(struct utimbuf *)malloc(sizeof (struct utimbuf)); tb->actime=ticks; tb->modtime=ticks; /* * NOW CREATE THE TOUCHFILE * OR JUST CHANGE THE MODIFICATION TIME IF IT ALREADY EXISTS */ if( (fp=fopen(touchfile, "a")) != NULL ){ fclose(fp); } else { fprintf(stderr, "%s: Can't open filename %s\n", argv[0], touchfile); exit(2); } utime(touchfile, tb); exit(0); } ./bb/bb19c/src/bbnet.c0100644002342100007640000003103407616533072012271 0ustar bbbb/* * bbnet.c * BIG BROTHER NETWORK TESTING PROGRAM * Sean MacGuire * Version 1.9 * Mar 13th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * Format: bbnet machine:port ARG * * i.e.: http://blah.com/bobo HTTP TESTING USING HEAD COMMAND * http://blah.com/http://bobo.com PROXY TESTING * http://blah.com "GET /" GET AN ENTIRE PAGE AS TEST * blah.com TELNET TESTING (OR ANY OTHER PORT) * * bbnet understands real machine names and port numbers * i.e. blah.com:21 will open a connection to the FTP server * * Displays whatever answers on that port/address to stdout * * Returns: 0 OK * 1 Host not found * 2 Can't connect to server * 99 Timeout */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #ifdef TIMEH #include /* FOR TIMING STUFF SMM */ #if GETTIMEOFDAY #include #endif #else #include /* FOR TIMING STUFF SMM */ #endif #include /* FOR HOST INFO */ char bbprog[] = "bbnet"; int http=0; /* ARE WE HTTP TESTING? */ struct in_addr ip; /* THE IP ADDRESS WE'RE TESTING */ int port; /* THE PORT NUMBER WE'RE TESTING */ int timer=3; /* HOW LONG TO WAIT */ int loopcnt=0; /* LOOP COUNTER FOR ALARM TIMING */ int quiet=0; /* QUIET MODE */ int noerrors=0; /* Don't show errors, thanks to Mark.Deiss@acs-gsg.com */ int rc=0; /* ERROR CODES */ int silent=0; /* ONLY CHECK IF PORT CAN BE OPENED */ char *dir; /* DIRECTORY */ char *machine; /* MACHINE NAME ONLY */ #define BBNETTIMER1 3 #define BBNETTIMER2 5 #define BBNETTIMER3 12 int timer1 = BBNETTIMER1; int timer2 = BBNETTIMER2; int timer3 = BBNETTIMER3; char errormsg[MAXLINE]; #ifdef SIGSETJMP sigjmp_buf jmpenv; #else jmp_buf jmpenv; #endif #ifdef GETTIMEOFDAY /* * SMM FOR FREEBSD... PROBABLY ISN'T PORTABLE... * STOPWATCH - YEAH, IT'S WHAT YOU THINK... */ void stopwatch() { static long sec, usec; static int stop; struct timeval *ti; struct timezone tz; /* CAN'T BE NULL */ ti = (struct timeval *)malloc(sizeof (struct timeval)); gettimeofday(ti, &tz); /* START THE CLOCK */ #if DEBUG debug("IN STOPWATCH quiet=%d stop=%d\n", quiet, stop); #endif if (stop) { /* 2nd PRESS OF THE BUTTON */ sec = ti->tv_sec - sec; usec = ti->tv_usec - usec; if (usec < 0) { sec--; /* ONE LESS SEC */ usec += 1000000; /* IZZAT A USEC? */ } usec /= 10000; /* 1/100 sec? */ if (quiet != 1) printf("\nSeconds: %ld.%02ld\n", sec, usec); stop=0; } else { /* START THE WATCH */ stop = 1; sec = ti->tv_sec; usec = ti->tv_usec; } } #endif int main(argc, argv) int argc; char *argv[]; { int argmin=2, argmax=3, curarg=1; char *arg1, *arg2; char *bbnettimer1, *bbnettimer2, *bbnettimer3; if (argc > 1) { while ( (curarg++ < argc) && *argv[1] == '-') { /* QUIET MODE */ if (strcmp(argv[1], "-q") == 0) quiet=1; /* NO SECONDS */ else if (strcmp(argv[1], "-Q") == 0) noerrors=1; /* NO ERRORS */ else if (strcmp(argv[1], "-s") == 0) silent=1; /* Open port only */ else { fprintf(stderr, "bbnet: Invalid argument\n"); fprintf(stderr, "Format: bbnet [-s] [-q] [-Q] machine[:port]|http-request\n"); exit(1); } argmin++; argmax++; argv++; } arg1=argv[1]; arg2=argv[2]; } if (argc < argmin || argc > argmax) { fprintf(stderr, "bbnet: incorrect number of arguments\n"); fprintf(stderr, "Format: bbnet [-s] [-q] [-Q] machine[:port]|http-request\n"); exit(1); } bbnettimer1 = (char *) getenv("BBNETTIMER1"); if( !bbnettimer1 ) { timer1 = BBNETTIMER1; } else { timer1 = atoi(bbnettimer1); if( timer1 <= 0 ) { timer1 = BBNETTIMER1; } } bbnettimer2 = (char *) getenv("BBNETTIMER2"); if( !bbnettimer2 ) { timer2 = BBNETTIMER2; } else { timer2 = atoi(bbnettimer2); if( timer2 <= 0 ) { timer2 = BBNETTIMER2; } } bbnettimer3 = (char *) getenv("BBNETTIMER3"); if( !bbnettimer3 ) { timer3 = BBNETTIMER3; } else { timer3 = atoi(bbnettimer3); if( timer3 <= 0 ) { timer3 = BBNETTIMER3; } } if ((rc = setup(arg1)) == 0) { /* IF NO ERRORS DURING SETUP */ if (argc==argmax) rc = bnetsend(arg2); /* DO TEST */ else rc = bnetsend((char *)NULL); } exit(rc); } /* * THIS FUNCTION SETS UP EVERYTHING WE NEED TO CALL THE PORT */ int setup(arg) char *arg; { char *eob = 0, *ptr,*newdir; struct hostent *ho = 0; /* * PARSE THE ARGUMENT. THIS SHOULD BE A DROP-IN REPLACEMENT * FOR lynx, UGH. THAT MEANS THE FIRST ARGUMENT MAY BE A REALLY * NASTY THING. */ machine = (char *)malloc(MAXLINE); strncpy(machine, arg, MAXLINE - 1); if (strncmp(machine, "http://", 7) == 0) { http = 1; #if DEBUG debug("We have an http request\n"); #endif machine += 7; port = 80; /* STANDARD HTTP PORT */ } else { http=0; /* NOT TESTING HTTP */ port = 23; /* TELNET DEFAULT */ } ptr = (char *)strchr(machine, ':'); if (ptr != (char *)NULL) { #if DEBUG debug("SCANNING FOR A PORT %s\n", ptr); #endif /* * SMM v1.06b * FOR PROXY TESTING... THERE WILL BE ANOTHER * COLON ':' BUT IT'LL BE FOR THE http: REQUEST * SO CHECK THIS BY MAKING SURE THERE IS NO PORT # */ if (sscanf(ptr, ":%d", &port) != 0) eob = ptr; } #if DEBUG debug("GOT PORT: %d\n", port); #endif dir = (char *)strchr(machine, '/'); if (dir) { /* * CHECK FOR A PROXY REQUEST */ if (strncmp(dir, "/http://", 8) == 0) { if (eob == 0) eob = dir; dir++; /* SKIP LEADING SLASH */ #if DEBUG debug("PROXY REQUEST for %s\n", dir); #endif } newdir = (char *)malloc(strlen(dir) + 1); strcpy(newdir, dir); #if DEBUG debug("DIRECTORY = %s\n", newdir); #endif *dir = '\0'; } /* * From: Doug White */ else /* no dir was specified, default to / */ { #if DEBUG debug("NO DIR\n"); #endif newdir = (char *)malloc(2); strcpy(newdir, "/"); } if (eob) *eob = '\0'; /* NOW GET MACHINE */ if((ip.s_addr = inet_addr(machine)) == -1) { /* IS IT IN DOT FMT */ if (*machine == '\0') { #if DEBUG debug("BOX IS LOCAL\n"); #endif ho = gethostbyname("localhost"); } else ho = gethostbyname(machine); if (ho == (struct hostent *)NULL) { if( noerrors != 1 ) { sprintf(errormsg,"Unknown host: %s",machine); bb_errmsg(NULL,errormsg); } return(1); /* NO HOST */ } /* * IF WE MAKE IT HERE, WE HAVE TO COPY THE HOST IP * INTO THE ADDRESS STRUCTURE. IT'S SAVED IN A CHAR* ... */ memcpy(&ip.s_addr, ho->h_addr, ho->h_length); } dir=newdir; /* SET DIRECTORY */ return(0); /* ALL IS WELL */ } int bnetsend(input) char *input; { int n, sockfd, noinput(), timeout(); struct sockaddr_in serv_addr; int stopwriting=0; char line[MAXLINE+1]; char *lineptr; bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = ip.s_addr; serv_addr.sin_port = htons(port); /* * THIS IS A LITTLE NASTY * IF THE SERVER'S NOT UP, THIS WILL WAIT A LONG TIME BEFORE * IT TIMES OUT. SO HANDLE THAT HERE... IT GETS 3 TRIES TO * ANSWER, 3, 5, AND 12 SECONDS RESPECTIVELY * * SMM 5 OCT 2001 - SET THE STOPWATCH BEFORE THE setenv ELSE * IT GETS CALLED AGAIN WHEN jmpbuf HITS. THE SECOND CALL TO * stopwatch() STOPPED THE WATCH AND PRINTED THE ELAPSED TIME * Seconds: 3 */ #ifdef GETTIMEOFDAY stopwatch(); /* START THE CLOCK */ #endif loopcnt = 0; timer = timer1; #ifdef SIGSETJMP if (sigsetjmp(jmpenv,1) != 0) { #else if (setjmp(jmpenv) != 0) { #endif #if DEBUG debug("SETTING TIMER TO %d\n", timer); #endif if (timer == 99) return(99); } signal(SIGALRM, (void *)timeout); alarm(timer); /* OPEN SOCKET */ if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { if( noerrors != 1 ) { bb_errmsg(NULL,"Can't open socket"); fflush(stderr); } return(2); } if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { if (noerrors != 1) { sprintf(errormsg,"Can't connect to server %s on port %d",machine,port); bb_errmsg(NULL,errormsg); } /* * THANKS TO: Douwe Dijkstra */ close(sockfd); return(2); } if( !silent ) { /* * HTTP REQUESTS ARE SPECIAL * PROPER HEAD PROTOCOL NOW INCLUDED... * Thanks: Don Sullivan (dsullivan@gaia.arc.nasa.gov) * EXTRA \r FOR Brian Lenihan AND ROXEN * VIRTUAL WEB SERVER SUPPORT FROM: Gabriel Wachob */ if (http) { /* Added User-Agent */ /* Thanks to Carl Privitt */ /* Added port in Host: HTTP message header: Christian Perrier */ if (dir) sprintf(line, "HEAD %s HTTP/1.0\r\nUser-Agent: BigBrother/%s\r\nHost: %s:%d\r\n\r\n", dir,BBREL,machine,port); else sprintf(line, "HEAD / HTTP/1.0\r\nUser-Agent: BigBrother/%s\r\nHost: %s:%d\r\n\r\n", BBREL,machine,port); } /* * Thanks to Jon Lewis */ else { sprintf(line, "quit\r\n"); #if DEBUG debug("We have default: %s\n", line); #endif } if (input) { if (strlen(input)) { strncpy(line, input, MAXLINE -5); strcat(line, "\r\n"); #if DEBUG debug("We have input: %s\n", line); #endif } else { /* THIS IS TO ALLOW NULL INPUT */ line[0] = '\0'; #if DEBUG debug("NULL INPUT\n"); #endif } } n = send(sockfd, line, strlen(line),0); line[0]='\0'; /* FIRST TIME AROUND - 3 SECOND DELAY */ loopcnt = 0; timer = timer1; #ifdef SIGSETJMP if (sigsetjmp(jmpenv,1) != 0) { #else if (setjmp(jmpenv) != 0) { #endif #if DEBUG debug("SETTING TIMER TO %d\n", timer); #endif if (timer == 99) { close(sockfd); return(99); } } signal(SIGALRM, (void *)timeout); #if DEBUG debug("PAUSE FOR RETURN\n"); #endif /* Give a little more time for HTTP requests */ if(http) { if(timer < 10) { timer = 10; } } alarm(timer); while ( (n = recv(sockfd, line, MAXLINE, 0)) > 0 ) { /* * SMM - 1.09 * SOME DAEMONS DON'T RETURN DATA PROMPTLY * DON'T SCREAM, BUT DO NOTE IT AS A MESSAGE */ alarm(0); loopcnt = 0; timer = timer1; /* Give a little more time for HTTP requests */ if(http) { if(timer < 10) { timer = 10; } } #ifdef SIGSETJMP if (sigsetjmp(jmpenv,1) != 0) { #else if (setjmp(jmpenv) != 0) { /* RETURN OK BUT INCLUDE MESSAGE */ #endif printf("*** bbnet: Stop waiting for server data\n"); close(sockfd); return(0); /* PRETEND IT'S OK */ } if (n > 0) line[n]='\0';/* Shun-Jee Liu */ /* * SMM - 26 DEC 97 * SOME TESTING SHOULDN'T BE DISPLAYED 'CAUSE IT'S GROSS * THANKS TO: Per.E.Berger@telia.se */ if (port == 23) { puts("Telnet test OK"); #ifdef GETTIMEOFDAY stopwatch(); /* STOP THE CLOCK */ #endif /* Missing close(sockfd) here and elsewhere */ /* Thanks to John Horne */ close(sockfd); return(0); } else { /* * SMM - 4 OCT 2001 * DOESN'T WORK ON http://www.yahoo.com * IT WAS ALL SORT OF BROKEN... FIXED */ if(http) { if(!stopwriting) { /* Don't use more than the header from the HEAD request */ /* Thanks to Patrick.Debois@sos.be */ /* SMM lineptr=(char*)strstr(line,"\n\n"); if (lineptr != (char *)NULL) { lineptr += 2; *lineptr = '\0'; } */ lineptr=(char*)strstr(line,"\r\n\r\n"); if (lineptr != (char *)NULL) { lineptr += 4; *lineptr = '\0'; } n = strlen(line); if (lineptr) stopwriting = 1; } } /* * SMM - 5 OCT 2001 * ONLY STOP WRITING OUTPUT IF A SERVER * IGNORES THE HEAD REQUEST AND SENDS THE * WHOLE PAGE. THANK www.yahoo.com FOR THIS * STOPWRITING=0 NOT HTTP, 1 DO IT ONCE AND STOP */ if( stopwriting <= 1) { write(1, line, n); /* WRITE TO STDOUT */ if (stopwriting == 1) stopwriting = 2; #ifdef OLDWAY printf("%s",line); /* DUMP OUT THE LINE */ #endif } } #if DEBUG debug("RESET PAUSE FOR RETURN\n"); #endif alarm(timer); } } /* !silent */ close(sockfd); #ifdef GETTIMEOFDAY stopwatch(); /* STOP THE CLOCK */ #endif return(0); /* RETURN OK */ } /* * timeout * HANDLE TIMEOUTS WHEN TALKING TO OUR FRIENDS... * START AT 3 - THEN GO TO 5 SEC, 12 SEC, then DIE */ int timeout() { loopcnt++; if (loopcnt == 1) timer = timer2; else if (loopcnt == 2) timer = timer3; else { timer = 99; if( noerrors != 1 ) { sprintf(errormsg,"Timeout with server %s on port %d",machine,port); bb_errmsg(NULL,errormsg); } } #if DEBUG debug("RESET TIMER TO %d\n", timer); #endif #ifdef SIGSETJMP siglongjmp(jmpenv,1); #else longjmp(jmpenv,1); #endif } ./bb/bb19c/src/dohostsvc.c0100644002342100007640000004200707616533072013215 0ustar bbbb/* * * dohostsvc.c * BIG BROTHER BUILD HTML STATUS LOG * Robert-Andre Croteau * Version 1.9c * May 06th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * Take the status log and save an HTML version of it in a buffer * */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #include #include #include static char *webhistory; static char *cgibinurl; static char *bbskin; /* SMM STRIKES AGAIN */ static char *logtime; static char *bbacksdir; char *headerpage,*footerpage; /* SMM MADE THESE NON STATIC */ int footerpage_size,headerpage_size; /* SMM MADE THESE NON STATIC */ static char headname[MAXLINE]; static char footname[MAXLINE]; int getheader(bbwebdir, bbheader) char *bbwebdir; char *bbheader; { FILE *bbhead; struct stat statbuf; int statres,retc; /* * All this env stuff should be modularized ... */ /* Get where the acks log files are saved (BBACKS) */ bbacksdir=(char *)getenv("BBACKS"); if ( bbacksdir == NULL ) bbacksdir = ""; webhistory = (char *) getenv("WEBHISTORY"); if ( webhistory == NULL ) webhistory = ""; cgibinurl = (char *) getenv("CGIBINURL"); if ( cgibinurl == NULL ) cgibinurl = ""; bbskin = (char *) getenv("BBSKIN"); /* SMM SKINS */ if ( bbskin == NULL ) bbskin = "gifs"; /* THE USUAL PLACE */ logtime = (char *) getenv("LOGTIME"); if ( logtime == NULL ) logtime = "LOGTIME not set"; if ( headerpage != NULL ) free(headerpage); headerpage = NULL; /* Get file info for header file */ if (bbheader) /* SMM */ sprintf(headname, "%s/%s", bbwebdir, bbheader); else sprintf(headname, "%s/hostsvc_header", bbwebdir); statres=stat(headname, &statbuf); if( statres == -1 ) return(0); headerpage_size = statbuf.st_size + 4096; /* Fill the buffer */ headerpage = (char *) calloc(1,headerpage_size); if( headerpage == NULL ) { return(0); } *headerpage = '\0'; /* Open and read header file in one call*/ if( (bbhead = fopen(headname, "r")) != NULL ) { retc = fread(headerpage,statbuf.st_size,1,bbhead); /* Was the header file read in completely ? */ if ( retc != 1 || strlen(headerpage) != statbuf.st_size ) { free(headerpage); headerpage = NULL; } else { #if DEBUG debug("header: %s\n",headerpage); #endif } fclose(bbhead); } else { return(0); } return(1); } int getfooter(bbwebdir, bbfooter) char *bbwebdir; char *bbfooter; { FILE *bbfoot; struct stat statbuf; int statres,retc; if ( footerpage != NULL ) free(footerpage); footerpage = NULL; /* Get file info for footer file */ if (bbfooter) /* SMM */ sprintf(footname, "%s/%s", bbwebdir, bbfooter); else sprintf(footname, "%s/hostsvc_footer", bbwebdir); statres=stat(footname, &statbuf); if( statres == -1 ) return(0); footerpage_size = statbuf.st_size + 4096; /* Fill the buffer */ footerpage = (char *) calloc(1,footerpage_size); if( footerpage == NULL ) { return(0); } *footerpage = '\0'; /* Open and read footer file in one call*/ if( (bbfoot = fopen(footname, "r")) != NULL ) { retc = fread(footerpage,statbuf.st_size,1,bbfoot); /* Was the footer file read in completely ? */ if ( retc != 1 || strlen(footerpage) != statbuf.st_size ) { free(footerpage); footerpage = NULL; } else { #if DEBUG debug("footer: %s\n",footerpage); #endif } fclose(bbfoot); } else { return(0); } return(1); } char *dohostsvc(status,filename,bbweb,bbwebdir,timebuf) char *status; char *filename; char *bbweb; char *bbwebdir; char *timebuf; { char hostname[MAXLINE]; char bbbkgfile[MAXLINE],bbip[MAXLINE],bbipname[MAXLINE]; char *dotheight,*dotwidth,*mkbbrowfont,*mkbbcolfont,*mkbbackfont; char redline[MAXLINE],greenline[MAXLINE],yellowline[MAXLINE],purpleline[MAXLINE],clearline[MAXLINE],blueline[MAXLINE]; char *bbhost,*bbsvc; char htmlline[MAXLINE],dataline[MAXLINE]; char *ptrmsg,*nlmsg,*lastptrmsg; char *tempheaderpage,*tempfooterpage; char *hostsvcdata; int hostsvcdata_size,msglen,first; char color[80],*charp; char *dur; char *sentby; char *tempptr; int templen; char ackfilename[MAXLINE],ack_event[MAXLINE],ack_rcpt[MAXLINE]; char ack_number[MAXLINE],ack_timestamp[MAXLINE],ack_msg[MAXLINE],ack_delay[MAXLINE]; char *ackfilebuf; struct stat statbuf; time_t timenow; char *ack_tag,*msgptr; extern char *readfile(); strncpy(color,status,sizeof(color)-1); /* Get color, 1st space or tab marks end of line */ charp = (char *) strchr(color,' '); if( charp != NULL ) *charp = '\0'; charp = (char *) strchr(color,'\t'); if( charp != NULL ) *charp = '\0'; hostsvcdata_size = strlen(status) + headerpage_size + footerpage_size + 4096; hostsvcdata = (char *) malloc(hostsvcdata_size); if (hostsvcdata == NULL ) return(NULL); hostsvcdata[0] = '\0'; /* Find the values of BBHOST / BBSVC */ /* filename: xxx,domain,com.disk */ /* xxx.svc */ /* BBHOST -> xxx.domain.com or xxx */ /* BBSVC -> disk */ memset(hostname,0,sizeof(hostname)); strncpy(hostname,filename,sizeof(hostname)-1); bbsvc = (char *) strrchr(hostname,'.'); if( bbsvc ) { *bbsvc = '\0'; /* NULL for bbhost */ bbsvc++; } bbhost = hostname; while( (bbhost=(char *)strchr(bbhost,',')) != NULL ) { *bbhost = '.'; } bbhost=hostname; /* Go get IP address of host, if 0.0.0.0, return hostname (3rd arg==0) */ getipaddr(bbhost,bbipname,sizeof(bbipname),0); /* Go get IP address of host, always return IP addr (3rd arg==1), unless not found then return hostname */ getipaddr(bbhost,bbip,sizeof(bbip),1); if( headerpage != NULL ) { tempheaderpage = (char *) malloc(headerpage_size); if( tempheaderpage != NULL ) { strcpy(tempheaderpage,headerpage); replacestr(tempheaderpage,headerpage_size,"&BBDATE",timebuf); sprintf(bbbkgfile,"%s/bkg-%s.gif",bbskin, color); replacestr(tempheaderpage,headerpage_size,"&BBBACKGROUND",bbbkgfile); replacestr(tempheaderpage,headerpage_size,"&BBWEB",bbweb); replacestr(tempheaderpage,headerpage_size,"&BBRELDATE",BBRELDATE); replacestr(tempheaderpage,headerpage_size,"&BBREL",BBREL); replacestr(tempheaderpage,headerpage_size,"&BBCOLOR",color); replacestr(tempheaderpage,headerpage_size,"&BBHOST",bbhost); replacestr(tempheaderpage,headerpage_size,"&BBSVC",bbsvc); replacestr(tempheaderpage,headerpage_size,"&BBIPNAME",bbipname); replacestr(tempheaderpage,headerpage_size,"&BBIP",bbip); replacestr(tempheaderpage,headerpage_size,"&BBSKIN",bbskin); /* SMM */ replacestr(tempheaderpage,headerpage_size,"&CGIBINURL",cgibinurl); replacestr(tempheaderpage,headerpage_size,"&LOGTIME",logtime); strcat(hostsvcdata,tempheaderpage); free(tempheaderpage); } else { strcat(hostsvcdata,"\n
\n
bbd is out of memory ... investigate
\n
\n"); } } else { /* Print proper error message, thanks to Mark Deiss */ strcat(hostsvcdata,"\n
\n
"); strcat(hostsvcdata,headname); strcat(hostsvcdata," was not found, please create this file with your custom header
\n
\n"); } /* Now print generic stuff */ if( (mkbbrowfont = (char *) getenv("MKBBROWFONT")) == NULL ) { mkbbrowfont = ""; } if( (mkbbcolfont = (char *) getenv("MKBBCOLFONT")) == NULL ) { mkbbcolfont = ""; } if( (mkbbackfont = (char *) getenv("MKBBACKFONT")) == NULL ) { mkbbackfont = ""; } if( (dotheight = (char *) getenv("DOTHEIGHT")) == NULL ) { dotheight = ""; } if( (dotwidth = (char *) getenv("DOTWIDTH")) == NULL ) { dotwidth = ""; } strcat(hostsvcdata,"\n\n\n\n"); strcat(hostsvcdata,"

\n"); strcat(hostsvcdata,"\n\n \n\n"); strcat(hostsvcdata,"
\n"); sprintf(dataline,"\n",bbhost,bbsvc); strcat(hostsvcdata,dataline); strcat(hostsvcdata,"
\n", mkbbrowfont); strcat(hostsvcdata,dataline); sprintf(dataline,"%s - %s

\n"); ptrmsg = status; /* Add a newline at the end of the message if there isn't one */ msglen = strlen(ptrmsg); if ( ptrmsg[msglen-1] != '\n' ) { ptrmsg[msglen+1] = '\0'; ptrmsg[msglen] = '\n'; } /* Read all lines except the last 2 lines, "received from" and "unchanged" */ /* Each log ends with these two lines */ /* Status unchanged in 23.22 days */ /* Status message received from 204.19.117.80 */ /* Those are displayed differently */ dur = sentby = ""; lastptrmsg = (char *) strrchr(ptrmsg,'\n'); /* go to last newline */ if ( lastptrmsg != NULL ) { *lastptrmsg = '\0'; lastptrmsg = (char *) strrchr(ptrmsg,'\n'); if ( lastptrmsg != NULL ) { *lastptrmsg = '\0'; sentby = lastptrmsg + 1; /* next is received from message */ lastptrmsg = (char *) strrchr(ptrmsg,'\n'); if( lastptrmsg != NULL ) { dur = lastptrmsg + 1; /* next is status unchanged in */ *lastptrmsg = '\0'; } } } if( lastptrmsg == NULL ) { lastptrmsg = ptrmsg + strlen(ptrmsg); } memset(ack_event,0,sizeof(ack_event)); memset(ack_rcpt,0,sizeof(ack_rcpt)); memset(ack_number,0,sizeof(ack_number)); memset(ack_delay,0,sizeof(ack_delay)); memset(ack_timestamp,0,sizeof(ack_timestamp)); memset(ackfilename,0,sizeof(ackfilename)); strncpy(ackfilename,bbacksdir,sizeof(ackfilename)-1); strncat(ackfilename,"/ack.",sizeof(ackfilename)-strlen(ackfilename)-1); strncat(ackfilename,bbhost,sizeof(ackfilename)-strlen(ackfilename)-1); strncat(ackfilename,".",sizeof(ackfilename)-strlen(ackfilename)-1); strncat(ackfilename,bbsvc,sizeof(ackfilename)-strlen(ackfilename)-1); memset(ack_msg,0,sizeof(ack_msg)); ack_tag = ""; msgptr = ""; timenow = time(NULL); if( stat(ackfilename, &statbuf) == 0 ) { if( statbuf.st_mtime > timenow ) { if( (ackfilebuf=readfile(ackfilename,MAXLINE-1)) != NULL ) { sscanf(ackfilebuf,"%s %s %s %s %s",ack_event,ack_rcpt,ack_number,ack_delay,ack_timestamp); strcpy(ack_msg,"Current acknowledgement by "); strncat(ack_msg,ack_rcpt,sizeof(ack_msg)-strlen(ack_msg)-1); if( strlen(ack_timestamp) > 0 ) { if( (msgptr=(char *)strstr(ackfilebuf,ack_timestamp)) != NULL ) { msgptr += strlen(ack_timestamp) + 1; if( *msgptr ) { stripleadtrailspaces(msgptr); strncat(ack_msg," - comment: ",sizeof(ack_msg)-strlen(ack_msg)-1); strncat(ack_msg,msgptr,sizeof(ack_msg)-strlen(ack_msg)-1); } } } free(ackfilebuf); } else { strcpy(ack_msg,"This event has been acked"); } ack_tag = "-ack"; } } sprintf(greenline,"\"green\"",bbskin,dotheight,dotwidth); sprintf(redline,"\"red\"",bbskin,ack_tag,dotheight,dotwidth); sprintf(yellowline,"\"yellow\"",bbskin,ack_tag,dotheight,dotwidth); sprintf(purpleline,"\"purple\"",bbskin,ack_tag,dotheight,dotwidth); sprintf(clearline,"\"clear\"",bbskin, dotheight,dotwidth); /* This line was missing, thanks to John Horne */ sprintf(blueline,"\"blue\"",bbskin, dotheight,dotwidth); first = 0; while( ((nlmsg=(char *)strchr(ptrmsg,(int) '\n')) != NULL) && (ptrmsg < lastptrmsg) ) { *nlmsg='\0'; strcpy(htmlline,ptrmsg); replacestr(htmlline,sizeof(htmlline),"&green",greenline); replacestr(htmlline,sizeof(htmlline),"&red",redline); replacestr(htmlline,sizeof(htmlline),"&yellow",yellowline); replacestr(htmlline,sizeof(htmlline),"&purple",purpleline); replacestr(htmlline,sizeof(htmlline),"&clear",clearline); /* This line was missing, thanks to John Horne */ replacestr(htmlline,sizeof(htmlline),"&blue",blueline); if( (strlen(hostsvcdata) + strlen(htmlline) + 1024) > hostsvcdata_size-1 ) { templen = strlen(hostsvcdata); hostsvcdata_size += strlen(htmlline) + 4096; tempptr = hostsvcdata; hostsvcdata = (char *) realloc(hostsvcdata,hostsvcdata_size); if( hostsvcdata == NULL ) { free(tempptr); return(NULL); } hostsvcdata[templen] = '\0'; } strcat(hostsvcdata,htmlline); strcat(hostsvcdata,"\n"); if (first == 0) { /* FIRST LINE */ strcat(hostsvcdata, "

\n");
			first = 1;
		}
		ptrmsg = nlmsg + 1;
	}

	templen = strlen(ptrmsg) + 4096;
	if( (strlen(hostsvcdata)+templen) > (hostsvcdata_size-1) ) {
		hostsvcdata_size += templen;
		templen = strlen(hostsvcdata);
		tempptr = hostsvcdata;
		hostsvcdata = (char *) realloc(hostsvcdata,hostsvcdata_size);
		if( hostsvcdata == NULL ) {
			free(tempptr);
			return(NULL);
		}
		hostsvcdata[templen] = '\0';
	}

       	strcat(hostsvcdata, ptrmsg); /* PUKE message line */

	if (first == 0) {		
       		strcat(hostsvcdata,"\n");
	}
	else {
		strcat(hostsvcdata,"
\n"); } strcat(hostsvcdata, "
\n"); strcat(hostsvcdata, "

\n"); strcat(hostsvcdata,"\n"); strcat(hostsvcdata,"\n"); strcat(hostsvcdata,"
\n"); sprintf(dataline,"\n", mkbbcolfont); strcat(hostsvcdata,dataline); sprintf(dataline, "%s
", dur); /* PUKE status unchanged */ strcat(hostsvcdata,dataline); sprintf(dataline, "%s
", sentby); /* PUKE status from ip */ strcat(hostsvcdata,dataline); if( strlen(ack_msg) > 0 ) { convert_web_str(ack_msg); sprintf(dataline, "
%s",mkbbackfont,ack_msg); strcat(hostsvcdata,dataline); } strcat(hostsvcdata,"
\n"); if ( webhistory && cgibinurl && !strcmp(webhistory,"TRUE") ) { #ifdef LARRD /* If LARRD is defined then you'll get a link to the */ /* graph for that host.service pair */ sprintf(dataline,"


\n",cgibinurl,bbhost,bbsvc,cgibinurl,bbhost,bbsvc,bbsvc); strcat(hostsvcdata,dataline); #endif /* Changed ALT="HIST..." to NAME="HIST..." */ /* Thanks to Andrew Dalgleish */ sprintf(dataline,"

\n",cgibinurl,filename); strcat(hostsvcdata,dataline); } else { sprintf(dataline,"

HISTORY
\n",filename); strcat(hostsvcdata,dataline); } strcat(hostsvcdata,"
\n\n\n\n"); /* Open and read footer file */ if( footerpage != NULL ) { tempfooterpage = (char *) malloc(footerpage_size); if( tempfooterpage != NULL ) { strcpy(tempfooterpage,footerpage); replacestr(tempfooterpage,footerpage_size,"&BBDATE",timebuf); sprintf(bbbkgfile,"%s/bkg-%s.gif",bbskin,color); replacestr(tempfooterpage,footerpage_size,"&BBBACKGROUND",bbbkgfile); replacestr(tempfooterpage,footerpage_size,"&BBWEB",bbweb); replacestr(tempfooterpage,footerpage_size,"&BBRELDATE",BBRELDATE); replacestr(tempfooterpage,footerpage_size,"&BBREL",BBREL); replacestr(tempfooterpage,footerpage_size,"&BBCOLOR",color); replacestr(tempfooterpage,footerpage_size,"&BBHOST",bbhost); replacestr(tempfooterpage,footerpage_size,"&BBSVC",bbsvc); replacestr(tempfooterpage,footerpage_size,"&BBSKIN",bbskin); /* SMM */ replacestr(tempfooterpage,footerpage_size,"&CGIBINURL",cgibinurl); /* replaced header with footer, thanks to */ /* Patrice GUERLAIS */ replacestr(tempfooterpage,footerpage_size,"&LOGTIME",logtime); templen = strlen(tempfooterpage) + 4096; if( (strlen(hostsvcdata)+templen) > (hostsvcdata_size-1) ) { hostsvcdata_size += templen; templen = strlen(hostsvcdata); tempptr = hostsvcdata; hostsvcdata = (char *) realloc(hostsvcdata,hostsvcdata_size); if( hostsvcdata == NULL ) { free(tempptr); return(NULL); } hostsvcdata[templen] = '\0'; } strcat(hostsvcdata,tempfooterpage); free(tempfooterpage); } else { strcat(hostsvcdata,"\n
\n
bbd is out of memory ... investigate
\n
\n"); } } else { /* Print proper error message, thanks to Mark Deiss */ strcat(hostsvcdata,"

"); strcat(hostsvcdata,footname); strcat(hostsvcdata," was not found, please create this file with your custom footer

"); } #ifdef MAYBEONEDAY sprintf(dataline,"

Big Brother Systems & Network Monitor %s
© Copyright Quest Software, Inc. 1997-2002
All rights reserved.
",BBREL); strcat(hostsvcdata,dataline); #endif return(hostsvcdata); } ./bb/bb19c/src/dumphostsvc.c0100644002342100007640000000601607616533072013560 0ustar bbbb/* * * dumphostsvc.c * BIG BROTHER DISPLAY HTML STATUS LOG * Robert-Andre Croteau * Version 1.9 * Mar 13th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * Take the status log and save an HTML version of it in a buffer * */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #include #include #include #ifdef TIMEH #include #else #include #endif char bbprog[] = "dumphostsvc"; int main(argc, argv) int argc; char *argv[]; { struct stat statbuf; time_t stattime; int statres,retc,len; char *statusdata,*hostsvcdata,*timebuf; FILE *logfp; char *bbhome,*bbweb; char bbwebdir[MAXLINE]; char filemode[MAXLINE]; extern char *dohostsvc(); extern int getheader(), getfooter(); if( argc != 3 ) { printf("dumphostsvc: invalid argument\n"); exit(1); } bbhome=(char *)getenv("BBHOME"); if (bbhome) { len=strlen(bbhome); if (len > MAXLINE - 50) { /* CHECK THIS... */ printf("dumphostsvc: BBHOME is invalid - %s\n",bbhome); exit(1); } sprintf(bbwebdir, "%s/web", bbhome); } else { printf("dumphostsvc: BBHOME is undefined\n"); exit(1); } bbweb=(char *)getenv("BBWEB"); if (bbweb == NULL) { printf("dumphostsvc: BBWEB is undefined\n"); exit(1); } /* get file info */ statres=stat(argv[1], &statbuf); if( statres == -1 ) { printf("dumphostsvc: file not found - %s\n",argv[1]); exit(1); } if ( !(statbuf.st_mode & S_IFREG) ) { printf("dumphostsvc: invalid file - %s\n",argv[1]); exit(1); } if(strlen(argv[2]) > (MAXLINE - 1) ) { printf("dumphostsvc: invalid file mode - %s\n",argv[2]); } sprintf(filemode,"%s_header",argv[2]); getheader(bbwebdir,filemode); sprintf(filemode,"%s_footer",argv[2]); getfooter(bbwebdir,filemode); /* build buffer to receive status log */ statusdata = (char *) calloc(1,statbuf.st_size+128); if( statusdata == NULL ) { printf("dumphostsvc: out of memory\n"); exit(1); } /* open file */ if( (logfp = fopen(argv[1],"r")) == NULL ) { printf("dumphostsvc: can't open file - %s\n",argv[1]); free(statusdata); exit(1); } /* read it in */ retc = fread(statusdata,statbuf.st_size,1,logfp); if ( retc != 1 || (strlen(statusdata) != statbuf.st_size)) { printf("dumphostsvc: error while reading - %s\n",argv[1]); free(statusdata); exit(1); } /* close file */ fclose(logfp); /* call dohostsvc() */ stattime = statbuf.st_ctime; timebuf = ctime(&stattime); hostsvcdata = dohostsvc(statusdata,argv[1],bbweb,bbwebdir,timebuf); /* display result */ if( hostsvcdata != NULL ) { fwrite(hostsvcdata,strlen(hostsvcdata),1,stdout); } else { printf("dumphostsvc: out of memory\n"); exit(1); } free(hostsvcdata); exit(0); } ./bb/bb19c/src/bbd.c0100644002342100007640000015445507616533072011743 0ustar bbbb/* * * bbd.c * BIG BROTHER DAEMON PROGRAM * Version 1.9b * Mar 28th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * This daemon just listens on a port, accepts single lines of input * and handles them. It doesn't send any acknowledgements back... * * Two types of actions are possible, depending on the content we get: * * 1. Input for the display monitor * 2. Request to send a page to the admin */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #include #include #include #ifdef TIMEH #include #else #include #endif #include /* SMM NEW */ #include #ifdef SCO3 #include #endif char bbprog[] = "bbd"; /* OLD struct in_addr securedb[MAXLINE]; */ struct sec { struct in_addr addr; struct in_addr mask; }; /* * OK... THIS IS NOW AN ARRAY OF ADDRESSES AND NETMASKS */ struct sec secdb[MAXLINE]; char *bbhome; int fqdn; char bblogsdir[MAXLINE]; /* DIRECTORY TO PUT LOG FILES INTO */ char bbhistdir[MAXLINE]; /* DIRECTORY TO PUT HISTORY FILES INTO */ char bbhistlogsdir[MAXLINE]; /* DIRECTORY TO PUT HISTORICAL LOG FILES INTO */ char bbhtmldir[MAXLINE]; /* DIRECTORY TO PUT HTML FILES INTO */ char bbwebdir[MAXLINE]; /* DIRECTORY WHERE HTML STATUS PAGE's FOOTER & HEADER CAN BE FOUND */ char bbtmpdir[MAXLINE]; /* TEMPORARY WORK DIRECTORY */ char *bbpid; /* BBD PID FILE */ char security[MAXLINE]; /* WHERE THE BBD SECURITY FILE LIVES */ char pager[MAXLINE]; /* BB-PAGER PROGRAM LOCATION */ char bb[MAXLINE]; /* BB PROGRAM LOCATION */ char *machineaddr; /* IP ADDRESS OF CURRENT HOST (IP or DNS) */ char *bbpage; /* IP ADDRESS OF BB PAGER - 0.0.0.0 if multiple */ char *bbpagers; /* IP ADDRESS OF BB PAGERS */ char *bbdisp; /* IP ADDRESS OF BB DISPLAY - 0.0.0.0 if multiple */ char *bbdisplays; /* IP ADDRESS OF BB BBDISPLAYS */ char bbdisabledir[MAXLINE]; /* DIRECTORY TO PUT DISABLED HOSTS INTO */ char allhistname[MAXLINE]; /* NAME OF FILE THAT CONTAINS EVENTS LOG SUMMARY FOR ALL LOG EVENTS */ char bbdatadir[MAXLINE]; /* DIRECTORY TO PUT DATA FILES INTO */ char bbnotesdir[MAXLINE]; /* DIRECTORY TO PUT NOTES FILES INTO */ char bbvardir[MAXLINE]; /* DIRECTORY LEVEL FOR bbvar/ */ char bbacksdir[MAXLINE]; /* DIRECTORY TO PUT ACKS LOG FILES INTO */ char bb_hosts[MAXLINE]; /* LOCATION OF bb-hosts file */ char *bbdisplay; /* SET TO TRUE IF HOST IS A BBDISPLAY */ char *bbpager; /* SET TO TRUE IF HOST IS A BBPAGER */ char *bbrelays; /* HOSTS TO RELAY MESSAGES TO */ char *pagelevels; char *savestatuslog; char *bbweb; char *bbhosthistlog; /* SAVE HISTORICAL LOG PER HOST ? */ char *bballhistlog; /* SAVE HISTORICAL LOG FOR ALL HOSTS ? */ char *ipdotaddr; /* IP address of the end connection in dot notation */ char *recvfromstrp; char *statunchstrp; char *bblogstatus; char *perioddays; char *periodhours; char *periodmins; int purpleoffset; static char bbdisplays_env[MAXLINE]; /* Static variable for putenv() of BBDISPLAYS */ #ifdef SIGSETJMP sigjmp_buf jmpenv; #else jmp_buf jmpenv; #endif void do_bb(); void bblog(); char *gettimestr(); void loadfiles() { extern int getheader(), getfooter(); getheader(bbwebdir,NULL); getfooter(bbwebdir,NULL); /* * BB SECURITY ENHANCEMENT * ALLOW BB TO RESTRICT ACCESS BASED ON A LIST OF * NUMERIC HOSTS/MASKS LOCATED IN etc/security */ getsecurity(); /* GET VALID HOSTS AND MASKS */ /* Reset the signal */ signal(SIGHUP, (void *)loadfiles); } /* * Return the # of seconds defined by the setting * * XXX - in minutes (x60) * XXXs - in seconds (x1) * XXXm - in minutes (x60) * XXXh - in hours (x1440) * * when no qualifier is specified, it is taken as in minutes * */ int calc_purple_offset(validfor) char *validfor; { int offsetval; int offset; int qualifierpos; char validstr[MAXLINE]; if( !validfor || (strlen(validfor) == 0) ) return(-1); /* Keep a fresh copy of validfor */ /* Thanks to Michael Salmon */ memset(validstr,0,sizeof(validstr)); strncpy(validstr,validfor,MAXLINE-1); #if DEBUG debug("calc_purple_offset() - validfor: <%s> validstr: <%s>\n",validfor,validstr); fflush(stdout); #endif offsetval = 60; /* Default, in minutes so multiply by 60 to make it in seconds */ qualifierpos = strlen(validstr)-1; #if DEBUG debug("calc_purple_offset() - offsetval: <%d> qualifierpos: <%d>\n",offsetval,qualifierpos); fflush(stdout); #endif if( isalpha(validstr[qualifierpos]) ) { validstr[qualifierpos] = tolower(validstr[qualifierpos]); #if DEBUG debug("calc_purple_offset() - validstr[qualifierpos]: <%c>\n",tolower(validstr[qualifierpos])); fflush(stdout); #endif if( tolower(validstr[qualifierpos]) == 's' ) offsetval = 1; else if( tolower(validstr[qualifierpos]) == 'm' ) offsetval = 60; else if( tolower(validstr[qualifierpos]) == 'h' ) offsetval = 3600; else if( tolower(validstr[qualifierpos]) == 'd' ) offsetval = 86400; validstr[qualifierpos] = '\0'; } #if DEBUG debug("calc_purple_offset() - validstr: <%s> offsetval: <%d>\n",validstr,offsetval); fflush(stdout); #endif offset = atoi(validstr); offset *= offsetval; #if DEBUG debug("calc_purple_offset() - returns: <%d>\n",offset); fflush(stdout); #endif return(offset); } int enable_disable(req,flags) char *req; int flags; { char *msgtype; char hostexp[MAXLINE], duration[MAXLINE], msg[MAXLINE]; char errormsg[MAXLINE],*workptr; char request[MAXLINE]; char logfilename[MAXLINE],bbhostslist[MAXLINE]; int ftype,count,rc; DIR *dirinfo; char bbmsg[MAXLINE]; char filemask[MAXLINE]; #ifdef SCO3 pid_t child; #else int child; #endif int status; if( !req ) { return(0); } if( !( (flags & BB_DISABLEMSG) || (flags && BB_ENABLEMSG)) ) { return(0); } #if DEBUG fprintf(stderr,"enable/disable: request <%s> flags <%d>\n",req,flags); fflush(stderr); #endif if( flags & BB_DISABLEMSG ) { msgtype = "disable"; } else { msgtype = "enable"; } stripleadtrailspaces(req); if( strlen(req) == 0 ) { bb_errmsg(msgtype,"Null request"); return(0); } memset(request,0,sizeof(request)); strncpy(request,req,sizeof(request)-1); if( strlen(request) >= (sizeof(request)-1) ) { bb_errmsg(msgtype,"Request truncated, exceeded maximum length"); } memset(hostexp,0,sizeof(hostexp)); memset(duration,0,sizeof(duration)); memset(msg,0,sizeof(msg)); sscanf(request,"%s",hostexp); workptr = request + strlen(hostexp); stripleadspaces(workptr); if( flags & BB_DISABLEMSG ) { sscanf(workptr,"%s",duration); if( strlen(duration) == 0 ) { bb_errmsg(msgtype,"Duration value missing"); return(0); } workptr = workptr + strlen(duration); stripleadspaces(workptr); if( !match(duration,"[0-9][0-9]*",REG_FULL) ) { if( !match(duration,"[0-9][0-9]*[smhdSMHD]",REG_FULL) ) { sprintf(errormsg,"Invalid duration value: <%s>",duration); bb_errmsg(msgtype,errormsg); return(0); } } /* * If the duration is 0, then stop (why disable for 0 seconds ?) */ if( match(duration,"0*",REG_FULL) || match(duration,"[0]*[smhdSMHD]",REG_FULL) ) { sprintf(errormsg,"Invalid duration value: <%s>",duration); bb_errmsg(msgtype,errormsg); return(0); } if( strlen(workptr) > 0 ) { strncpy(msg,workptr,sizeof(msg)-1); } #if DEBUG fprintf(stderr,"disable: hosts exp <%s> duration <%s> reason <%s>\n",hostexp,duration,msg); fflush(stderr); #endif } else { if( strlen(workptr) > 0 ) { bb_errmsg(msgtype,"Invalid arguments provided, ignored"); } #if DEBUG fprintf(stderr,"enable: hosts exp <%s>\n",hostexp); fflush(stderr); #endif } /* * offline message should only go to local BBDISPLAY that started this script * and ALL BBPAGERS ... This way we're sure that there's no SPOF * to receive an offline message for the BBPAGERS. * Don't send duplicate messages when BBDISPLAY == BBPAGER * All hosts are saved in bbhostslist */ #if DEBUG fprintf(stderr,"enable/disable: bbpage <%s> bbpagers <%s> machineaddr <%s>\n",bbpage,bbpagers,machineaddr); fflush(stderr); #endif memset(bbhostslist,0,sizeof(bbhostslist)); if( strcmp(bbpage,"0.0.0.0") == 0 ) { if( strlen(bbpagers) > 0 ) { strcpy(bbhostslist,bbpagers); } replacestr(bbhostslist,sizeof(bbhostslist),machineaddr,""); if( strlen(bbhostslist) > 0 ) { strcat(bbhostslist," "); } } else { if( strcmp(bbpage,machineaddr) != 0 ) { strcpy(bbhostslist,bbpage); strcat(bbhostslist," "); } } strcat(bbhostslist,machineaddr); replacestr(bbhostslist,sizeof(bbhostslist),"0.0.0.0",""); stripleadtrailspaces(bbhostslist); #if DEBUG fprintf(stderr,"enable/disable: bbhostslist <%s>\n",bbhostslist); fflush(stderr); #endif if( strlen(bbhostslist) == 0 ) { bb_errmsg(msgtype,"Null BBDISPLAY list, aborted"); return(0); } bb_putenv("BBDISPLAYS",bbhostslist,bbdisplays_env,sizeof(bbdisplays_env)); /* Get each log filename in $BBLOGS */ count = 0; if( strcmp(hostexp,"*") == 0 ) { strcpy(hostexp,".*"); } sprintf(filemask,"%s",hostexp); dirinfo = NULL; rc = getdirfirst(&dirinfo,bblogsdir,filemask,logfilename,GETDIR_FILE,&ftype); while( rc == 1 ) { /* Don't do files that start with '.' */ if( logfilename[0] == '.' ) { goto nextfile; } /* Don't do summary logs ... */ if( strncmp(logfilename,"summary.",strlen("summary.")) == 0 ) { goto nextfile; } /* Send BB message */ if( flags & BB_DISABLEMSG ) { /* offline */ sprintf(bbmsg,"offline %s %s",logfilename,duration); if( strlen(msg) > 0 ) { strcat(bbmsg," "); strncat(bbmsg,msg,sizeof(msg)-1-strlen(bbmsg)); } } else { /* online */ sprintf(bbmsg,"online %s",logfilename); } #if DEBUG fprintf(stderr,"enable/disable: bbsend(<%s>,<%s>)\n",bbhostslist,bbmsg); fflush(stderr); #endif if ((child = fork()) < 0) bbd_die("fork error"); /* child does work, thanks to svangari@uu.net */ if (child == 0) { /* THE CHILD */ /* For ZOMBIE prone OSes, use the bb exec instead of bbsend() */ /* The reason is if bbsend() gets stuck, then the whole bbd */ /* waits for the child process to end */ #ifdef ZOMBIE execlp(bb, bb, "0.0.0.0", bbmsg, (char *)NULL); #else rc = bbsend("0.0.0.0",bbhostslist,bbmsg); exit(rc); #endif } /* Parent continues */ #ifdef ZOMBIE wait(&status); #endif count++; nextfile: rc = getdirnext(dirinfo,bblogsdir,filemask,logfilename,GETDIR_FILE,&ftype); } bb_putenv("BBDISPLAYS",bbdisplays,bbdisplays_env,sizeof(bbdisplays_env)); getdirdone(dirinfo); if( count == 0 ) { bb_errmsg(msgtype,"No match"); return(0); } return(1); } void bb_online(req) char *req; { char host[MAXLINE]; char filename[MAXLINE]; if( strlen(req) > (MAXLINE - 2) ) { #if DEBUG debug("<%s> ONLINE MSG IS TOO LARGE\n",req); fflush(stdout); #endif return; } /* sscanf() goes before valid_logname check */ /* Thanks to Dominique FRISE */ sscanf(req,"%s",host); if( !valid_logname(host) ) { fprintf(stderr,"%s bbd INVALID FILENAME SPECIFIED IN online MESSAGE: %s\n",gettimestr(),host); fflush(stderr); return; } sprintf(filename,"%s/%s",bbdisabledir,host); unlink(filename); } void bb_offline(req) char *req; { } void bbsave(req,type) char *req,*type; { FILE *fp; char filemode[5], *dataptr; char filename[MAXLINE],*fname; char filepath[MAXLINE]; int rc; if( strcmp(type,"data") == 0 ) { /* For "data" we append */ strcpy(filemode,"a+"); } else if( strcmp(type,"notes") == 0 ) { /* For "notes" overwrite */ strcpy(filemode,"w+"); } else { /* It ain't "data" or "notes", get out */ return; } /* Check filename validity */ /* Remove the basename from it */ filename[0] = '\0'; rc = sscanf(req,"%s",filename); if( rc != 1 ) { return; } fname = (char *) strrchr(filename,'/'); if( fname == NULL ) { fname = filename; /* Set to filename */ } else { fname++; /* Skip slash */ } /* Name can't start with '.' , '-' or non-print character */ if( *fname == '.' || *fname == '-' || !isprint(*fname) ) { return; } /* Do we have any real data ? */ dataptr = (char *) strstr(req,filename); if( dataptr == NULL ) { /* This should never happen */ return; } /* Position at character right after the name */ dataptr += strlen(filename); while( isspace(*dataptr) ) { dataptr++; } /* End of string == No data */ if( *dataptr == '\0' ) { return; } if( strcmp(type,"data") == 0 ) { /* For "data" we append */ sprintf(filepath,"%s/%s",bbdatadir,fname); } else if( strcmp(type,"notes") == 0 ) { /* For "notes" overwrite */ sprintf(filepath,"%s/%s",bbnotesdir,fname); } /* Try to open the file */ if( (fp=fopen(filepath,filemode)) == NULL ) { return; } fprintf(fp,"%s\n",dataptr); fclose(fp); return; } void bb_utime(filename,timestamp) char *filename; time_t timestamp; { struct utimbuf tb; tb.actime = timestamp; tb.modtime = timestamp; utime(filename, &tb); } /* RETURN VALUES: * * 0 - not disabled * 1 - disabled * */ int bb_isdisabled(filename) char *filename; { char disfname[MAXLINE]; struct stat statbuf; int statres; time_t timenow; /* TRY TO STAT THE EVENT IN THE /disabled DIRECTORY */ sprintf(disfname, "%s/%s", bbdisabledir, filename); #if DEBUG debug("disfname: %s\n",disfname); fflush(stdout); #endif statres=stat(disfname, &statbuf); time(&timenow); /* GET THE TIME */ /* IS FILE IN disabled/ DIRECTORY */ if( statres == 0 ) { #if DEBUG debug("%s exists !\n",disfname); fflush(stdout); #endif /* YUP, HAS IT EXPIRED ? */ if( statbuf.st_mtime < timenow ) { /* YUP, REMOVE IT, IT'S NOT NEEDED ANYMORE */ #if DEBUG debug("%s has expired, remoing it !\n",disfname); #endif unlink(disfname); } else { /* DISABLING STILL IN EFFECT DON'T DO ANYTHING ELSE */ return(1); } } return(0); } /* * 0 - Error * 1 - Successful */ int save_histlog(histlogdirname,timenowbuf,logdata,dur,sentby) char *histlogdirname; char *timenowbuf; char *logdata; char *dur; char *sentby; { char filename[MAXLINE],*fname,*svc,workfname[MAXLINE],*workptr; struct stat statinfo; FILE *fp; fname = (char *) strrchr(histlogdirname,'/'); if( fname ) { fname++; if( !*fname ) { fprintf(stderr,"%s bbd Invalid histlog file directory name: %s\n",gettimestr(),histlogdirname); fflush(stderr); return(0); } strcpy(workfname,fname); } else { strcpy(workfname,histlogdirname); } svc = (char *) strchr(workfname,'.'); if( !svc ) { fprintf(stderr,"%s bbd Invalid histlog file directory name: %s\n",gettimestr(),histlogdirname); fflush(stderr); return(0); } *svc = '\0'; svc++; if( !*svc ) { fprintf(stderr,"%s bbd Invalid histlog file directory name: %s\n",gettimestr(),histlogdirname); fflush(stderr); return(0); } while( (workptr=(char *)strchr(workfname,',')) != NULL ) { *workptr = '_'; workptr++; } sprintf(filename,"%s/%s",bbhistlogsdir,workfname); if( stat(filename,&statinfo) != 0 ) { if( mkdir(filename,S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) != 0 ) { fprintf(stderr,"%s bbd Cannot create <%s> directory\n",gettimestr(),filename); fflush(stderr); return(0); } } strcat(filename,"/"); strcat(filename,svc); if( stat(filename,&statinfo) != 0 ) { if( mkdir(filename,S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH) != 0 ) { fprintf(stderr,"%s bbd Cannot create <%s> directory\n",gettimestr(),filename); fflush(stderr); return(0); } } /* At most only one space */ strcpy(workfname,timenowbuf); replacestr(workfname,sizeof(workfname)-1," "," "); while( (workptr=(char *)strchr(workfname,' ')) != NULL ) { *workptr = '_'; workptr++; } strcat(filename,"/"); strcat(filename,workfname); if( (fp=fopen(filename,"w")) == NULL ) { fprintf(stderr,"%s bbd Cannot create <%s> file\n",gettimestr(),filename); fflush(stderr); return(0); } fprintf(fp,"%s\n\n%s%s", logdata, dur,sentby); fclose(fp); return(1); } #ifndef FUNCINFUNCOK /* * BBD ALARM */ static void bbd_timeout() { fprintf(stderr,"%s bbd Connection hung from %s (dropped)\n", gettimestr(), ipdotaddr); exit(1); } #endif int main(argc, argv) int argc; char *argv[]; { #ifdef SCO3 pid_t child; #else int child; #endif int status, sockfd, newsockfd, port, len, ttllen; struct sockaddr_in serv_addr, cli_addr; static char linebuf[MAXLINE]; static char msgbuf[MAXLINE]; /* INCOMING MESSAGE BUFFER */ char msgbuf_relay[MAXLINE]; /* OUTGOING RELAY MESSAGE BUFFER */ int on=1; struct in_addr inc; char *bbtmpvar,*bblogsvar,*bbdisabledvar,*bbhistvar,*bbhistlogsvar,*bbdatavar,*bbacksvar,*bbhostsvar,*fqdnval; FILE *bbf; char *purpledelay; int dorecv; int truncated; /* SMM */ #ifdef FUNCINFUNCOK /* * BBD ALARM */ static void bbd_timeout() { if( strlen(msgbuf) > 0 ) { fprintf(stderr,"%s bbd Connection terminated from %s (partial message)\n", gettimestr(), ipdotaddr); #ifdef SIGSETJMP siglongjmp(jmpenv,1); #else longjmp(jmpenv,1); #endif } else { fprintf(stderr,"%s bbd Connection hung from %s (dropped)\n", gettimestr(), ipdotaddr); exit(1); } } #endif #if DEBUG debug("*** Starting bbd ***: PID %d - PPID %d\n",getpid(), getppid()); #endif machineaddr=(char *)getenv("MACHINEADDR"); if (!machineaddr || strlen(machineaddr) == 0 ) { fprintf(stderr,"%s bbd MACHINEADDR is not set in the environment! Make sure you're running bbd from runbb.sh!\n",gettimestr()); exit(1); } bbpager=(char *)getenv("BBPAGER"); if(!bbpager) { bbpager = ""; } bbpage=(char *)getenv("BBPAGE"); if (!bbpage || strlen(bbpage) == 0 ) { fprintf(stderr,"%s bbd BBPAGE is not set in the environment! Make sure you're running bbd from runbb.sh!\n",gettimestr()); exit(1); } bbpagers=(char *)getenv("BBPAGERS"); if(!bbpagers) { bbpagers = ""; } bbdisplay=(char *)getenv("BBDISPLAY"); if(!bbdisplay) { bbdisplay = ""; } bbdisp=(char *)getenv("BBDISP"); if (!bbdisp || strlen(bbdisp) == 0 ) { fprintf(stderr,"%s bbd BBDISP is not set in the environment! Make sure you're running bbd from runbb.sh!\n",gettimestr()); exit(1); } bbdisplays=(char *)getenv("BBDISPLAYS"); if(!bbdisplays) { bbdisplays = ""; } bbrelays=(char *)getenv("BBRELAYS"); if(!bbrelays) { bbrelays = ""; } stripleadtrailspaces(bbrelays); bbhome=(char *)getenv("BBHOME"); if (bbhome) { len=strlen(bbhome); if (len > MAXLINE - 50) { /* CHECK THIS... */ fprintf(stderr,"%s bbd BBHOME is too large - go away!\n",gettimestr()); exit(1); } /* BBTMP wasn't used in bbd, now it is ;) */ /* thanks to Leonid Massarskiy */ /* for pointing this out */ bbtmpvar=(char *)getenv("BBTMP"); if (!bbtmpvar || (strlen(bbtmpvar) == 0) ) { fprintf(stderr,"%s bbd BBTMP is not set in the environment! $BBHOME/tmp will be used\n",gettimestr()); fflush(stderr); sprintf(bbtmpdir,"%s/tmp",bbhome); } else { strcpy(bbtmpdir,bbtmpvar); } /* Get where the logs are saved (BBLOGS) */ bblogsvar=(char *)getenv("BBLOGS"); if (!bblogsvar || (strlen(bblogsvar) == 0) ) { fprintf(stderr,"%s bbd BBLOGS is not set in the environment!\n",gettimestr()); exit(1); } else { sprintf(bblogsdir, "%s", bblogsvar); } /* Get where the disable tag files are saved (BBDISABLE) */ bbdisabledvar=(char *)getenv("BBDISABLED"); if (!bbdisabledvar || (strlen(bbdisabledvar) == 0) ) { fprintf(stderr,"%s bbd BBDISABLED is not set in the environment!\n",gettimestr()); exit(1); } else { sprintf(bbdisabledir, "%s", bbdisabledvar); } /* Get where the hist files are saved (BBHIST) */ bbhistvar=(char *)getenv("BBHIST"); if (!bbhistvar || (strlen(bbhistvar) == 0) ) { fprintf(stderr,"%s bbd BBHIST is not set in the environment!\n",gettimestr()); exit(1); } else { sprintf(bbhistdir, "%s", bbhistvar); } /* Get where the historical log files are saved (BBHIST) */ bbhistlogsvar=(char *)getenv("BBHISTLOGS"); if (!bbhistlogsvar || (strlen(bbhistlogsvar) == 0) ) { fprintf(stderr,"%s bbd BBHISTLOGS is not set in the environment!\n",gettimestr()); exit(1); } else { sprintf(bbhistlogsdir, "%s", bbhistlogsvar); } /* Get where the datafiles are saved (BBDATA) */ bbdatavar=(char *)getenv("BBDATA"); if (!bbdatavar || (strlen(bbdatavar) == 0) ) { fprintf(stderr,"%s bbd BBDATA is not set in the environment!\n",gettimestr()); exit(1); } else { sprintf(bbdatadir, "%s", bbdatavar); } /* Get where the acks log files are saved (BBACKS) */ bbacksvar=(char *)getenv("BBACKS"); if (!bbacksvar || (strlen(bbacksvar) == 0) ) { fprintf(stderr,"%s bbd BBACKS is not set in the environment!\n",gettimestr()); exit(1); } else { sprintf(bbacksdir, "%s", bbacksvar); } /* Get where the BBPID file is located */ bbpid=(char *)getenv("BBPID"); if (!bbpid || (strlen(bbpid) == 0) ) { fprintf(stderr,"%s bbd BBPID is not set in the environment!\n",gettimestr()); exit(1); } /* Get where the bb-hosts file live (BBHOSTS) */ bbhostsvar=(char *)getenv("BBHOSTS"); if (!bbhostsvar || (strlen(bbhostsvar) == 0) ) { fprintf(stderr,"%s bbd BBHOSTS is not set in the environment!\n",gettimestr()); exit(1); } else { sprintf(bb_hosts, "%s", bbhostsvar); } sprintf(allhistname,"%s/allevents",bbhistdir); sprintf(bbhtmldir, "%s/www/html", bbhome); sprintf(security, "%s/etc/security", bbhome); sprintf(bbwebdir, "%s/web", bbhome); sprintf(pager, "%s/bin/bbpage", bbhome); sprintf(bb, "%s/bin/bb", bbhome); sprintf(bbnotesdir, "%s/www/notes", bbhome); } else { fprintf(stderr,"%s bbd BBHOME is not set in the environment! Make sure you're running bbd from runbb.sh!\n",gettimestr()); exit(1); } fqdnval = (char *) getenv("FQDN"); if( fqdnval == NULL ) { fqdn = 1; } else { if( strlen(fqdnval) == 0 ) { fqdn = 1; } else if( strcmp(fqdnval,"TRUE") == 0 ) { fqdn = 1; } else { fqdn = 0; } } pagelevels= (char *) getenv("PAGELEVELS"); if ( pagelevels == NULL ) pagelevels=""; savestatuslog = (char *) getenv("SAVESTATUSLOG"); if ( savestatuslog == NULL ) savestatuslog=""; bbweb = (char *) getenv("BBWEB"); if ( bbweb == NULL ) bbweb=""; purpledelay = (char *) getenv("PURPLEDELAY"); if ( purpledelay == NULL ) { purpledelay = "30"; purpleoffset = 30 * 60; } else { purpleoffset = 0; /* Use abs for PURPLEDELAY */ /* Thanks to Jon Monroe */ if( purpleoffset <= 0 ) { purpleoffset = 30 * 60; } else { purpleoffset = calc_purple_offset(purpledelay); } } #if DEBUG debug("purpledelay: <%s> purpleoffset: <%d>\n",purpledelay,purpleoffset); fflush(stdout); #endif bbhosthistlog = (char *) getenv("BBHOSTHISTLOG"); if ( bbhosthistlog == NULL ) bbhosthistlog=""; bballhistlog = (char *) getenv("BBALLHISTLOG"); if ( bballhistlog == NULL ) bballhistlog=""; recvfromstrp= (char *) getenv("RECVFROMMSG"); if( recvfromstrp == NULL ) recvfromstrp = "Status message received from"; statunchstrp= (char *) getenv("STATUNCHMSG"); if( statunchstrp == NULL ) statunchstrp = "Status unchanged in"; bblogstatus = (char *) getenv("BBLOGSTATUS"); if( bblogstatus == NULL ) bblogstatus = "STATIC"; perioddays= (char *) getenv("DAYS"); if( perioddays == NULL ) perioddays = "days"; periodhours= (char *) getenv("HOURS"); if( periodhours == NULL ) periodhours = "hours"; periodmins= (char *) getenv("MINS"); if( periodmins == NULL ) periodmins = "minutes"; port = PORT; #if DEBUG debug("MAKING SOCKET CONNECTION...\n"); #endif if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { fprintf(stderr, "%s bbd Can't open socket\n",gettimestr()); exit(1); } #if DEBUG debug("SOCKET CONNECTED OK... : %d\n",sockfd); #endif /* * FINALLY FIX THE REUSE BUGLET * THANKS TO Gary Mills */ (void)setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof on); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(port); #if DEBUG debug("BINDING TO SOCKET...\n"); #endif if (bind(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0) { /* DON'T HARDCODE PORT NUMBER: frank@bluegrass.net */ fprintf(stderr,"%s bbd: Can't bind to port %d - is bbd already running?\n", gettimestr(), port); exit(2); } #if DEBUG debug("SOCKET BOUND OK...\n"); #endif /* * NOW THE PARENT EXITS AND THE CHILD DETACHES FROM THE CONTROLLING TTY * SET UP TO IGNORE SIGNALS SENT BY EXITING CHILDREN */ if ((child = fork()) != 0) { #if DEBUG debug("TRYING TO OPEN BBFILE %s\n", bbpid); #endif bbf = fopen(bbpid, "w"); if (bbf) { fprintf(bbf, "%d \n", child); fclose(bbf); } exit(0); /* PARENT EXITS */ } setsid(); /* RELEASE TTY */ #ifndef ZOMBIE signal(SIGCHLD, SIG_IGN); #endif /* Load up the standard header/footer file */ signal(SIGHUP, (void *)loadfiles); loadfiles(); /* * NOW SET UP THE LISTENING LOOP */ listen(sockfd, 250); for ( ;; ) { #if DEBUG debug("about to accept()\n"); #endif len = sizeof(cli_addr); newsockfd = accept(sockfd,(struct sockaddr*)&cli_addr,&len); /* * THANKS TO Marc L. Allen (allen@chesapeake.rps.slb.com) */ if (newsockfd < 0 ) { #if DEBUG debug("accept(): %d : %d\n", newsockfd, errno); #endif if (errno == EINTR) continue; else { /* * Jac Kersing *kersing@the-box.com) * Just retry. Might be a killed client */ sleep(5); /* On some OS you must reset */ signal(SIGHUP, (void *)loadfiles); continue; } } /* * SMM BBD SECURITY CHECK */ inc.s_addr = cli_addr.sin_addr.s_addr; ipdotaddr = (char *)inet_ntoa( cli_addr.sin_addr ); #if DEBUG debug("INCOMING CONNECTION FROM: %u - %s\n", inc.s_addr,ipdotaddr); #endif if (checksecurity(&inc) == 0) { /* FAIL */ fprintf(stderr,"%s bbd Incoming message from %u - %s refused\n",gettimestr(),(unsigned int)inc.s_addr,ipdotaddr); fflush(stderr); close(newsockfd); continue; } /* * NOW FORK OFF AND LET THE CHILD HANDLE THE REQUEST if ((child = fork()) < 0) bbd_die("fork error"); */ if ((child = fork()) < 0) fprintf(stderr, "ARRRGH!!! THE FORK ERROR!\n"); if (child != 0) { /* THE PARENT */ close(newsockfd); #ifdef ZOMBIE #if DEBUG debug("WAIT FOR CHILD EXIT...\n"); #endif wait(&status); #if DEBUG debug("CLEANED UP CHILD: %d\n", status); #endif #endif /* ZOMBIE */ } else { /* THE CHILD */ /* No funnies if someone tries SIGHUPping the child */ signal(SIGHUP, SIG_IGN); close(sockfd); /* * NOW GET THE LINE FROM THE CLIENT * AND HANDLE THE REQUEST... * IGNORE BAD DATA... * 1.07c ADDED SUPPORT FOR MESSAGES UP TO 8K */ ttllen = 0; memset(msgbuf,'\0',sizeof(msgbuf)); memset(linebuf,'\0',sizeof(linebuf)); #if DEBUG debug("NEW INCOMING MESSAGE\n"); #endif /* * THIS IS TO HANDLE CONNECTIONS THAT GET * "STUCK" - MOSTLY NT TALKING TO SOLARIS * THANKS TO jrivel@dti.net */ dorecv = 1; truncated = 0; signal(SIGALRM, (void *)bbd_timeout); alarm(5); /* SMM */ #ifdef SIGSETJMP if (sigsetjmp(jmpenv,1) != 0) { #else if (setjmp(jmpenv) != 0) { #endif /* The connection hung but partial data came in */ /* Continue on but skip over recv() call */ dorecv = 0; } while ( dorecv && ((len = recv(newsockfd, linebuf, MAXLINE - 1, 0)) > 0) && (ttllen != -1)) { alarm(5); /* SMM */ linebuf[len]='\0'; /* FOR ANDREY */ #if DEBUG debug("MESSAGE LEN: %d TOTAL: %d\n", len, ttllen); #endif /* * IF IT'S GOING TO BE TOO BIG... * THE 30 CHARS IS FOR THE TRUNCATED MSG */ if (ttllen + len + 30 > (MAXLINE-1)) { truncated = 1; /* SMM */ len = MAXLINE - ttllen - 30; if ( len > 0 ) { memcpy(msgbuf+ttllen, linebuf, len); } ttllen = ttllen + len; *(msgbuf+ttllen) = '\0'; break; } else { /* SMM MAKE THIS NULL-SAFE */ if( len > 0 ) { memcpy(msgbuf+ttllen, linebuf, len); } ttllen = ttllen + len; *(msgbuf+ttllen) = '\0'; memset(linebuf,'\0',sizeof(linebuf)); } } alarm(0); if (ttllen != 0) { if (truncated == 1) { strcat(msgbuf, "\n\n... DATA TRUNCATED ...\n"); /* 25 chars ! */ /* fprintf(stderr, "SIZEOF STRLEN MSGBUF %d %d\n", sizeof(msgbuf), strlen(msgbuf)); */ } #ifndef DONTCLEANSTRING replacestr(msgbuf,sizeof(msgbuf),"&red","^red"); replacestr(msgbuf,sizeof(msgbuf),"&green","^green"); replacestr(msgbuf,sizeof(msgbuf),"&yellow","^yellow"); replacestr(msgbuf,sizeof(msgbuf),"&purple","^purple"); replacestr(msgbuf,sizeof(msgbuf),"&clear","^clear"); replacestr(msgbuf,sizeof(msgbuf),"&blue","^blue"); #ifdef NOTAMP clean_string(msgbuf,"`$;|\\",'_'); #else clean_string(msgbuf,"`$;|&\\",'_'); #endif replacestr(msgbuf,sizeof(msgbuf),"^red","&red"); replacestr(msgbuf,sizeof(msgbuf),"^green","&green"); replacestr(msgbuf,sizeof(msgbuf),"^yellow","&yellow"); replacestr(msgbuf,sizeof(msgbuf),"^purple","&purple"); replacestr(msgbuf,sizeof(msgbuf),"^clear","&clear"); replacestr(msgbuf,sizeof(msgbuf),"^blue","&blue"); #endif if( strlen(bbrelays) > 0 ) { memset(msgbuf_relay,0,sizeof(msgbuf_relay)); strncpy(msgbuf_relay,msgbuf,sizeof(msgbuf_relay)-1); } do_bb(msgbuf); /* Relay message if need be */ if( strlen(bbrelays) > 0 ) { /* * NOW FORK OFF AND LET THE CHILD HANDLE THE RELAY REQUEST */ /* Double fork to prevent zombie */ if ((child = fork()) < 0) { fprintf(stderr, "ARRRGH!!! THE FORK ERROR!\n"); } else if (child == 0) { /* THE PARENT */ if ((child = fork()) < 0) { fprintf(stderr, "ARRRGH!!! THE FORK ERROR!\n"); } else if(child == 0) { bbsend("0.0.0.0",bbrelays,msgbuf_relay); } exit(0); } else { wait(&status); } } } close(newsockfd); exit(0); } } } /* * HANDLE INCOMING BIG BROTHER REQUESTS * PARSE THE LINE WE'VE RECEIVED AND HANDLE IT */ void do_bb(req) char *req; { char filename[MAXLINE]; void bb_page(); char *nextmsg; /* SMM COMBO */ #if DEBUG debug("REC'D: %s\n", req); #endif /* * IF THE REQUEST STARTS WITH "page" THEN CALL THE PAGING SCRIPT * IF THE REQUEST STARTS WITH "status" THEN LOG THE MESSAGE * IF THE REQUEST STARTS WITH "combo" THEN SET A FLAG AND PROCESS MSGS * IF THE REQUEST STARTS WITH "summary" THEN LOG THE MESSAGE * IF THE REQUEST STARTS WITH "ack" THEN PROCEED WITH AN ACKNOWLEDGEMENT * IF THE REQUEST STARTS WITH "enable" THEN ENABLE THE GIVEN HOSTS * IF THE REQUEST STARTS WITH "disable" THEN DISABLE THE GIVEN HOSTS * IF THE REQUEST STARTS WITH "offline" THEN SET UP THE OFFLINED HOST * IF THE REQUEST STARTS WITH "online" THEN SET UP THE ONLINED HOST * IF THE REQUEST STARTS WITH "data" THEN APPEND DATA TO THE GIVEN FILE NAME * IF THE REQUEST STARTS WITH "notes" THEN REPLACE THE NOTES FILE IN www/notes * IF THE REQUEST STARTS WITH "test" THEN DO NOTHING (MAYBE LATER DO SOMETHING) * OTHERWISE IGNORE IT (FOR SAFETY SAKE) */ /* If received an agent message, skip that keyword */ if (strncmp(req, "bbagent ",8) == 0) { req += 8; } if (strncmp(req, "status", 6) == 0) { req += 6; /* JUMP OVER status */ if (*req == ' ') req++; /* SKIP THE SPACE , IF IT'S NOT IN THE status+ FORMAT*/ /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req ) { #if DEBUG debug("LOG STATUS MSG: %s\n", req); #endif bblog(req,"status"); /* LOG THE REQUEST */ } else { #if DEBUG debug("NULL STATUS MSG IGNORED\n"); #endif } } /* * THE MIGHTY combo MESSAGE * ALLOW A SINGLE TRANSMISSION TO CONTAIN MULTIPLE status MESSAGES * \n\nstatus INDICATES A NEW MESSAGE */ else if (strncmp(req, "combo\n", 6) == 0) { /* fprintf(stderr, "GOT MIGHTY COMBO!\n"); */ req += 6; /* JUMP OVER combo */ nextmsg = NULL; if (strncmp(req, "status", 6) == 0) { while (strncmp(req, "status", 6) == 0) { nextmsg=(char *)strstr(req, "\n\nstatus"); /* * END THE MESSAGE BY PUTTING A NULL AT * THE END OF THE MESSAGE, SCRIBBLING OVER * THE EXTRA NEWLINE. */ if (nextmsg) { /* END MESSAGE */ /* fprintf(stderr, "DO STATUS MESSAGE! %s\n", req); */ *nextmsg = '\0'; do_bb(req); /* SHOULD WE RECURSE? */ } else { /* fprintf(stderr, "LAST STATUS MSG\n"); */ do_bb(req); break; /* LEAVE, WE'RE DONE! */ } req = nextmsg+2; } } else { #if DEBUG debug("INVALID COMBO FORMAT MSG IGNORED\n"); #endif } } else if (strncmp(req, "page ", 5) == 0) { req += 5; /* JUMP OVER page */ /* Advance 'til the next word */ while( *req && isspace(*req) ) { req++; } /* Skip the expiry delay if it was entered by mistake */ if( *req && *req == '+' ) { while( *req && !isspace(*req) ) { req++; } } #if DEBUG debug("CALL PAGER: %s\n", req); #endif /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req ) { sscanf(req,"%s",filename); if( !bb_isdisabled(filename) ) { bb_page(req); } } else { #if DEBUG debug("NULL PAGE MSG IGNORED\n"); #endif } } else if (strncmp(req, "summary ", 8) == 0) { req += 8; /* JUMP OVER summary */ /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req ) { #if DEBUG debug("LOG SUMMARY MSG: %s\n", req); #endif bblog(req,"summary"); /* LOG THE REQUEST */ } else { #if DEBUG debug("NULL SUMMARY MSG IGNORED\n"); #endif } } else if (strncmp(req, "ack ", 4) == 0) { req += 4; /* JUMP OVER ack */ #if DEBUG debug("DO ACK: %s\n", req); #endif /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req ) { bb_doack(req); } else { #if DEBUG debug("NULL ACK MSG IGNORED\n"); #endif } } #ifdef ENABLE_DISABLE else if ( strncmp(req, "enable ", 7) == 0 ) { req += 7; /* JUMP OVER enable */ #if DEBUG debug("DO ENABLE: %s\n", req); #endif /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req && (strlen(req) > 0) ) { /* Set host(s) to enable */ enable_disable(req,BB_ENABLEMSG); } else { #if DEBUG debug("NULL ENABLE MSG IGNORED\n"); #endif } } else if ( strncmp(req, "disable ", 8) == 0 ) { req += 8; /* JUMP OVER disable */ #if DEBUG debug("DO DISABLE: %s\n", req); #endif /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req && (strlen(req) > 0) ) { /* Set host(s) to disable */ enable_disable(req,BB_DISABLEMSG); } else { #if DEBUG debug("NULL DISABLE MSG IGNORED\n"); #endif } } else if ( strncmp(req, "online ", 7) == 0 ) { req += 7; /* JUMP OVER online */ #if DEBUG debug("DO ONLINE: %s\n", req); #endif /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req && (strlen(req) < (MAXLINE-2)) ) { /* Set host(s) to enable */ bb_online(req); } else { #if DEBUG debug("NULL ONLINE MSG IGNORED\n"); #endif } } else if ( strncmp(req, "offline ", 8) == 0 ) { req += 8; /* JUMP OVER offline */ #if DEBUG debug("DO OFFLINE: %s\n", req); #endif /* Minor bugs spotted by */ /* Andrew Dalgleish */ if ( *req && (strlen(req) < (MAXLINE-2)) ) { /* Set host(s) to enable */ bblog(req,"offline"); } else { #if DEBUG debug("NULL OFFLINE MSG IGNORED\n"); #endif } } #endif #ifdef DATAMSG else if (strncmp(req, "data ", 5) == 0) { /* "data " */ req += 5; /* JUMP OVER data */ bbsave(req,"data"); #if DEBUG debug("GOT DATA: %s\n",req); #endif } #endif #ifdef NOTESMSG else if (strncmp(req, "notes ", 6) == 0) { /* "data " */ req += 6; /* JUMP OVER notes */ bbsave(req,"notes"); #if DEBUG debug("GOT NOTES: %s\n",req); #endif } #endif else if (strncmp(req, "test", 4) == 0) { req += 4; #if DEBUG debug("GOT TEST\n"); #endif } else { #if DEBUG debug("IGNORE MESSAGE: %s\n", req); #endif } } /* * LOG A BIG BROTHER STATUS MESSAGE * THE MESSAGE GOES INTO THE DIRECTORY SPECIFIED BY BBLOG * MESSAGE FORMAT IS: * machine.area status message * summaryname.area summary message * * THE MESSAGE IS PLACED IN A FILE NAMED machine.area */ void bblog(msg,msgtype) char *msg; char *msgtype; { FILE *bbfile; FILE *bbhist; FILE *bbhtml; #ifdef SCO3 pid_t child; #else int child; #endif int rc,len,statres,status; char fname[MAXLINE],tmpfname[MAXLINE+1]; /* FILENAME */ char disfname[MAXLINE],tmpdisfname[MAXLINE+1]; /* DISABLED FILENAME */ char histname[MAXLINE]; /* HISTORY FILENAME */ char hosthistname[MAXLINE]; /* HISTORY FILENAME */ char htmlname[MAXLINE]; /* HTML FILENAME */ char oldcolor[MAXLINE]; /* FOR COLOR MATCHING */ char newcolor[MAXLINE]; char filename[MAXLINE]; char tmpfilename[MAXLINE]; char dur[MAXLINE]; char sentby[MAXLINE]; char request[MAXLINE]; char newcol[3],oldcol[3]; char *hosthistnamep, *hosthistnamepp, *service; int state; time_t duration, timenow, exptime, lasttime = 0; long fwhere; /* SMM */ char validfor[MAXLINE]; /* HOW LONG IS THE MESSAGE GOOD FOR */ char validforstr[MAXLINE]; int offset; /* THE ABOVE AS A NUMBER */ double f; struct stat statbuf; char *timebuf, *exptimebuf,timenowbuf[32],lasttimebuf[32],*msgptr; int savelog; char *hostsvcdata,*newmsg; extern char* dohostsvc(); time_t ticks; char msg_offline[MAXLINE],dismsg[MAXLINE]; int qualifierpos, offsetval; if (bblogsdir || !strcmp(msgtype,"offline") ) { if (*msg == '+') { msg++; /* SKIP THE PLUS SIGN */ sscanf(msg, "%s", validfor); len = strlen(validfor); msg += len; while (isspace(*msg)) msg++; /* SKIP SPACE(S) */ offset = calc_purple_offset(validfor); #if DEBUG debug("status msg validfor: <%s> offset: <%d>\n", validfor, offset); debug("status msg: <%s>\n", msg); fflush(stdout); #endif } else offset = purpleoffset; dur[0] = '\0'; duration = 0; timenow = time(NULL); /* GET THE TIME */ if (timenow == -1) { /* SMM TEST */ fprintf(stderr, "TIME FAILURE - EXITING!!!\n"); exit(3); } timebuf = ctime(&timenow); /* CONVERT TO ASCII */ *(timebuf + 24) = '\0'; /* LOSE THE NEWLINE */ strcpy(timenowbuf,timebuf); /* offline message has filename and maxlenght period for disabling */ if( !strcmp(msgtype,"offline") ) { memset(filename,0,sizeof(filename)); offset = 0; memset(dismsg,0,sizeof(dismsg)); /* Added optional "reason" to disable message */ /* Modified from Nicolas Chuche suggestion */ sscanf(msg, "%s %s", filename, validfor); if( !valid_logname(filename) ) { fprintf(stderr,"%s bbd INVALID FILENAME IN %s MESSAGE: %s\n",gettimestr(),msgtype,filename); fflush(stderr); return; } offset = calc_purple_offset(validfor); #if DEBUG debug("offline validfor: <%s> offset: <%d>\n",validfor,offset); debug("status msg: <%s>\n", msg); fflush(stdout); #endif strcpy(newcolor,"blue"); msgptr = (char *)strstr(msg,filename); msgptr += strlen(filename); msgptr = (char *)strstr(msgptr,validforstr); msgptr += strlen(validforstr); strncpy(dismsg,msgptr,MAXLINE-1); sprintf(disfname, "%s/%s", bbdisabledir, filename); sprintf(tmpdisfname, "%s/.%s", bbdisabledir, filename); /* create an empty disable tag file */ bbfile = fopen(tmpdisfname, "w"); if (bbfile) { fclose(bbfile); } else { return; } ticks = time(&ticks) + offset; bb_utime(tmpdisfname, timenow + offset); bb_rename(tmpdisfname,disfname); /* IF THIS HOST IS JUST A BBPAGER AND NOT A BBDISPLAY THEN */ /* NOTHING ELSE IS REQUIRED */ /* Is this host BBDISPLAY ? */ /* Is the variable BBDISPLAY set ? */ if( bbdisplay ) { /* IS BBDISPLAY set to TRUE ? */ if( strcmp(bbdisplay,"TRUE") ) { /* NOPE, THEN THIS HOST IS ONLY A BBPAGER */ /* DON'T NEED TO DO ANYTHING ELSE */ return; } } exptime = timenow + offset; exptimebuf = ctime(&exptime); /* CONVERT TO ASCII */ *(exptimebuf + 24) = '\0'; /* LOSE THE NEWLINE */ sprintf(msg_offline,"%s blue %s OFFLINE UNTIL %s\n\n%s",filename,timenowbuf,exptimebuf,dismsg); msg = msg_offline; /* Give some slack on the log file, so purple won't hit */ /* immediately when purple hits */ offset += purpleoffset; } else { sscanf(msg, "%s %s", filename, newcolor); } /* * */ if( getcolornum(newcolor) == 0 ) { /* invalid color in status */ fprintf(stderr,"%s bbd INVALID STATUS COLOR: %s FOR %s\n",gettimestr(),newcolor, filename); fflush(stderr); #if DEBUG debug("INVALID STATUS COLOR: %s\n",newcolor); #endif return; } len = strlen(filename); if (strlen(bblogsdir) + len + 2 > MAXLINE) { /* too large for allocated memory, skip it */ #if DEBUG debug("FILENAME TOO BIG - IGNORED\n"); #endif return; } if( !valid_logname(filename) ) { fprintf(stderr,"%s bbd INVALID FILENAME IN %s MESSAGE: %s\n",gettimestr(),msgtype,filename); fflush(stderr); return; } /* * SMM BB 1.09: EVENT HISTORY AND DURATION * IF THE COLOR OF AN INCOMING MESSAGE IS NOT THE SAME * AS THE CURRENT STATUS, WRITE A LINE IN THE HISTORY * FILE. OTHERWISE JUST UPDATE THE LOG FILE WITH AN * INDICATION OF THE DURATION OF THE CURRENT STATUS */ sprintf(fname, "%s/%s", bblogsdir, filename); sprintf(tmpfname, "%s/.%s", bblogsdir, filename); /* Don't do hist for summaries */ if ( !strcmp(msgtype,"summary") ) { goto nohistpls; } sprintf(histname, "%s/%s", bbhistdir, filename); oldcolor[0]='\0'; /* FOR ROB */ #if DEBUG debug("TRYING TO OPEN BBFILE %s\n", fname); #endif bbfile = fopen(fname, "r"); if (bbfile) { fscanf(bbfile, "%s", oldcolor); fclose(bbfile); } #if DEBUG debug("oldcolor: %s , msgtype: %s\n",oldcolor,msgtype); #endif /* IF NOT AN OFFLINE MESSAGE */ if( strcmp(msgtype,"offline") ) { /* IS THE EVENT DISABLED ? */ if( bb_isdisabled(filename) ) { /* YES, DOES IT HAVE A STATUS FILE ? */ if( !bbfile ) { /* NO, CREATE A DUMMY ONE, THE OLD ONE MIGHT */ /* HAVE BEEN DELETED */ bbfile = fopen(fname, "w"); if (bbfile) { sprintf(msg_offline,"blue %s OFFLINE UNTIL %s \n%s %s\n%s %s",timenowbuf,"undetermined",recvfromstrp,"undetermined",statunchstrp,"undertermined"); fputs( msg_offline , bbfile); fclose(bbfile); } } return; } } else { /* If the log file was not found, we assume this is a BBPAGER */ /* only host that received it */ if( !bbfile ) { return; } } savelog=0; statres=stat(histname, &statbuf); /* HISTORY AVAILABLE? */ if ((strcmp(oldcolor, newcolor) != 0) || (statres == -1)) { savelog=1; #if DEBUG debug("TRYING TO OPEN HISTORY FILE %s\n", histname); #endif if (statres == -1) /* CREATE IT */ bbhist = fopen(histname, "a+"); else /* OPEN IT */ bbhist = fopen(histname, "r+"); if (bbhist) { /* * ICKY THINGS HERE... BACK UP OVER THE * OLD TIME, AND WRITE THE DURATION IN * IT'S PLACE... */ fseek(bbhist, -11L, SEEK_END); fwhere=ftell(bbhist); if (fwhere > 0) { fscanf(bbhist, "%ld", &lasttime); fseek(bbhist, -11L, SEEK_END); fprintf(bbhist, " %ld %ld\n%s %s %ld\n", lasttime, timenow - lasttime, timenowbuf, newcolor, timenow); #if DEBUG debug("%s: FWHERE: %ld LASTIME %ld\n", histname, fwhere, lasttime); #endif } else { /* Reopen file to reset at beginning because */ /* some OSes (darwin) don't seem to like to have */ /* seeked before the beginning of the file */ fclose(bbhist); bbhist = fopen(histname, "a+"); fprintf(bbhist, "%s %s %ld\n", timenowbuf, newcolor, timenow); lasttime = timenow; } fclose(bbhist); } if( !strcmp(bbhosthistlog,"TRUE") || !strcmp(bballhistlog,"TRUE") ) { /* Save the event logs per host */ if(strlen(oldcolor)==0) state = -1; else { state = getcolornum(newcolor) - getcolornum(oldcolor); if( state > 0 ) state = 2; /* Escalated */ else if( state < 0 ) state = 1; /* Recovered */ else state = 0; /* No change - if 2 colors ever are equal this is useful */ } strcpy(hosthistname,histname); /* Point to last subdir, upper directories may contain a '.' */ hosthistnamep = (char *)strrchr(hosthistname,'/'); if(hosthistnamep) hosthistnamep++; else hosthistnamep = hosthistname; service = (char *) strrchr(hosthistnamep,'.'); hosthistnamepp = hosthistnamep; while( (hosthistnamepp=(char *)strchr(hosthistnamepp,',')) != NULL) *hosthistnamepp = '.'; timebuf = ctime(&lasttime); /* CONVERT TO ASCII */ *(timebuf + 24) = '\0'; /* LOSE THE NEWLINE */ strcpy(lasttimebuf,timebuf); memset(newcol,'\0',sizeof(newcol)); memset(oldcol,'\0',sizeof(oldcol)); strncpy(newcol,newcolor,2); strncpy(oldcol,oldcolor,2); if( service ) { *service = '\0'; /* Terminate host name */ service++; if( !strcmp(bbhosthistlog,"TRUE") ) { bbhist = fopen(hosthistname, "a+"); if(bbhist) { fprintf(bbhist,"%s %ld %ld %ld %s %s %d\n",service,timenow,lasttime,timenow-lasttime,newcol,strlen(oldcolor)!=0 ? oldcol : "-",state); fclose(bbhist); } } if( !strcmp(bballhistlog,"TRUE") ) { bbhist = fopen(allhistname, "a+"); if(bbhist) { fprintf(bbhist,"%s %s %ld %ld %ld %s %s %d\n",hosthistnamep,service,timenow,lasttime,timenow-lasttime,newcol,strlen(oldcolor)!=0 ? oldcol : "-",state); fclose(bbhist); } } } } /* * NOW FORK OFF AND LET THE CHILD HANDLE THE REQUEST * Send a rm_event ack message to remove the tmp/np_* tagfile * associated with this event as the color is not defined in * in the PAGELEVELS variable (pagelevels token is bbwarnsetup.cfg) * Also used for recovery message */ if( !pagelevels || (strlen(pagelevels) == 0) ) pagelevels = PAGELEVELSDEFAULT; if ( strstr(pagelevels,oldcolor) && !strstr(pagelevels,newcolor) ) { if ((child = fork()) < 0) bbd_die("fork error"); /* child does work, thanks to svangari@uu.net */ if (child == 0) { /* THE CHILD */ if( strspn(filename,VALIDFILENAMECHARS) == strlen(filename) ) { /* For ZOMBIE prone OSes, use the bb exec instead of bbsend() */ /* The reason is if bbsend() gets stuck, then the whole bbd */ /* waits for the child process to end */ #ifdef ZOMBIE /* Because the bb executable looks at bbdisp and bbdisplays */ /* to determine where to send, then we must copy bbpagers */ /* into bbdisplays */ bb_putenv("BBDISPLAYS",bbpagers,bbdisplays_env,sizeof(bbdisplays_env)); sprintf(request,"ack rm_event %s %d",filename,(int)(timenow-lasttime)); execlp(bb, bb, bbpage, request, (char *)NULL); #else sprintf(request,"ack rm_event %s %d",filename,timenow-lasttime); rc = bbsend(bbpage,bbpagers,request); exit(rc); #endif } else { fprintf(stderr,"%s bbd INVALID FILENAME IN ack MESSAGE: %s\n",gettimestr(),filename); fflush(stderr); exit(1); } } /* Parent continues */ #ifdef ZOMBIE wait(&status); #endif } } else { if (statres == 0) { duration = timenow - statbuf.st_mtime; } } if (duration > 86400) { f = duration / (double) 86400.00; sprintf(dur, "%s %.2f %s\n", statunchstrp, f, perioddays); } else if (duration > 3600) { f = duration / (double) 3600.00; sprintf(dur, "%s %.2f %s\n", statunchstrp, f, periodhours); } else { f = duration / (double) 60.00; sprintf(dur, "%s %.2f %s\n", statunchstrp, f, periodmins); } nohistpls: sprintf(sentby,"%s %s\n",recvfromstrp,ipdotaddr); #if DEBUG debug("CREATING BBFILE %s\n", fname); #endif /* * THANKS TO: Andrey Alekseyev * More checking... */ bbfile = fopen(tmpfname, "w+"); /* APPEND IT */ if (bbfile) { msg += len + 1; /* SKIP FIRST ARGS */ #if DEBUG debug("MSG IS %s....\n", msg); #endif fprintf(bbfile, "%s\n\n%s%s", msg, dur,sentby); /* PUKE */ fclose(bbfile); /* CLOSE */ /* FIX THE TIMESTAMP */ bb_utime(tmpfname, timenow + offset); bb_rename(tmpfname,fname); } else { #if DEBUG debug("FAILED TO OPEN STATUS FILE %s\n", bbfile); #endif } /* Create an HTML version of the status file */ /* Don't do html for summaries */ /* Thanks to holger@marzen.de */ if ( !strcmp(msgtype,"summary") ) return; if( strcmp(bblogstatus,"STATIC") == 0 ) { memset(tmpfilename,0,sizeof(tmpfilename)); strncpy(tmpfilename,filename,sizeof(tmpfilename)-1); replacestr(tmpfilename,sizeof(tmpfilename),",","."); sprintf(htmlname, "%s/%s.html", bbhtmldir, tmpfilename); #if DEBUG debug("CREATING HTML FILE %s\n", htmlname); #endif bbhtml = fopen(htmlname, "w"); if (bbhtml) { newmsg = (char *) malloc(strlen(msg)+1024); if( newmsg != NULL ) { sprintf(newmsg,"%s\n\n%s%s",msg,dur,sentby); hostsvcdata = dohostsvc(newmsg,filename,bbweb,bbwebdir,timenowbuf); if( hostsvcdata != NULL ) { fwrite(hostsvcdata,strlen(hostsvcdata),1,bbhtml); free(hostsvcdata); } else { fprintf(bbhtml,"Couldn't build the HTML status page - out of memory\n"); } free(newmsg); } else { fprintf(bbhtml,"Couldn't build the HTML status page - out of memory\n"); } fclose(bbhtml); } else { #if DEBUG debug("FAILED TO OPEN HTML FILE %s\n", htmlname); #endif } } if ( savelog && savestatuslog && !strcmp(savestatuslog,"TRUE") ) { save_histlog(filename,timenowbuf,msg,dur,sentby); } } else bbd_die("BB LOGGING DIRECTORY UNDEFINED\n"); #if DEBUG debug("DONE IN bblog()\n"); #endif } /* * PUT AN ERROR INTO THE LOGFILE AND stderr AND DIE */ int bbd_die(msg) char *msg; { static char message[MAXLINE]; sprintf(message, "%s bbd %s\n",gettimestr(), msg); syslog(LOG_DAEMON | LOG_CRIT , "%s",message); fprintf(stderr, "%s", message); exit(1); } /* * SMM: v.1.06b CLEAN THIS UP... * THANKS TO: Andrey Alekseyev * READS IN THE DATABASE OF IP ADDRESSES AND NETMASKS * FROM etc/security */ int getsecurity() { FILE *sec; char line[MAXLINE]; int cnt; memset(secdb,'\0',sizeof(secdb)); cnt = 0; sec = fopen(security, "r"); if (sec) { while(fgets(line, MAXLINE-1, sec)) { #if DEBUG debug("LINE IS: %s\n", line); #endif if( dosecdb(line, cnt) == 0 ) cnt++; else { #if DEBUG debug("DISCARDING: %s\n", line); #endif } } fclose(sec); /* CLOSE THE FILE */ } return(0); } int checkrequest(ipnum,req) unsigned long ipnum; char *req; { /* GET THE REQUEST TYPE */ /* IF OFFLINE/ONLINE */ /* MAKE SURE REQUEST CAME FROM A BBDISPLAY */ return(0); } int checksecurity(inc) struct in_addr *inc; { int cnt = 0; int retval = 1; /* TRUE */ struct in_addr chk; while( (chk.s_addr=secdb[cnt].addr.s_addr) != 0 ) { retval = 0; /* FALSE */ /* * SEEMS THE CAST TO (int) BREAKS THIS TEST ON Solaris 2.6 * FIXES FROM Henrik Stroem hstroem@pvv.org ( GET RID OF THE OLD BROKEN TEST if ((ipnum & chk.s_addr) == chk.s_addr) { * THANKS TO Larry Parmelee s_addr); debug("mask: %8x\n",secdb[cnt].mask.s_addr); debug("addr & mask: %8x\n",inc->s_addr & secdb[cnt].mask.s_addr); debug("net: %8x\n",chk.s_addr); #endif if ((inc->s_addr & secdb[cnt].mask.s_addr) == chk.s_addr) { #if DEBUG debug("------> PASSED\n"); #endif return(1); } else { #if DEBUG debug("------> FAILED\n"); #endif } cnt++; } if (retval == 0) { /* FAILED - NOT IN THE TABLE! */ #if DEBUG debug("--> FAILED - NOT IN TABLE\n"); #endif } #if DEBUG debug("CHECKSECUITY DEFAULT RETURNING %d\n", retval); #endif return(retval); } /* * dosecdb * ADD A LINE TO THE SECURITY DATABASE * * OK, THINGS CAN GET UGLY HERE * A LINE CAN HAVE SEVERAL FORMS * AN IP ADDRESS: 204.191.20.8 * A NET ADDRESS: 204.191.20.0 (MASK IMPLIED 255.255.255.0) * A NET ADDRESS + NETMASK 204.191.20.0/255.255.240.0 * ANYTHING ELSE MUST GO AWAY */ int dosecdb(xline, xcnt) char *xline; int xcnt; { char *mask; char netmask[MAXLINE]; int oct1, oct2, oct3, oct4; /* OCTETS */ struct in_addr iaddr; #if DEBUG debug("INTO dosecdb %s %d\n", xline, xcnt); #endif while( isspace(*xline) ) xline++; /* If it's a comment or an empty line */ if( *xline == '#' || (strlen(xline) == 0) ) { return(1); } /* * HANDLE THE NET/MASK if (1 == 3) { */ if ( (mask=(char *)strchr(xline, '/')) != NULL ) { #if DEBUG debug("FOUND A NETMASK!\n"); #endif strcpy(netmask,mask+1); /* SECOND PART */ *mask = '\0'; } else { /* NO EXPLICIT MASK SET, FIGURE IT OUT... */ #if DEBUG debug("NO NETMASK!\n"); #endif sscanf(xline, "%d.%d.%d.%d", &oct1, &oct2, &oct3, &oct4); #if DEBUG debug("%d-%d-%d-%d\n", oct1, oct2, oct3, oct4); #endif if (oct4 == 0) { if (oct3 == 0) { if (oct2 == 0) { if (oct1 == 0) oct1=0; else oct1=255; } else oct1=oct2=255; } else oct1=oct2=oct3=255; } else oct1=oct2=oct3=oct4=255; sprintf(netmask, "%d.%d.%d.%d", oct1, oct2, oct3, oct4); } #if DEBUG debug("IPaddr set to: %s\n", xline); debug("Netmask set to: %s\n", netmask); #endif /* * SMM UGH. * 255.255.255.255 is actually a VALID netmask * BUT IT ALSO HAPPENS TO EQUAL -1... * SO NO ERROR CHECKING ON NETMASKS SINCE -1 IS AS RESTRICTIVE * AS YOU CAN GET... iaddr.s_addr = inet_addr(netmask); if (iaddr.s_addr == -1) { fprintf(stderr, "%s bbd Invalid address %s (ignored)\n", gettimestr(),xline); fflush(stderr); return(1); } else */ iaddr.s_addr = inet_addr(xline); /* * NOW SAVE IT IF IT'S VALID... */ if ((iaddr.s_addr != -1)&&(xcnt < MAXLINE - 1)) { #if DEBUG debug("ADDING LINE %d %s\n", xcnt, xline); #endif secdb[xcnt].addr.s_addr = iaddr.s_addr & inet_addr(netmask); secdb[xcnt].mask.s_addr = inet_addr(netmask); return(0); } else { fprintf(stderr, "%s bbd Invalid IP addr on %s (ignored)\n", gettimestr(),xline); fflush(stderr); return(1); /* FAIL */ } } ./bb/bb19c/src/utils.c0100644002342100007640000005640707616533072012352 0ustar bbbb/* * * utils.c * BIG BROTHER C utilities functions * Sean MacGuire * Version 1.9b * Apr 08th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #ifdef TIMEH #include /* FOR TIMING STUFF SMM */ #else #include /* FOR TIMING STUFF SMM */ #endif #include #include #include #include #include #if REGEXEC #include #else #if REGEX #if SCO #include #endif #else #if RE_EXEC #include #else #endif #endif #endif int replacestr(dst,dstmaxlen,from,to) char *dst; int dstmaxlen; char *from; char *to; { char *realdst; char *frompos; char *dsttmp = NULL; #if DEBUG debug("INTO REPLACESTR\n"); #endif realdst = dst; /* Dont work on null strings */ if (!dst || !from || !to || (dstmaxlen == 0)) { #if DEBUG debug("dst: [%s] from: [%s] to: [%s] dstmaxlen: [%d]\n",dst,from,to,dstmaxlen); #endif return(1); } while( (frompos=(char *)strstr(dst,from)) ) { #if DEBUG debug("match on [%s]\n",from); #endif if( !dsttmp ) { dsttmp = (char *) malloc(dstmaxlen); /* Couldn't malloc */ if( !dsttmp ) return(2); memset(dsttmp,0,dstmaxlen); } /* Some strncpy barf on len = 0 */ if( frompos-dst ) { *frompos = '\0'; if( (int) (strlen(dsttmp) + strlen(dst)) > (dstmaxlen-1) ) { #if DEBUG debug("[%s] generates a string too large, stopped !\n",from); #endif strcpy(realdst,dsttmp); free(dsttmp); return(3); } strcat(dsttmp,dst); } if( (int) (strlen(dsttmp) + strlen(to)) > (dstmaxlen-1) ) { #if DEBUG debug("[%s] generates a string too large, stopped !\n",from); #endif strcpy(realdst,dsttmp); free(dsttmp); return(3); } strcat(dsttmp,to); dst = frompos + strlen(from); #if DEBUG debug("dsttmp at this point: [%s], dst: [%s]\n",dsttmp,dst); #endif } if( dsttmp ) { if( (int) (strlen(dsttmp) + strlen(dst)) > (dstmaxlen-1) ) { #if DEBUG debug("[%s] generates a string too large, stopped !\n",from); #endif strcpy(realdst,dsttmp); free(dsttmp); return(3); } strcat(dsttmp,dst); strcpy(realdst,dsttmp); free(dsttmp); } #if DEBUG debug("String returned: [%s]\n",dst); #endif return(0); } /* * Strip leading blanks */ void stripleadspaces(str) char *str; { char *strptr; if( !str ) { return; } if( strlen(str) == 0 ) { return; } strptr = str; while(isspace(*strptr)) strptr++; if( str != strptr ) strcpy(str,strptr); return; } /* * Strip both lead and trailing spaces */ void striptrailspaces(str) char *str; { char *strptr; if( !str ) { return; } if( strlen(str) == 0 ) { return; } strptr = str + strlen(str) - 1; while( (strptr >= str) && isspace(*strptr) ) { *strptr = '\0'; strptr--; } return; } void stripleadtrailspaces(str) char *str; { stripleadspaces(str); striptrailspaces(str); } int valid_ipaddr(ipaddr) char *ipaddr; { int ip1,ip2,ip3,ip4; /* Too big ? */ if( strlen(ipaddr) > 15 ) { return(0); } ip1 = -1; ip2 = -1; ip3 = -1; ip4 = -1; sscanf(ipaddr,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4); if( (ip1 < 0) && (ip1 > 255) ) { return(0); } if( (ip2 < 0) && (ip2 > 255) ) { return(0); } if( (ip3 < 0) && (ip3 > 255) ) { return(0); } if( (ip4 < 0) && (ip4 > 255) ) { return(0); } return(1); } int getlinebbhosts(fp,entry,maxlen,flags) FILE **fp; char *entry; int maxlen; int flags; { char *bbhosts; int rc = 0; char entries[16]; /* for at least the IP address */ char ipaddr[16],name[16]; /* OK, 1st time thru, open bb-hosts */ if( *fp == NULL ) { /* First time */ bbhosts = (char *) getenv("BBHOSTS"); if( bbhosts != NULL && strlen(bbhosts) > 0 ) { *fp = fopen(bbhosts,"r"); } } /* bb-hosts is already opened or just has been */ if( *fp != NULL ) { memset(entry,0,maxlen); while( fgets(entry,maxlen-1,*fp) != NULL ) { stripleadtrailspaces(entry); if( strlen(entry) == 0 ) { continue; } /* Empty line, only newline ? */ if( entry[0] == '\n' ) { continue; } /* Bypass Comments */ if( entry[0] == '#' ) { continue; } if( flags & LINEBBHOSTS_ALL ) { rc = 1; break; } else if( flags & LINEBBHOSTS_IPADDR ) { if( isdigit(entry[0]) ) { memset(entries,0,sizeof(entries)); memset(ipaddr,0,sizeof(ipaddr)); memset(name,0,sizeof(name)); strncpy(entries,entry,sizeof(entries)-1); /* name will not be complete */ /* we just want to make sure we got IP addr */ sscanf(entries,"%s %s",ipaddr,name); if( valid_ipaddr(ipaddr) == 1 ) { rc = 1; break; } } } memset(entry,0,maxlen); } } if( (*fp != NULL) && (rc == 0) ) { fclose(*fp); *fp = NULL; } return(rc); } /* * retrieve IP address of host from bb-hosts * * If IP address cannot be found then return hostname * If IP address is 0.0.0.0 then return hostname unless * force flag is on */ int getipaddr(bbhost,storestr, maxstorestrsize, forceip) char *bbhost; char *storestr; int maxstorestrsize; int forceip; { char *bbhosts = NULL, *fqdn = NULL; FILE *bbhosts_fp; char *hostptr, hostname[MAXLINE], *nextchar; char ip_host[MAXLINE], *bbip; int beginline, fullname, namelen; /* Check for stupid errors, return host name passwd as argument */ if( bbhost == NULL ) { return(1); } if( strlen(bbhost) == 0 ) { return(1); } if( strlen(bbhost) >= (maxstorestrsize-1) ) { return(1); } strcpy(storestr,bbhost); bbhosts = (char *) getenv("BBHOSTS"); if( bbhosts != NULL ) { if( (bbhosts_fp=fopen(bbhosts,"r")) != NULL ) { beginline = 1; while( fgets(ip_host,sizeof(ip_host)-1,bbhosts_fp) != NULL ) { if( beginline ) { /* Have we read a full line ? */ if( strlen(ip_host) == (sizeof(ip_host)-1) ) { beginline = 0; } stripleadspaces(ip_host); /* Is first column a digit ? */ /* Expecting 255.255.255.255 hostname ... in bb-hosts */ if( isdigit(ip_host[0]) ) { bbip = hostptr = ip_host; while( isdigit(*hostptr) || (*hostptr == '.') ) { hostptr++; } if( !isspace(*hostptr) ) { continue; } /* Put in EOS such that bbip only contains IP addr */ *hostptr = '\0'; hostptr++; strcpy(hostname,hostptr); stripleadspaces(hostname); fullname = 0; fqdn = (char *) getenv("FQDN"); if( fqdn != NULL ) { if( ! strcmp(fqdn,"TRUE") ) { fullname = 1; } } namelen = strlen(bbhost); if( !strncmp(hostname,bbhost,namelen) ) { nextchar = hostname + namelen; if( fullname ) { if( ! (isspace(*nextchar) || (*nextchar == '\0')) ) { continue; } } else { if( ! (isspace(*nextchar) || (*nextchar == '\0') || (*nextchar == '.')) ) { continue; } } /* Return IP address if non-zero or forceip flag is on */ if( strcmp(bbip,"0.0.0.0") || forceip ) { strcpy(storestr,bbip); } return(0); } } } else { /* Reset if we've read the last part of a line */ if( strlen(ip_host) != (sizeof(ip_host)-1) ) { beginline = 1; } } } fclose(bbhosts_fp); } } /* made it here, not found, return original string */ return(1); } int getcolornum(color) char *color; { if(!strcmp(color,"red")) return(6); if(!strcmp(color,"purple")) return(5); if(!strcmp(color,"yellow")) return(4); if(!strcmp(color,"green")) return(3); if(!strcmp(color,"blue")) return(2); if(!strcmp(color,"clear")) return(1); return(0); } void clean_string(str,rm_chars,newchar) char *str; char *rm_chars; char newchar; { char *tmpstr; while( *rm_chars ) { while( (tmpstr=(char *)strchr(str,*rm_chars)) != NULL ) { *tmpstr = newchar; } rm_chars++; } #ifdef WHATDOESTHISBREAK tmpstr = str; while(*tmpstr) { if( !isprint(*tmpstr) ) { *tmpstr = newchar; } tmpstr++; } #endif } char *gettimestr() { time_t timenow; char *timestr; static char worktimestr[MAXLINE]; char *timestrp; time(&timenow); timestr = ctime(&timenow); strcpy(worktimestr,timestr); if( (timestrp = (char *)strchr(worktimestr,'\n')) != NULL ) { *timestrp = '\0'; } return(worktimestr); } /* * Make a string space seperated (squeezed out extra spaces) */ int space_sep(workstr) char *workstr; { /* Replace all tabs by spaces */ while( *workstr ) { if( isspace(*workstr) ) { *workstr = ' '; } workstr++; } /* Make sure only a single space seperaters words */ replacestr(workstr,strlen(workstr)," "," "); return(0); } /* Match() mimicks and egrep */ /* egrep -i : ignore case : REG_IGN_CASE */ /* egrep -x : match whole line : REG_FULL */ /* egrep "^..." : beginning of line : REG_BOL */ /* egrep "...$" : end of line : REG_EOL */ /* REG_PATHEXP make the match behave like pathname expansion */ int match(str,pattern,flags) char *str; char *pattern; int flags; { char *workpattern; int workpatternlen,rc; #if REGEXEC regex_t preg; int reflags; #else #if REGEX|RE_EXEC char *comp_form,*curr_expr,*next_expr; char *workpattern1; int workpattern1len,i; #else #endif #endif workpatternlen = strlen(pattern) + MAXLINE; if( (workpattern=(char *)calloc(1,workpatternlen)) == NULL ) { return(0); } #if REGEXEC if( flags & REG_FULL ) { sprintf(workpattern,"^(%s)$",pattern); } else if( flags & REG_BOL ) { sprintf(workpattern,"^%s",pattern); } else if( flags & REG_EOL ) { sprintf(workpattern,"%s$",pattern); } else { strcpy(workpattern,pattern); } reflags = REG_EXTENDED|REG_NOSUB; if( flags & REG_IGN_CASE ) { reflags |= REG_ICASE; } /* All * are to be replaced by .* but before doing it */ /* normalize all .* to * first then transform */ /* but keep ]* construct intact */ if( flags & REG_PATHEXP ) { /* mimick filename path expansion */ replacestr(workpattern,workpatternlen,".","[.,]"); replacestr(workpattern,workpatternlen,"*",".*"); } else { replacestr(workpattern,workpatternlen,"]*","([_])"); replacestr(workpattern,workpatternlen,".*","*"); replacestr(workpattern,workpatternlen,"*",".*"); replacestr(workpattern,workpatternlen,"([_])","]*"); } #if DEBUG fprintf(stderr,"Matching <%s> against <%s>\n",str,workpattern); fflush(stderr); #endif if( regcomp(&preg,workpattern,reflags) != 0 ) { free(workpattern); return(0); } free(workpattern); rc = regexec(&preg,str,0,NULL,0); regfree(&preg); if( rc == 0 ) { return(1); } else { return(0); } #else #if REGEX|RE_EXEC workpattern1len = strlen(pattern) + MAXLINE; if( (workpattern1=(char*)calloc(1,workpattern1len)) == NULL ) { free(workpattern); return(0); } /* * REGEX doesn't do multiple patterns at once * So got to do it ourselves */ curr_expr = next_expr = pattern; while( curr_expr ) { /* * Get the first expression */ next_expr = (char *)strchr(curr_expr,'|'); if( next_expr != NULL ) { strncpy(workpattern,curr_expr,next_expr-curr_expr); workpattern[next_expr-curr_expr] = '\0'; next_expr++; while( *next_expr == '|' ) { next_expr++; } if( *next_expr == '\0' ) { next_expr = NULL; } else { curr_expr = next_expr; } } else { strcpy(workpattern,curr_expr); curr_expr = NULL; } if( flags & REG_FULL ) { /* * Make sure there's only one '^' at the BOL */ while( workpattern[0] == '^' ) { strcpy(workpattern,workpattern+1); } i = strlen(workpattern) - 1; while( (i >= 0) && (workpattern[i] == '$') ) { workpattern[i] = '\0'; i--; } if( strlen(workpattern) > 0 ) { sprintf(workpattern1,"^%s$",workpattern); } else { continue; } } else if( flags & REG_BOL ) { /* * Make sure there's only one '^' at the BOL */ while( workpattern[0] == '^' ) { strcpy(workpattern1,workpattern+1); } if( strlen(workpattern) > 0 ) { sprintf(workpattern1,"^%s",workpattern); } else { continue; } } else if( flags & REG_EOL ) { /* * Make sure there's only one '$' at the EOL */ i = strlen(workpattern) - 1; while( (i >= 0) && (workpattern[i] == '$') ) { workpattern[i] = '\0'; i--; } if( strlen(workpattern) > 0 ) { sprintf(workpattern1,"%s$",workpattern); } else { continue; } } else { strcpy(workpattern1,workpattern); } /* All * are to be replaced by .* but before doing it */ /* normalize all .* to * first then transform */ /* but keep ]* construct intact */ if( flags & REG_PATHEXP ) { /* mimick filename path expansion */ replacestr(workpattern,workpatternlen,".","[.,]"); replacestr(workpattern,workpatternlen,"*",".*"); } else { replacestr(workpattern1,workpattern1len,"]*","([_])"); replacestr(workpattern1,workpattern1len,".*","*"); replacestr(workpattern1,workpattern1len,"*",".*"); replacestr(workpattern1,workpattern1len,"([_])","]*"); } #if DEBUG fprintf(stderr,"Matching <%s> against <%s>\n",str,workpattern1); fflush(stderr); #endif #if REGEX comp_form = (char *)regcmp(workpattern1,NULL); if( comp_form == NULL ) { continue; } if( regex(comp_form,str) ) { free(workpattern); free(workpattern1); free(comp_form); return(1); } free(comp_form); #else #if RE_EXEC comp_form = re_comp(workpattern1); if( comp_form != NULL ) { continue; } if( re_exec(str) ) { free(workpattern); free(workpattern1); return(1); } #else #endif #endif } free(workpattern); free(workpattern1); return(0); #else #endif #endif } void strtolower(str) char *str; { while(str && *str) { *str = tolower(*str); str++; } } void strtoupper(str) char *str; { while(str && *str) { *str = toupper(*str); str++; } } int getdirnextentry(dirinfo,dirname,filemask,filename,flags,ftype) DIR *dirinfo; char *dirname; char *filemask; char *filename; int flags; int *ftype; { struct dirent *direntp; struct stat statinfo; char fname[MAXLINE]; *ftype = 0; while( (direntp=readdir(dirinfo)) != NULL ) { sprintf(fname,"%s/%s",dirname,direntp->d_name); if( stat(fname,&statinfo) != 0 ) { continue; /* Can't stat() it ... hummm weird */ } /* If requesting only files, ignore if not */ if( statinfo.st_mode & S_IFREG ) { *ftype = GETDIR_FILE; if( !(flags & (GETDIR_FILE|GETDIR_ALL)) ) { continue; } } /* If requesting only directories, ignore if not */ else if( statinfo.st_mode & S_IFDIR ) { *ftype = GETDIR_DIR; if( !(flags & (GETDIR_DIR|GETDIR_ALL)) ) { continue; } } else { *ftype = GETDIR_OTHER; if( !(flags & GETDIR_ALL) ) { continue; } } #if DEBUG fprintf(stderr,"Matching <%s> <%s>\n",direntp->d_name,filemask); fflush(stderr); #endif if( match(direntp->d_name,filemask,REG_FULL|REG_PATHEXP) ) { #if DEBUG fprintf(stderr,"Matched ! <%s> <%s>\n",direntp->d_name,filemask); fflush(stderr); #endif strcpy(filename,direntp->d_name); return(1); } } return(0); } /* * Return the first filename that matches * the filemask in the given directory * Save the file name in filename * Returns: 0 - none found * 1 - match found */ int getdirfirst(dirinfo,dirname,filemask,filename,flags,ftype) DIR **dirinfo; char *dirname; char *filemask; char *filename; int flags; int *ftype; { DIR *dirp; if( (dirp = opendir(dirname)) == NULL ) { return(0); } if( getdirnextentry(dirp,dirname,filemask,filename,flags,ftype) == 1 ) { *dirinfo = dirp; return(1); } closedir(dirp); *dirinfo = NULL; return(0); } /* * Return the next filename that matches * the filemask in the given directory * Save the file name in filename * Returns: 0 - none found * 1 - match found */ int getdirnext(dirinfo,dirname,filemask,filename,flags,ftype) DIR *dirinfo; char *dirname; char *filemask; char *filename; int flags; int *ftype; { if( dirinfo == NULL ) { return(0); } if( getdirnextentry(dirinfo,dirname,filemask,filename,flags,ftype) == 1 ) { return(1); } else { return(0); } } /* * Release resources associated with getdirfirst(),getdirnext() */ void getdirdone(dirinfo) DIR *dirinfo; { if( dirinfo == NULL ) { return; } closedir(dirinfo); dirinfo = NULL; } /* * Change the access and modification time on a file */ int touchtime(touchfile,offset) char *touchfile; int offset; { struct utimbuf tb; time_t ticks; FILE *fp; offset *= 60; /* NOW IN SECONDS */ ticks = time(&ticks) + offset; tb.actime=ticks; tb.modtime=ticks; /* * NOW CREATE THE TOUCHFILE * OR JUST CHANGE THE MODIFICATION TIME IF IT ALREADY EXISTS */ if( (fp=fopen(touchfile, "a")) != NULL ) { fclose(fp); } else { fprintf(stderr, "Can't touch %s\n", touchfile); return(0); } utime(touchfile, &tb); return(1); } /* * Save the text to the associated file */ int writefile(filename,text,mode) char *filename; char *text; char *mode; { FILE *fp; if( !filename || !text ) { return(0); } if( strlen(filename) == 0 ) { return(0); } if( (fp=fopen(filename,mode)) != NULL ) { fprintf(fp,"%s",text); fclose(fp); return(1); } else { return(0); } } /* * Save the text in the associated file */ int savefile(filename,text) char *filename; char *text; { return(writefile(filename,text,"w")); } /* * Append the text to the associated file */ int appendfile(filename,text) char *filename; char *text; { return(writefile(filename,text,"a")); } /* * Read the given file */ char *readfile(filename,maxsize) char *filename; int maxsize; { FILE *fp; struct stat statinfo; char *buffer = NULL; int size; if( !filename ) { return(NULL); } if( strlen(filename) == 0 ) { return(NULL); } if( maxsize < 1 ) { return(NULL); } if( stat(filename,&statinfo) == 0 ) { if( (int)statinfo.st_size >= maxsize ) { size = maxsize; } else { size = (int) statinfo.st_size; } if( (fp=fopen(filename,"r")) != NULL ) { if( (buffer=(char *)calloc(1,size+1)) != NULL) { if( fread(buffer,(int)size,1,fp) < 1 ) { free(buffer); buffer = NULL; } } fclose(fp); } } return(buffer); } int valid_logname(filename) char *filename; { char *name; int len; /* * */ len = strlen(filename); if( strspn(filename,VALIDFILENAMECHARS) != len ) { /* invalid characters in there */ fprintf(stderr,"%s bbd FILENAME CONSTAINS INVALID CHARACTERS - IGNORED: %s\n",gettimestr(),filename); fflush(stderr); #if DEBUG debug("FILENAME CONSTAINS INVALID CHARACTERS - IGNORED\n"); #endif return(0);; } /* It shouldn't end with '.' ? */ if (filename[strlen(filename)-1] == '.') { /* File has no extension */ #if DEBUG debug("FILENAME HAS NO EXTENSION - IGNORED\n"); #endif return(0); } /* It shouldn't end with ',' ? */ if (filename[strlen(filename)-1] == ',') { /* File has no extension */ #if DEBUG debug("FILENAME HAS NO EXTENSION - IGNORED\n"); #endif return(0); } /* It should have a '.' ? */ if ((char *)strchr(filename,'.') == NULL ) { /* File has no extension */ #if DEBUG debug("FILENAME HAS NO EXTENSION - IGNORED\n"); #endif return(0); } /* Thanks to Holger Marzen */ /* It shouldn't start with a '.' ? */ if (filename[0] == '.') { /* no hostname - must be garbage */ #if DEBUG debug("FILENAME HAS NO HOSTNAME - IGNORED\n"); #endif return(0); } /* It shouldn't start with a '-' ? */ if (filename[0] == '-') { /* no hostname - must be garbage */ #if DEBUG debug("FILENAME HAS NO HOSTNAME - IGNORED\n"); #endif return(0); } /* It shouldn't start with ',' ? */ if (filename[0] == ',') { /* File has no extension */ #if DEBUG debug("FILENAME STARTS WITH AN INVALID CHAR ',' - IGNORED\n"); #endif return(0); } /* It should be at least X.Y */ /* This is probably redundant but let's keep it */ if (len < 3) { /* too small - must be garbage */ /* must be at least x.x */ #if DEBUG debug("FILENAME TOO SMALL - IGNORED\n"); #endif return(0); } /* * THANKS TO Jac Kersing * SMM: IGNORE ATTEMPTS TO WRITE TO PARENT DIRECTORIES * AND CHECK FOR BUFFER OVERFLOWS */ name = (char *)strrchr(filename,'/'); if (name != (char *)NULL) { /* FOUND A FUNNY */ #if DEBUG debug("ILLEGAL FILE NAME - IGNORED\n"); #endif return(0); /* GO AWAY */ } return(1); } int bb_errmsg(type,msg) char *type; char *msg; { int rc = 0; extern char bbprog[]; if( msg && type && strlen(bbprog) > 0 && strlen(type) > 0 ) { fprintf(stderr,"%s %s %s %s\n",gettimestr(),bbprog,type,msg); } else if( msg && strlen(bbprog) > 0 ) { fprintf(stderr,"%s %s %s\n",gettimestr(),bbprog,msg); } else if( msg && type && strlen(type) > 0 ) { fprintf(stderr,"%s %s %s\n",gettimestr(),type,msg); } else { fprintf(stderr,"%s bbutils bb_errmsg() invalid arguments\n",gettimestr()); rc = 1; } fflush(stderr); return(rc); } int bb_putenv(varname,val,staticvar,maxlen) char *varname; char *val; char *staticvar; int maxlen; { int rc; char *valp; if( varname == NULL || val == NULL ) { return(-1); } if( strlen(varname) == 0 ) { return(-1); } if( maxlen < (strlen(varname)+2) ) { return(-1); } memset(staticvar,0,maxlen); strcpy(staticvar,varname); strcat(staticvar,"="); strncat(staticvar,val,maxlen-strlen(staticvar)-1); if( (rc=putenv(staticvar)) != 0 ) { #if DEBUG fprintf(stderr,"bb_putenv() failed for <%s>\n",staticvar); fprintf(stderr," trying again by truncating value length in 1/2\n"); fflush(stderr); #endif if( strlen(staticvar) > (strlen(varname)+1) ) { valp = staticvar + strlen(varname) + 1 + ((strlen(staticvar)-strlen(varname)-1)/2); /* Reduce tha value part by half its length */ *(valp+1) = '\0'; if( (rc=putenv(staticvar)) != 0 ) { #if DEBUG fprintf(stderr,"bb_putenv() failed on 2nd try for <%s>\n",staticvar); fflush(stderr); #endif ; } } } return(rc); } void convert_web_str(buf) char *buf; { char *bufp; char newchar,currchar1,currchar2; if( !buf ) { return; } if( strlen(buf) == 0 ) { return; } bufp = buf; while( bufp && *bufp && ((bufp=(char *)strchr(bufp,'%')) != NULL) ) { currchar1 = *(bufp+1); if( (currchar1 > '1') && (currchar1 < '8') ) { newchar = (char) ((currchar1 - '0') * 16); currchar2 = toupper(*(bufp+2)); if( (currchar2 >= '0') && (currchar2 <= '9') ) { newchar += (char) (currchar2 - '0'); } else if( (currchar2 >= 'A') && (currchar2 <= 'F') ) { newchar += (char) ((currchar2 - 'A') + 10); } else { bufp++; continue; } *bufp = newchar; bufp++; /* Or we at the end of the buffer ? */ if( (*(bufp+2)) ) { strcpy(bufp,bufp+2); } else { *bufp = '\0'; break; } } else { bufp++; } } return; } int bb_rename(oldfile,newfile) char *oldfile; char *newfile; { int rc; char errmsg[MAXLINE*3]; #ifndef NORENAME if( (rc=rename(oldfile,newfile)) ) { sprintf(errmsg,"Could not rename %s to %s - errno: %d\n",oldfile,newfile,errno); bb_errmsg("bb_rename",errmsg); } #else /* rename() does not exists on this platform */ /* use link then remove the old file */ /* make sure the newfile does not exists */ if( (rc=unlink(newfile)) && (errno != ENOENT) ) { sprintf(errmsg,"Could not unlink %s - errno: %d\n",newfile,errno); bb_errmsg("bb_rename",errmsg); } else if( (rc=link(oldfile,newfile)) ) { sprintf(errmsg,"Could not link %s to %s - errno: %d\n",oldfile,newfile,errno); bb_errmsg("bb_rename",errmsg); } else if( (rc=unlink(oldfile)) ) { sprintf(errmsg,"Could not unlink %s - errno: %d\n",oldfile,errno); bb_errmsg("bb_rename",errmsg); } #endif return(rc); } ./bb/bb19c/src/getipaddr.c0100644002342100007640000000136107616533072013142 0ustar bbbb/* * * getipaddr.c * * Robert-Andre Croteau * Version 1.9 * Mar 13th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * Return the IP address associated with a host name * */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ char bbprog[] = "getipaddr"; int main(argc, argv) int argc; char *argv[]; { char hostname[MAXLINE]; int rc = 1; int argvnum = 1; if( argc != 2 && argc != 3 ) { exit(rc); } if( !strcmp(argv[1],"-f") ) { argvnum = 2; } rc = 2; /* if -f not set then argvnum == 1, forceip == 0 */ /* if -f is set then argvnum == 2, forceip == 1 */ if( getipaddr(argv[argvnum],hostname,sizeof(hostname),argvnum-1) == 0 ) { rc = 0; } printf("%s",hostname); exit(rc); } ./bb/bb19c/src/bbsend.c0100644002342100007640000001156007616533072012436 0ustar bbbb/* * bbsend.c * * BIG BROTHER CLIENT PROGRAM FUNCTION * Sean MacGuire * Version 1.9 * Mar 13th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * FUNCTION THAT SENDS THE INPUT LINE TO THE DAEMON ON THE BIG BROTHER PORT * */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #include #include /* SMM 1.10 FOR DDNS */ static char *ipaddr; static int rc; #define BBAGENT "" #ifdef SIGSETJMP sigjmp_buf jmpenv; #else jmp_buf jmpenv; #endif static void bbsend_timeout() { char errormsg[MAXLINE]; sprintf(errormsg,"CONNECTION TO %s TIMED OUT...", ipaddr); bb_errmsg(NULL,errormsg); rc = 1; return; } int bbsend(machine, machineslist, data) char *machine; /* IP ADDRESS */ char *machineslist; /* LIST OF IP ADDRESSES IF machine = 0.0.0.0 */ char *data; /* DATA TO SEND ACROSS */ { int n, sockfd, port; struct sockaddr_in serv_addr; char *machlist,*nextmach,*machlistdone; int datalen = 0; char errormsg[MAXLINE]; char *outdata = NULL; struct hostent *ho = 0; /* SMM 1.10 */ struct in_addr ip; /* THE IP ADDRESS WE'RE TESTING */ rc = 0; port = PORT; /* DEFAULT PORT */ /* RAC * Support for multiple BBDISPLAYS/BBPAGERS */ #if DEBUG debug("BOX: %s\n", machine); debug("BOXES: %s\n", machineslist); #endif /* If machine == 0.0.0.0 then there are more */ /* than 1 machine, so use machineslist */ /* process one at a time */ if ( ! strcmp(machine,"0.0.0.0") ) { machlist = machineslist; } else { machlist = machine; } machlistdone = (char *) calloc(1,strlen(machlist)+1); while ( (machlist != NULL) && *machlist ) { /* Position to first non-space character */ while( isspace(*machlist) ) machlist++; /* Are we at end of machlist ? */ if( !*machlist ) break; /* YES */ machine = machlist; /* Position at 1st in list */ nextmach= (char *) strchr(machlist,' ');/* More than one left in list ? */ if (nextmach) { /* Yup */ *nextmach = '\0'; /* Terminate first one */ machlist = nextmach + 1; /* Reposition to next in list */ } else { machlist = NULL; /* No more */ } ipaddr = machine; /* GLOBAL IP ADDRESS... */ /* Don't send the same message twice to the same host */ if( machlistdone ) { if( strlen(machlistdone) > 0 ) { if(strstr(machlistdone,machlist)) { goto nextmach; } } } /* * SMM 1.10 * TRY TO SUPPORT bb USING A DNS NAME INSTEAD OF IP ADDRESS * FOR MACHINES USING DYNAMIC DNS */ if((ip.s_addr = inet_addr(machine)) == -1) { /* IS IT IN DOT FMT */ if (*machine == '\0') { #if DEBUG debug("BOX IS LOCAL\n"); #endif ho = gethostbyname("localhost"); } else ho = gethostbyname(machine); if (ho == (struct hostent *)NULL) { sprintf(errormsg,"Unknown host: %s", machine); bb_errmsg(NULL,errormsg); goto nextmach; /* NEXT HOST IF ANY */ } /* * IF WE MAKE IT HERE, WE HAVE TO COPY THE HOSTNAME * INTO THE ADDRESS STRUCTURE */ memcpy(&ip.s_addr, ho->h_addr, ho->h_length); } datalen = strlen(data) + strlen(BBAGENT) + 1; if( (outdata=(char *)malloc(datalen)) == NULL ) { sprintf(errormsg,"CAN'T ALLOCATE MEMORY IN bbsend()"); bb_errmsg(NULL,errormsg); return(-1); } strcpy(outdata,BBAGENT); strcat(outdata,data); bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = ip.s_addr; serv_addr.sin_port = htons(port); /* * THIS IS A LITTLE NASTY * IF THE SERVER'S NOT UP, THIS WILL WAIT A LONG TIME BEFORE * IT TIMES OUT. SO HANDLE THAT HERE... IT GETS 3 SECONDS TO ANSWER */ #ifdef SIGSETJMP if (sigsetjmp(jmpenv,1) != 0) { #else if (setjmp(jmpenv) != 0) { #endif #if DEBUG debug("CALLING SETJMP\n"); #endif } signal(SIGALRM, (void *) bbsend_timeout); alarm(5); /* OPEN SOCKET */ if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { sprintf(errormsg," Can't open stream socket"); bb_errmsg(NULL,errormsg); n = -1; } else if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { sprintf(errormsg,"CAN'T CONNECT TO bbd SERVER @ %s", machine); bb_errmsg(NULL,errormsg); n = -1; } else { n = send(sockfd, outdata, datalen + 1, 0); } alarm(0); /* Previous alarm not needed anymore */ #if DEBUG debug("Send returned: %d\n",n); #endif if( rc == 0 && n < 1 ) { rc = 1; } close(sockfd); /* Get next host */ nextmach: if ( !machlist ) { #if DEBUG debug("Host list done\n"); #endif break; } while ( *machlist && isspace(*machlist) ) { machlist++; } #if DEBUG debug("Next hosts: %s\n",machlist); #endif } if(machlistdone) { free(machlistdone); } #if DEBUG debug("bbsend(): rc = %d\n",rc); #endif if( outdata != NULL ) { free(outdata); } return(rc); } ./bb/bb19c/src/bbstat.c0100644002342100007640000001556507616533072012471 0ustar bbbb/* * bbstat.c * REPPORTING MODULE FOR BIG BROTHER * Sean MacGuire * Version 1.9 * Mar 13th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * * * Format: bbstat $BOX $START $END * Output: COLOR PCT START END RED%/YEL%/GRE%/PUR%/CLE%/BLU% */ #include #ifdef TIMEH #include #else #include #endif #include "bb.h" #define PCTWARN 97 char bbprog[] = "bbstat"; int isvalidline(f1,f2,f3,f4,f5,color,event,duration) char *f1,*f2,*f3,*f4,*f5,*color; int event,duration; { if(!strcmp(color,"green")) { ; } else if(!strcmp(color,"yellow")) { ; } else if(!strcmp(color,"red")) { ; } else if(!strcmp(color,"purple")) { ; } else if(!strcmp(color,"clear")) { ; } else if(!strcmp(color,"blue")) { ; } else { return(0); } if( event < 0 || duration < 0 ) { return(0); } if( duration > event ) { return(0); } return(1); } int main(argc, argv) int argc; char *argv[]; { FILE *fp; time_t ticks, start, end; int first=0; int pctwarn=PCTWARN; char logfile[4096]; char *line,*oldline; char *pctstr; int retc; unsigned int red , yel , gre , pur , cle , blu; unsigned int redcnt , yelcnt , grecnt , purcnt , clecnt , blucnt; float total, redpct, yelpct, grepct, purpct, clepct, blupct, avail; char *f1, *f2, *f3, *f4, *f5, *color, *fstate; int event, duration, outofrange; red=yel=gre=pur=cle=blu=0; redcnt=yelcnt=grecnt=purcnt=clecnt=blucnt=0; f1 = (char *)malloc(256); f2 = (char *)malloc(256); f3 = (char *)malloc(256); f4 = (char *)malloc(256); f5 = (char *)malloc(256); color = (char *)malloc(256); if (argc != 4) { #if DEBUG debug("ARG COUNT %d\n", argc); #endif exit(1); } start = atoi(argv[2]); /* START TIME */ end = atoi(argv[3]); /* END TIME */ /* * THE LAST EVENT GOES ON 'TILL "NOW" * IF THEY'VE ASKED TO END A REPORT IN THE FUTURE... */ ticks = time(&ticks); if (ticks < end) end = ticks; /* END NOW */ line = (char *)malloc(4096); oldline = (char *)malloc(4096); pctstr=(char *)getenv("BBREPWARN"); if (pctstr) { pctwarn=atoi(pctstr); if( (pctwarn < 0) || (pctwarn > 100) ) { pctwarn = PCTWARN; } } sprintf(logfile, "%s/%s", (char *)getenv("BBHIST"), argv[1]); #if DEBUG debug("LOGFILE: %s\n", logfile); #endif outofrange = 0; fstate = "OK"; fp = fopen(logfile, "rw"); if (fp == NULL) exit(2); while (fgets(line, 4095, fp)) { scanline: event=duration=0; /* INITIALIZE */ f1[0] = f2[0] = f3[0] = f4[0] = f5[0] = '\0'; retc = sscanf(line, "%256s %256s %256s %256s %256s %256s %d %d", f1,f2,f3,f4,f5,color,&event,&duration); /* * HERE'S THE LOGIC TO ADD ALL THIS STUFF UP... */ if (first == 0) { /* FIX START TIME TO BE FIRST EVENT */ /* If there were no stats for the period, make it clear */ if( event > end ) { strcpy(color,"clear"); duration = 0; outofrange = 1; break; } /* If the 1st available stats are after the start period, reset the start period */ if (event > start) { start = event; } /* Never redo these tests */ first = 1; } /* Was there a duration ? */ /* Nope, then make sure that it is the last entry in the file */ if( retc == 7 ) { /* Save the current line */ strcpy(oldline,line); /* Try to read another line, if you can then it's */ /* an invalid line */ if( fgets(line,4095,fp) ) { #if DEBUG debug("Skipping: %s",oldline); #endif /* go do the sscanf for this new line */ fstate= "NOTOK"; goto scanline; } strcpy(line,oldline); if ( end > event ) { duration = end - event; } else { duration = 0; } } else { if( retc != 8 ) { #if DEBUG debug("Skipping: %s",line); #endif fstate= "NOTOK"; continue; } } if( !isvalidline(f1,f2,f3,f4,f5,color,event,duration) ) { #if DEBUG debug("Skipping: %s",line); #endif fstate="NOTOK"; continue; } #if DEBUG debug("Calculating: %s",line); #endif /* Does this history file entry relevant to the period ? */ if ( (event + duration) <= start ) { continue; } /* Does this entry carries over the start period ? */ /* Then make the entry begin at start, recalculate duration */ if (event < start) { /* ADJUST START */ duration = (event + duration) - start; event = start; } /* Is the entry is within the period ? */ if (event >= start && event <= end) { /* Does the entry carry over the end period ? */ if (event + duration > end) { /* ADJUST DURATION */ duration = end - event; } /* Make calculations */ if (strcmp(color, "green") == 0) { gre += duration; grecnt++; } else if (strcmp(color, "red") == 0) { red += duration; redcnt++; } else if (strcmp(color, "yellow") == 0) { yel += duration; yelcnt++; } else if (strcmp(color, "clear") == 0) { cle += duration; clecnt++; } else if (strcmp(color, "purple") == 0) { pur += duration; purcnt++; } else if (strcmp(color, "blue") == 0) { blu += duration; blucnt++; } } /* Are we done ? */ if (event > end) { /* It's over */ break; } #if DEBUG debug("%s %d %d\n", color, event, duration); #endif } #ifdef NOTNEEDED if (event < end) { /* EXTEND THE LAST EVENT */ duration = end - event; if (strcmp(color, "red") == 0) red += duration; if (strcmp(color, "yellow") == 0) yel += duration; if (strcmp(color, "green") == 0) gre += duration; if (strcmp(color, "clear") == 0) cle += duration; if (strcmp(color, "purple") == 0) pur += duration; if (strcmp(color, "blue") == 0) blu += duration; } #endif total = end - start; /* REAL TOTAL TIME */ /* * NOW PRINT OUT THE RESULTS */ redpct = red/(total/100); yelpct = yel/(total/100); grepct = gre/(total/100); clepct = cle/(total/100); blupct = blu/(total/100); purpct = pur/(total/100); #if DEBUG debug("total: %.0f\n", total); debug("red: %d\n", red); debug("clear: %d\n", cle); debug("green: %d\n", gre); debug("yellow: %d\n", yel); debug("purple: %d\n", pur); debug("blue: %d\n", blu); debug("red: %.2f\n", redpct); debug("clear: %.2f\n", clepct); debug("green: %.2f\n", grepct); debug("yellow: %.2f\n", yelpct); debug("purple: %.2f\n", purpct); debug("blue: %.2f\n", blupct); #endif avail = 100 - redpct; /* * SHOW COLORS */ if (avail > 99.995) { if( outofrange == 0 ) { printf("green "); } else { printf("clear "); } } else if (avail >= pctwarn) printf("yellow "); else printf("red "); printf("%.2f ", avail); /* PRINT AVAILABILITY */ printf("%d %d ", (int)start, (int)end); /* PRINT TIME */ printf("%.2f ", redpct); printf("%.2f ", yelpct); printf("%.2f ", grepct); printf("%.2f ", purpct); printf("%.2f ", clepct); printf("%.2f ", blupct); /* SMM CHANGE TO ADD COUNT OF EVENTS printf("%s \n", fstate); */ printf("%s ", fstate); printf("%d ", redcnt); printf("%d ", yelcnt); printf("%d ", grecnt); printf("%d ", purcnt); printf("%d ", clecnt); printf("%d\n", blucnt); exit(0); } ./bb/bb19c/src/Makefile0100644002342100007640000000474207616533072012501 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) CFLAGS=-DSIGSETJMP -O -DLINUX -DGETTIMEOFDAY -DREGEXEC -DTIMEH all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/src/bb.h.DIST0100644002342100007640000000376107616533072012337 0ustar bbbb/* * bb.h * BIG BROTHER INCLUDE FILE * Sean MacGuire * Version 1.9c * May 15th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. */ #include #include &_HAVE_STDLIB_H_ &_HAVE_STRING_H_ &_HAVE_UNISTD_H_ #ifdef _HAVE_STDLIB_H_ #include #endif #ifdef _HAVE_STRING_H_ #include #endif #ifdef _HAVE_UNISTD_H_ #include #endif #include #include #include #include /* FOR ALARMS */ #include /* FOR STUPID FREEBSD */ #include /* FOR LOGGING */ #include /* FOR NON-LOCAL GOTO */ #define MAXLINE 8192 /* CHANGED FROM 256 - MAX LINE SIZE */ #ifndef DEBUG #define DEBUG 0 #endif #define debug printf #define PORT 1984 /* OBVIOUSLY BIG BROTHER'S PORT # */ #ifdef BZERO #define bzero(a,b) memset(a,0,b) #endif /* BZERO */ #ifdef SYSLOG #define LOG_DAEMON (3<<3) #endif /* SYSLOG */ #define BBREL "1.9c" #define BBRELDATE "Wed, 15 May 2002 11:00:00 GMT" #define PAGELEVELSDEFAULT "red purple" /* Make sure same value is in bbdef.sh */ #define VALIDFILENAMECHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:" #define REG_FULL 1 #define REG_BOL 2 #define REG_EOL 4 #define REG_IGN_CASE 8 #define REG_PATHEXP 16 #define PAGE_DEFAULT 1 #define PAGE_BASIC 2 #define PAGE_ESCALATE 4 #define PAGE_INITDELAY 8 #define GETDIR_FILE 1 #define GETDIR_DIR 2 #define GETDIR_OTHER 4 #define GETDIR_ALL 8 #define LINEBBHOSTS_ALL 1 #define LINEBBHOSTS_IPADDR 2 #define BB_DISABLEMSG 1 #define BB_ENABLEMSG 2 #ifdef __GNUC__ /* GCC on darwin doesn't like function in function */ /* GCC on solaris does not seem to process a function within a function correctly */ #ifndef DARWIN #ifndef SOLARIS #define FUNCINFUNCOK 1 #endif #endif #endif ./bb/bb19c/src/bbpage.c0100644002342100007640000031063507616533072012426 0ustar bbbb/* * * bbpage.c * BIG BROTHER NOTIFICATION DAEMON PROGRAM * Robert-Andre Croteau * Version 1.9b * Apr 15th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. * */ #include "bb.h" /* THE BIG BROTHER INCLUDE FILE */ #include #include #include #include #ifdef TIMEH #include /* FOR TIMING STUFF SMM */ #else #include /* FOR TIMING STUFF SMM */ #endif #include /* SMM NEW */ #include #include #ifndef ZOMBIE #include #endif #ifdef SCO3 #include #endif #ifdef MAIN char bbprog[] = "bbpage"; #endif #define MAXRULEARGS 7 #define MAXTRAPMSGSIZE 127 extern char *bbhome,bbtmpdir[],bbacksdir[],bb_hosts[]; extern int fqdn; static char *neterr; extern char *gettimestr(); extern char *readfile(); static char rcpt_env[MAXLINE]; /* Static variable for putenv() of RCPT */ static char bbalphamsg_env[MAXLINE]; /* Static variable for putenv() of BBALPHAMSG */ static char ackcode_env[MAXLINE]; /* Static variable for putenv() of ACKCODE */ static char bbhostsvc_env[MAXLINE]; /* Static variable for putenv() of BBHOSTSVC */ static char bbhostname_env[MAXLINE]; /* Static variable for putenv() of BBHOSTSVC */ static char machip_env[MAXLINE]; /* Static variable for putenv() of MACHIP */ static char bbsvcnum_env[MAXLINE]; /* Static variable for putenv() of BBSVCNUM */ static char bbsvcname_env[MAXLINE]; /* Static variable for putenv() of BBSVCNAME */ static char bbnumeric_env[MAXLINE]; /* Static variable for putenv() of BBNUMERIC */ static char bbcolorlevel_env[MAXLINE]; /* Static variable for putenv() of BBCOLORLEVEL */ static char bbhostsvcdots_env[MAXLINE]; /* Static variable for putenv() of BBHOSTSVCDOTS */ static char bbhostsvccommas_env[MAXLINE]; /* Static variable for putenv() of BBHOSTSVCCOMMAS */ static char downsecsmsg_env[MAXLINE]; /* Static variable for putenv() of DOWNSECSMSG */ static char downsecs_env[MAXLINE]; /* Static variable for putenv() of DOWNSECS */ static char recovered_env[MAXLINE]; /* Static variable for putenv() of RECOVERED */ struct bbpageinfo { char cfgdelim[MAXLINE]; char ignforall[MAXLINE]; char svcerrlist[MAXLINE]; char pagehelpcode[MAXLINE]; char recoverytagfile[MAXLINE]; char pagemsgfile[MAXLINE]; int pagedelay; }; /* * Do pre-exit stuff */ static void cleanup(pginfop) struct bbpageinfo *pginfop; { if( strlen(pginfop->recoverytagfile) > 0 ) { #if DEBUG fprintf(stderr,"Removing %s\n",pginfop->recoverytagfile); fflush(stderr); #endif unlink(pginfop->recoverytagfile); } if( strlen(pginfop->pagemsgfile) > 0 ) { #if DEBUG fprintf(stderr,"Removing %s\n",pginfop->pagemsgfile); fflush(stderr); #endif unlink(pginfop->pagemsgfile); } return; } static int getsvccode(svcname,svccode,svcerrlist) char *svcname; char *svccode; char *svcerrlist; { char worksvcname[MAXLINE]; char *workptr; struct servent *service; sprintf(worksvcname,"%s:",svcname); workptr = strstr(svcerrlist,worksvcname); if( workptr ) { workptr += strlen(worksvcname); sscanf(workptr,"%s",svccode); } else if( (service=getservbyname(svcname,"tcp")) != NULL ) { sprintf(svccode,"7%d",(int)htons(service->s_port)); } else { strcpy(worksvcname,"ERR:"); workptr = strstr(svcerrlist,worksvcname); if( workptr ) { workptr += strlen(worksvcname); sscanf(workptr,"%s",svccode); } } return(0); } static void usage(msg) char *msg; { if( msg ) { fprintf(stderr,"bbwarn: %s\n",msg); fflush(stderr); } } static void errmsg(type,msg) char *type; char *msg; { bb_errmsg(type,msg); } /* * Exit with cleanup */ static int done( rccode,pginfop ) int rccode; struct bbpageinfo *pginfop; { cleanup(pginfop); return(rccode); } static int usage_done(msg,code,pginfop) char *msg; int code; struct bbpageinfo *pginfop; { usage(msg); return(done(code,pginfop)); } /* Set up info if message came from pre-1.08b client */ static int getoldinfo(hostsvc,hostinfo,maxlen,svccodes) char *hostsvc; char *hostinfo; int maxlen; char *svccodes; { int rc = 0; FILE *fp = NULL; char entry[MAXLINE]; char ipaddr[MAXLINE],name[MAXLINE],ipmatch[MAXLINE]; char workhostsvc[MAXLINE]; int getlinebbhosts(); struct servent *service; int port; char svccode[MAXLINE],svcnum[MAXLINE],*workptr,*saveptr,svcmask[MAXLINE]; memset(hostinfo,0,maxlen); while( getlinebbhosts(&fp,entry,sizeof(entry),LINEBBHOSTS_IPADDR) == 1 ) { if( (strlen(entry) > sizeof(ipaddr)-1) ) { entry[sizeof(ipaddr)-1] = '\0'; } memset(ipaddr,0,sizeof(ipaddr)); memset(name,0,sizeof(name)); sscanf(entry,"%s %s",ipaddr,name); /* Remove dots in IP addr */ replacestr(ipaddr,sizeof(ipaddr),".",""); memset(workhostsvc,0,sizeof(workhostsvc)); strncpy(workhostsvc,hostsvc,sizeof(workhostsvc)-1); sprintf(ipmatch,"[0-9][0-9]*%s",ipaddr); if( match(hostsvc,ipmatch,REG_FULL) ) { memset(svccode,0,sizeof(svccode)); memset(svcnum,0,sizeof(svcnum)); /* Get svc code, hostsvc - ipaddr */ workhostsvc[strlen(workhostsvc)-strlen(ipaddr)] = '\0'; /* Is NET err ? (^7) */ if( strncmp(workhostsvc,neterr,strlen(neterr)) == 0 ) { /* get svc name fromn /etc/services */ port = -1; port = atoi(&workhostsvc[strlen(neterr)]); if( (service=getservbyport(port,"tcp")) != NULL ) { strcpy(svccode,service->s_name); } else { continue; } } else { /* get svc name from error codes */ sprintf(svcmask,":%s",workhostsvc); workptr = strstr(svccodes,svcmask); if( workptr ) { saveptr = workptr; while( (workptr-1) >= svccodes && !isspace(*(workptr-1)) ) { workptr--; } /* no name defined as in ... :100 instead of disk:100 */ if( workptr == saveptr ) { continue; } *saveptr = ' '; sscanf(workptr,"%s %s",svccode,svcnum); *saveptr = ':'; } else { continue; } } /* save info */ if( fqdn != 1 ) { workptr = strchr(name,'.'); if( workptr ) { *workptr = '\0'; } } /* Save host (xxx.yyy.com) svc (disk) */ sprintf(hostinfo,"%s %s",name,svccode); rc = 1; fclose(fp); break; } } return(rc); } static int getsetup(dstval,token,maxlen) char *dstval; char *token; int maxlen; { FILE *fp; char setupfile[MAXLINE]; char setupline[MAXLINE]; char worktoken[MAXLINE]; int cont,rc; if( !dstval || !token ) { return(0); } if( *token == '\0' ) { return(0); } memset(dstval,0,maxlen); cont = 0; sprintf(setupfile,"%s/etc/bbwarnsetup.cfg",bbhome); sprintf(worktoken,"%s:",token); rc = 1; /* Open etc/bbwarnsetup.cfg */ if( (fp=fopen(setupfile,"r")) != NULL ) { while( fgets(setupline,sizeof(setupline)-1,fp) != NULL ) { stripleadtrailspaces(setupline); if( (cont == 0 && strncmp(setupline,worktoken,strlen(worktoken)) == 0) || (cont == 1) ) { if( cont == 0 ) { stripleadtrailspaces(&setupline[strlen(worktoken)]); strncat(dstval,&setupline[strlen(worktoken)],maxlen-strlen(dstval)-1); } else { strncat(dstval,setupline,maxlen-strlen(dstval)-1); } rc = 0; /* Do we have a line continuation character ? */ if( dstval[strlen(dstval)-1] != '\\' ) { break; /* nope */ } else { /* Remove the continuation character */ dstval[strlen(dstval)-1] = '\0'; cont = 1; } } } fclose(fp); } return(rc); } /* * Extract initial delay and delay from recipient * 0 - error * 1 - no error */ static int getdelay(rcpt,initdelay,delay,type,pagedelay) char *rcpt; int *initdelay; int *delay; int *type; int pagedelay; { char *pgptr; char workbuf[MAXLINE]; if( (rcpt == NULL) || (initdelay == NULL) || (delay == NULL) || (pagedelay < 0) ) { return(0); } *delay = pagedelay; *initdelay = 0; pgptr = strchr(rcpt,':'); if( pgptr != NULL ) { ++pgptr; strcpy(workbuf,pgptr); /* Save full override qualifier */ /* Now just get the initial delay value */ if( *pgptr == '~' ) { /* * recipient:~XXX[-YYY] */ *type = PAGE_INITDELAY; pgptr++; if( sscanf(pgptr,"%d-%d",initdelay,delay) != 2 ) { *initdelay = atoi(pgptr); #if DEBUG fprintf(stderr,"getdelay(): PAGE_INITDELAY:ARGS!=2 - initdelay = %d, delay = %d\n",*initdelay,*delay); fflush(stderr); #endif } else { #if DEBUG fprintf(stderr,"getdelay(): PAGE_INITDELAY:ARGS==2 - initdelay = %d, delay = %d\n",*initdelay,*delay); fflush(stderr); #endif } } else if( *pgptr == '^') { /* * recipient:^XXX[-YYY] */ *type = PAGE_ESCALATE; pgptr++; if( sscanf(pgptr,"%d-%d",initdelay,delay) != 2 ) { *initdelay = atoi(pgptr); #if DEBUG fprintf(stderr,"getdelay(): PAGE_ESCALATE:ARGS!=2 - initdelay = %d, delay = %d\n",*initdelay,*delay); fflush(stderr); #endif } else { #if DEBUG fprintf(stderr,"getdelay(): PAGE_ESCALATE:ARGS==2 - initdelay = %d, delay = %d\n",*initdelay,*delay); fflush(stderr); #endif } } else { /* * recipient:XXX */ *type = PAGE_BASIC; *initdelay = 0; *delay = atoi(pgptr); #if DEBUG fprintf(stderr,"getdelay(): PAGE_BASIC:NONDEFAULT - initdelay = %d, delay = %d\n",*initdelay,*delay); fflush(stderr); #endif } } else { *initdelay = 0; *delay = pagedelay; *type = PAGE_BASIC; #if DEBUG fprintf(stderr,"getdelay(): PAGE_BASIC:DEFAULT - initdelay = %d, delay = %d\n",*initdelay,*delay); fflush(stderr); #endif } return(1); } void expand_briefrcpts(rcptslist,maxlen) char *rcptslist; int maxlen; { char *newrcptslist, lastchar, pgrcpts[MAXLINE]; char *workptr, *qualptr, *newpgrs; int len; int errdone = 0; if( !rcptslist ) { return; } stripleadtrailspaces(rcptslist); if( strlen(rcptslist) == 0 ) { return; } if( (newrcptslist=(char *) calloc(1,maxlen)) == NULL) { return; } workptr = rcptslist; while( *workptr != '\0' ) { len = strcspn(workptr," \t"); /* Keep the last char to reset it later */ lastchar = *(workptr+len); /* Terminate recipient */ *(workptr+len) = '\0'; /* recipient does not contain qualifier */ if( (qualptr = strchr(workptr,':')) != NULL ) { *qualptr = '\0'; } getsetup(pgrcpts,workptr,sizeof(pgrcpts)); if( strlen(pgrcpts) > 0 ) { /* Remove qualifiers from recipients */ while( (qualptr = strchr(pgrcpts,':')) != NULL ) { while( *qualptr && !isspace(*qualptr) ) { *qualptr = ' '; qualptr++; } } /* Remove extra spaces generated */ space_sep(pgrcpts); newpgrs = pgrcpts; } else { newpgrs = workptr; } /* Make sure new list will stay within bounds */ /* I know, I could go for each rcpt but hey */ /* if someone ever gets this filled up they deserve */ /* be shot ! > 100 recipients ! */ if( (strlen(newrcptslist)+strlen(newpgrs)+2) < (size_t)maxlen ) { if(strlen(newrcptslist) > 0) { strcat(newrcptslist," "); } strcat(newrcptslist,newpgrs); } else { /* Only complain once */ if( errdone == 0 ) { bb_errmsg("bbpage","Page group expansion failed - too many recipients"); errdone = 1; } } /* Go to next recipient */ workptr += len; /* Remember our old last char, put it back */ *workptr = lastchar; while( isspace(*workptr) ) { workptr++; } } strcpy(rcptslist,newrcptslist); free(newrcptslist); return; } static int save_notif(hostsvc,machip,rcptentry,svcnum,downsecsmsg,recovered) char *hostsvc; char *machip; char *rcptentry; char *svcnum; char *downsecsmsg; int recovered; { char logline[MAXLINE]; char notiflog[MAXLINE]; if( recovered == 1 ) { sprintf(notiflog,"%s/recoverymsgs.log",bbacksdir); } else { sprintf(notiflog,"%s/notifications.log",bbacksdir); } #if DEBUG fprintf(stderr,"notiflog: <%s>\n",notiflog); fflush(stderr); #endif sprintf(logline,"%s %s (%s) %s %d %s %s\n",gettimestr() ,hostsvc ,machip ,rcptentry ,(int)time(NULL) ,svcnum ,downsecsmsg); return(appendfile(notiflog,logline)); } static int save_recoveries(host,svc,downsecs) char *host; char *svc; int downsecs; { char logline[MAXLINE]; char logname[MAXLINE]; sprintf(logname,"%s/recoveries.log",bbacksdir); sprintf(logline,"%s %s %s %d %d\n",gettimestr() ,host ,svc ,(int)time(NULL) ,downsecs); return(appendfile(logname,logline)); } static int save_acklog(np_acknumber,delay,acknumber,np_filename,np_host,np_color,message) char *np_acknumber; char *delay; char *acknumber; char *np_filename; char *np_host; char *np_color; char *message; { char logline[MAXLINE]; char logname[MAXLINE]; time_t timenow; timenow = time(NULL); sprintf(logname,"%s/acklog",bbacksdir); sprintf(logline,"%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",timenow ,np_acknumber ,delay ,acknumber ,np_filename ,np_host ,np_color ,message); return(appendfile(logname,logline)); } static int send_mail(mailmsg,subject,rcpt) char *mailmsg; char *subject; char *rcpt; { char *mail; char mailcmd[MAXLINE]; FILE *pipef; char recipient[MAXLINE]; #if DEBUG fprintf(stderr,"Sending out the following mail message:\n"); fprintf(stderr,"Subject: %s\n",subject); fprintf(stderr,"Text: %s\n",mailmsg); fprintf(stderr,"Recipient: %s\n",rcpt); fflush(stderr); #endif mail = getenv("MAIL"); if( !mail ) { mail = ""; } if( strlen(mail) == 0 ) { fprintf(stderr,"MAIL env variable not set\n"); fflush(stderr); return(0); } if( (strlen(mail) + strlen(subject) + strlen(recipient)) > (MAXLINE-1) ) { fprintf(stderr,"MAIL too large\n"); fflush(stderr); return(0); } if( match(rcpt,"ep-.*",REG_FULL) == 1 ) { strcpy(recipient,rcpt+3); } else { strcpy(recipient,rcpt); } memset(mailcmd,0,sizeof(mailcmd)); replacestr(subject,sizeof(subject),"'",""); replacestr(recipient,sizeof(recipient),"'",""); sprintf(mailcmd,"%s '%s' '%s'",mail,subject,recipient); if( (pipef=popen(mailcmd,"w")) != NULL ) { fprintf(pipef,"%s",mailmsg); pclose(pipef); } else { fprintf(stderr,"Could not popen() to send out mail"); fflush(stderr); return(0); } return(1); } static int send_numeric(nummsg,prefix,suffix,rcpt) char *nummsg; char *prefix; char *suffix; char *rcpt; { #ifdef SCO3 pid_t child; #else int child; #endif int status; char cmd[MAXLINE]; char cmdarg1[MAXLINE]; char cmdarg2[MAXLINE]; char cmdarg3[MAXLINE]; #if DEBUG fprintf(stderr,"Sending out the following numeric message:\n"); fprintf(stderr,"Numeric code: %s\n",nummsg); fprintf(stderr,"Recipient: %s\n",rcpt); fflush(stderr); #endif if((child = fork()) < 0) { fprintf(stderr,"Couldn't fork() to send numeric message\n"); fflush(stderr); return(0); } if (child == 0) { /* THE CHILD */ sprintf(cmd,"%s/bin/sendmsg",bbhome); sprintf(cmdarg1,"%s/etc/numeric.scr",bbhome); sprintf(cmdarg2,"%s%s",prefix,rcpt); sprintf(cmdarg3,"%s%s",nummsg,suffix); execlp(cmd,cmd,cmdarg1,cmdarg2,cmdarg3,(char *)NULL); fprintf(stderr,"Couldn't execlp() to send numeric message\n"); fflush(stderr); exit(1); } #ifdef ZOMBIE wait(&status); #endif return(1); } static int send_sms(smsmsg,rcpt) char *smsmsg; char *rcpt; { #ifdef SCO3 pid_t child; #else int child; #endif int status; char cmd[MAXLINE]; char cmdarg1[MAXLINE]; char filename[MAXLINE]; char recipient[MAXLINE]; #if DEBUG fprintf(stderr,"Sending out the following SMS message:\n"); fprintf(stderr,"SMS msg: %s\n",smsmsg); fprintf(stderr,"Recipient: %s\n",rcpt); fflush(stderr); #endif strcpy(recipient,rcpt+4); if((child = fork()) < 0) { fprintf(stderr,"Couldn't fork() to send SMS message\n"); fflush(stderr); return(0); } if (child == 0) { /* THE CHILD */ sprintf(filename,"%s/sms-%d",bbtmpdir,getpid()); if( savefile(filename,smsmsg) != 1 ) { fprintf(stderr,"Couldn't create SMS message file for %s\n",recipient); fflush(stderr); exit(0); } sprintf(cmd,"%s/bin/sendmsg",bbhome); sprintf(cmdarg1,"%s/etc/sms.scr",bbhome); execlp(cmd,cmd,cmdarg1,filename,recipient,(char *)NULL); unlink(filename); fprintf(stderr,"Couldn't execlp() to send SMS message\n"); fflush(stderr); exit(1); } #ifdef ZOMBIE wait(&status); #else waitpid(child,&status,0); #endif unlink(filename); return(1); } static int send_alpha(alphamsg,rcpt) char *alphamsg; char *rcpt; { #ifdef SCO3 pid_t child; #else int child; #endif int status; char recipient[MAXLINE]; struct stat statinfo; char *alphapgr; #if DEBUG fprintf(stderr,"Sending out the following Alpha message:\n"); fprintf(stderr,"Alpha msg: %s\n",alphamsg); fprintf(stderr,"Recipient: %s\n",rcpt); fflush(stderr); #endif alphapgr = getenv("ALPHAPGR"); if( !alphapgr ) { alphapgr = ""; } if( strlen(alphapgr) == 0 ) { fprintf(stderr,"ALPHAPGR env variable not set\n"); fflush(stderr); return(0); } if( stat(alphapgr,&statinfo) != 0 ) { fprintf(stderr,"Alpha pager program <%s> not found\n",alphapgr); fflush(stderr); return(0); } strcpy(recipient,rcpt+6); if((child = fork()) < 0) { fprintf(stderr,"Couldn't fork() to send Alpha message\n"); fflush(stderr); return(0); } if (child == 0) { /* THE CHILD */ execlp(alphapgr,alphapgr,recipient,alphamsg,(char *)NULL); fprintf(stderr,"Couldn't execlp() to send Alpha message\n"); fflush(stderr); exit(1); } #ifdef ZOMBIE wait(&status); #endif return(1); } static int send_qpage(qpagemsg,rcpt) char *qpagemsg; char *rcpt; { char qpagecmd[MAXLINE]; char recipient[MAXLINE]; struct stat statinfo; char *qpage, *qpageargs; FILE *pipef; char arguments[MAXLINE]; #if DEBUG fprintf(stderr,"Sending out the following qpage message:\n"); fprintf(stderr,"Qpage msg: %s\n",qpagemsg); fprintf(stderr,"Recipient: %s\n",rcpt); fflush(stderr); #endif qpage = getenv("QPAGE"); if( !qpage ) { qpage = ""; } if( strlen(qpage) == 0 ) { fprintf(stderr,"QPAGE env variable not set\n"); fflush(stderr); return(0); } qpageargs = getenv("QPAGEARGS"); if( !qpageargs ) { qpageargs = ""; } if( strlen(qpageargs) == 0 ) { fprintf(stderr,"QPAGEARGS env variable not set\n"); fflush(stderr); return(0); } if( stat(qpage,&statinfo) != 0 ) { fprintf(stderr,"Qpage program <%s> not found\n",qpage); fflush(stderr); return(0); } strcpy(recipient,rcpt+3); memset(arguments,0,sizeof(arguments)); strncpy(arguments,qpageargs,sizeof(arguments)); replacestr(arguments,sizeof(arguments),"'",""); replacestr(recipient,sizeof(recipient),"'",""); memset(qpagecmd,0,sizeof(qpagecmd)); sprintf(qpagecmd,"%s '%s' -p '%s'",qpage,arguments,recipient); if( (pipef=popen(qpagecmd,"w")) != NULL ) { fprintf(pipef,"%s",qpagemsg); pclose(pipef); } else { fprintf(stderr,"Could not popen() to use Qpage"); fflush(stderr); return(0); } return(1); } static int send_sendpage(sendpagemsg,rcpt) char *sendpagemsg; char *rcpt; { char sendpagecmd[MAXLINE]; char recipient[MAXLINE]; struct stat statinfo; char *sendpage, *sendpageargs; FILE *pipef; char arguments[MAXLINE]; #if DEBUG fprintf(stderr,"Sending out the following sendpage message:\n"); fprintf(stderr,"Sendpage msg: %s\n",sendpagemsg); fprintf(stderr,"Recipient: %s\n",rcpt); fflush(stderr); #endif sendpage = getenv("SENDPAGE"); if( !sendpage ) { sendpage = ""; } if( strlen(sendpage) == 0 ) { fprintf(stderr,"SENDPAGE env variable not set\n"); fflush(stderr); return(0); } sendpageargs = getenv("SENDPAGEARGS"); if( !sendpageargs ) { sendpageargs = ""; } if( strlen(sendpageargs) == 0 ) { fprintf(stderr,"SENDPAGEARGS env variable not set\n"); fflush(stderr); return(0); } if( stat(sendpage,&statinfo) != 0 ) { fprintf(stderr,"Sendpage program <%s> not found\n",sendpage); fflush(stderr); return(0); } /* It's either sp- or hsp- */ if( strncmp(rcpt,"sp-",3) == 0 ) { strcpy(recipient,rcpt+3); } else { strcpy(recipient,rcpt+4); } memset(sendpagecmd,0,sizeof(sendpagecmd)); memset(arguments,0,sizeof(arguments)); strncpy(arguments,sendpageargs,sizeof(arguments)); replacestr(arguments,sizeof(arguments),"'",""); replacestr(recipient,sizeof(recipient),"'",""); if( strncmp(rcpt,"sp-",3) == 0 ) { sprintf(sendpagecmd,"%s '%s' '%s'",sendpage,arguments,recipient); } else { sprintf(sendpagecmd,"%s '%s' '-p%s'",sendpage,arguments,recipient); } if( (pipef=popen(sendpagecmd,"w")) != NULL ) { fprintf(pipef,"%s",sendpagemsg); pclose(pipef); } else { fprintf(stderr,"Could not popen() to use Sendpage"); fflush(stderr); return(0); } return(1); } static int send_smsclient(smsclientmsg,rcpt) char *smsclientmsg; char *rcpt; { char smsclient[MAXLINE]; char recipient[MAXLINE]; char smsmsg[MAXLINE]; struct stat statinfo; #ifdef SCO3 pid_t child; #else int child; #endif int status; #if DEBUG fprintf(stderr,"Sending out the following smsclient message:\n"); fprintf(stderr,"smsclient msg: %s\n",smsclientmsg); fprintf(stderr,"Recipient: %s\n",rcpt); fflush(stderr); #endif sprintf(smsclient,"%s/bin/sendsms",bbhome); if( stat(smsclient,&statinfo) != 0 ) { fprintf(stderr,"smsclient program <%s> not found\n",smsclient); fflush(stderr); return(0); } strcpy(recipient,rcpt+10); if((child = fork()) < 0) { fprintf(stderr,"Couldn't fork() to send smsclient message\n"); fflush(stderr); return(0); } if (child == 0) { /* THE CHILD */ memset(smsmsg,0,sizeof(smsmsg)); strncpy(smsmsg,smsclientmsg,150); /* Send the right buffer out Rob ! */ /* Thanks to Douwe.Dijkstra@I-Pay.com */ execlp(smsclient,smsclient,recipient,smsmsg,(char *)NULL); fprintf(stderr,"Couldn't execlp() to send smsclient message\n"); fflush(stderr); exit(1); } #ifdef ZOMBIE wait(&status); #endif return(1); } static int send_snmptrap(msg,rcpt,ipaddr,svc,recovered) char *msg; char *rcpt; char *ipaddr; char *svc; int recovered; { char snmptrap_pgm[MAXLINE],snmptrap_type[MAXLINE],entoid[MAXLINE],trapcodes[MAXLINE]; char recipient[MAXLINE],*workptr,*workptr1,workbuf[MAXLINE]; #ifdef SCO3 pid_t child; #else int child; #endif int status; struct stat statinfo; char redlines[MAXLINE],yellowlines[MAXLINE]; char trapmsg[MAXLINE],outtrapmsg[MAXLINE]; char arg1[MAXLINE],arg2[MAXLINE],arg3[MAXLINE],arg4[MAXLINE],arg5[MAXLINE],arg6[MAXLINE],arg7[MAXLINE]; char specifictype[MAXLINE],generaltype[MAXLINE]; int specifictype_int; getsetup(snmptrap_pgm,"snmptrap_pgm", sizeof(snmptrap_pgm)); if( strlen(snmptrap_pgm) == 0 ) { fprintf(stderr,"SNMP trap program location is undefined in bbwarnsetup.cfg (snmptrap_pgm)\n"); fflush(stderr); return(0); } #if DEBUG fprintf(stderr,"snmptrap program location: <%s>\n",snmptrap_pgm); fflush(stderr); #endif if( stat(snmptrap_pgm,&statinfo) != 0 ) { fprintf(stderr,"SNMP trap program <%s> not found\n",snmptrap_pgm); fflush(stderr); return(0); } getsetup(snmptrap_type,"snmptrap_type", sizeof(snmptrap_type)); if( strlen(snmptrap_type) == 0 ) { fprintf(stderr,"SNMP trap type is undefined in bbwarnsetup.cfg (snmptrap_type)\n"); fflush(stderr); return(0); } #if DEBUG fprintf(stderr,"snmptrap type: <%s>\n",snmptrap_type); fflush(stderr); #endif if( !((strcmp(snmptrap_type,"CMU") == 0) || (strcmp(snmptrap_type,"UCD") == 0) || (strcmp(snmptrap_type,"SOLARIS") == 0) || (strcmp(snmptrap_type,"HPOV") == 0)) ) { fprintf(stderr,"Unknown SNMP trap type <%s> \n", snmptrap_type); fflush(stderr); return(0); } getsetup(entoid,"entoid", sizeof(entoid)); if( strlen(entoid) == 0 ) { fprintf(stderr,"SNMP enterprise OID is undefined in bbwarnsetup.cfg (entoid)\n"); fflush(stderr); return(0); } #if DEBUG fprintf(stderr,"Enterprise OID: <%s>\n",entoid); fflush(stderr); #endif getsetup(trapcodes,"trapcodes", sizeof(trapcodes)); if( strlen(trapcodes) == 0 ) { fprintf(stderr,"SNMP trap codes are undefined in bbwarnsetup.cfg (trapcodes)\n"); fflush(stderr); return(0); } #if DEBUG fprintf(stderr,"snmptrap trap codes: <%s>\n",trapcodes); fflush(stderr); #endif strcpy(recipient,rcpt+5); memset(arg1,0,sizeof(arg1)); memset(arg2,0,sizeof(arg2)); memset(arg3,0,sizeof(arg3)); memset(arg4,0,sizeof(arg4)); memset(arg5,0,sizeof(arg5)); memset(arg6,0,sizeof(arg6)); memset(arg7,0,sizeof(arg7)); memset(redlines,0,sizeof(redlines)); memset(yellowlines,0,sizeof(yellowlines)); memset(trapmsg,0,sizeof(trapmsg)); if( strcmp(svc,"disk") == 0 ) { sscanf(msg,"%s %s %s %s %s %s %s",arg1,arg2,arg3,arg4,arg5,arg6,arg7); sprintf(trapmsg,"%s:%s %s %s %s %s %s %s %s - ",ipaddr,svc,arg1,arg2,arg3,arg4,arg5,arg6,arg7); workptr = msg; while( (workptr=strstr(workptr,"&red")) != NULL ) { memset(arg2,0,sizeof(arg2)); memset(arg3,0,sizeof(arg3)); sscanf(workptr,"%*s %s %s",arg2,arg3); if( (strlen(arg2) + strlen(arg3) + 4 + strlen(trapmsg)) < (MAXTRAPMSGSIZE) ) { strcat(trapmsg,arg2); strcat(trapmsg," "); strcat(trapmsg,arg3); strcat(trapmsg," "); } else { break; } workptr++; } workptr = msg; while( (workptr=strstr(workptr,"&yellow")) != NULL ) { memset(arg2,0,sizeof(arg2)); memset(arg3,0,sizeof(arg3)); sscanf(workptr,"%*s %s %s",arg2,arg3); if( (strlen(arg2) + strlen(arg3) + 4 + strlen(trapmsg)) < (MAXTRAPMSGSIZE) ) { strcat(trapmsg,arg2); strcat(trapmsg," "); strcat(trapmsg,arg3); strcat(trapmsg," "); } else { break; } workptr++; } } else if( strcmp(svc,"procs") == 0 ) { workptr = strchr(msg,'\r'); workptr1 = strchr(msg,'\n'); sprintf(trapmsg,"%s:%s ",ipaddr,svc); if( workptr == NULL && workptr1 == NULL ) { strncat(trapmsg,msg,MAXTRAPMSGSIZE); } else if( workptr != NULL && workptr1 == NULL ) { if( (workptr - msg) < MAXTRAPMSGSIZE ) { strncat(trapmsg,msg,workptr-msg); } else { strncat(trapmsg,msg,MAXTRAPMSGSIZE); } } else if( workptr == NULL && workptr1 != NULL ) { if( (workptr1 - msg) < MAXTRAPMSGSIZE ) { strncat(trapmsg,msg,workptr1-msg); } else { strncat(trapmsg,msg,MAXTRAPMSGSIZE); } } else { if( workptr > workptr1 ) { workptr = workptr1; } if( (workptr - msg) < MAXTRAPMSGSIZE ) { strncat(trapmsg,msg,workptr-msg); } else { strncat(trapmsg,msg,MAXTRAPMSGSIZE); } } } else { sprintf(trapmsg,"%s:%s ",ipaddr,svc); } #if DEBUG fprintf(stderr,"snmptrap message: <%s>\n",trapmsg); fflush(stderr); #endif sprintf(workbuf,"%s:",svc); workptr = strstr(trapcodes,workbuf); if( workptr == NULL ) { fprintf(stderr,"SNMP trap code for <%s> not defined in bbwarnsetup.cfg (trapcodes)\n",svc); fflush(stderr); strcpy(specifictype,"999"); } else { workptr += strlen(workbuf); sscanf(workptr,"%s",specifictype); if( recovered == 1 ) { specifictype_int = atoi(specifictype) + 1; sprintf(specifictype,"%d",specifictype_int); } } strcpy(generaltype,"6"); if((child = fork()) < 0) { fprintf(stderr,"Couldn't fork() to send SNMP trap message\n"); fflush(stderr); return(0); } if (child == 0) { /* THE CHILD */ if( strcmp(snmptrap_type,"SOLARIS") == 0 ) { /* Solaris wants spaces between (%s) */ /* Thanks to David Balkwill */ sprintf(outtrapmsg,"%s STRING ( %s )",entoid,trapmsg); #if DEBUG fprintf(stderr,"Sending out the following SOLARIS SNMP trap message:\n"); fprintf(stderr,"Trap msg: %s\n",outtrapmsg); fprintf(stderr,"Trap server: %s\n",recipient); fflush(stderr); #endif execlp(snmptrap_pgm,snmptrap_pgm,"-h",recipient,"-c","public","-e",entoid,"-i",ipaddr,"-g",generaltype,"-s",specifictype,"-a",outtrapmsg, (char *)NULL); } else if( strcmp(snmptrap_type,"CMU") == 0 ) { sprintf(outtrapmsg,"%s STRING(%s)",entoid,trapmsg); #if DEBUG fprintf(stderr,"Sending out the following CMU SNMP trap message:\n"); fprintf(stderr,"Trap msg: %s\n",outtrapmsg); fprintf(stderr,"Trap server: %s\n",recipient); fflush(stderr); #endif execlp(snmptrap_pgm,snmptrap_pgm,"-a",ipaddr,"-d",recipient,"",generaltype,specifictype,outtrapmsg, (char *)NULL); } else if( strcmp(snmptrap_type,"UCD") == 0 ) { #if DEBUG fprintf(stderr,"Sending out the following UCD SNMP trap message:\n"); fprintf(stderr,"Trap server: %s\n",recipient); fprintf(stderr,"Trap msg: %s\n",trapmsg); fprintf(stderr,"recipient: %s\n",recipient); fprintf(stderr,"entoid: %s\n",entoid); fprintf(stderr,"ipaddr: %s\n",ipaddr); fprintf(stderr,"generaltype: %s\n",generaltype); fprintf(stderr,"specifictype: %s\n",specifictype); fflush(stderr); #endif execlp(snmptrap_pgm,snmptrap_pgm,"-v","1",recipient,"",entoid,ipaddr,generaltype,specifictype,"0",entoid,"s", trapmsg, (char *)NULL); } else if( strcmp(snmptrap_type,"HPOV") == 0 ) { fprintf(stderr,"HP Openview based SNMP trap handling not yet implemented\n"); fflush(stderr); exit(0); } else { fprintf(stderr,"Unknown snmptrap type <%s> defined in bbwarnsetup.cfg\n",snmptrap_type); fflush(stderr); exit(0); } } #ifdef ZOMBIE wait(&status); #endif return(1); } static int send_extpage(rcptentry) char *rcptentry; { char extpage[MAXLINE]; char scriptname[MAXLINE]; struct stat statinfo; #ifdef SCO3 pid_t child; #else int child; #endif int status; char *workptr; char errormsg[MAXLINE]; #if DEBUG fprintf(stderr,"Sending out using an externally defined method \n"); fprintf(stderr,"Recipient: <%s>\n",rcptentry); fflush(stderr); #endif if( rcptentry == NULL ) { return(0); } /* A recipient must be at least ext-X- */ /* where X is any character */ if( strlen(rcptentry) < 7 ) { return(0); } /* It must start with ext- */ if( strncmp(rcptentry,"ext-",4) != 0 ) { return(0); } /* it must be in the form ext-XXX- */ memset(scriptname,0,sizeof(scriptname)); strncpy(scriptname,rcptentry+4,sizeof(scriptname)-1); if( (workptr=strchr(scriptname,'-')) == NULL ) { return(0); } *workptr = '\0'; workptr++; /* Path name of script must fit in extpage */ /* BBHOME + /ext/pg/ + scriptname + NULL */ if( strlen(bbhome) + 9 + strlen(scriptname) >= sizeof(extpage) ) { return(0); } sprintf(extpage,"%s/ext/pg/%s",bbhome,scriptname); memset(errormsg,0,sizeof(errormsg)); if( stat(extpage,&statinfo) != 0 ) { strcpy(errormsg,"Could not find script: "); strncat(errormsg,scriptname,sizeof(errormsg)-strlen(errormsg)-1); bb_errmsg("bbpage",errormsg); return(0); } if((child = fork()) < 0) { bb_errmsg("bbpage","Couldn't fork() for user defined notification script"); return(0); } if (child == 0) { /* THE CHILD */ bb_putenv("RCPT",workptr,rcpt_env,sizeof(rcpt_env)); execlp(extpage,extpage,(char *)NULL); strcpy(errormsg,"Couldn't execlp() "); strncat(errormsg,extpage,sizeof(errormsg)-strlen(errormsg)-1); bb_errmsg("bbpage",errormsg); exit(1); } #ifdef ZOMBIE wait(&status); #endif return(1); } int bb_page(argmsg) char *argmsg; { char workmsg[MAXLINE]; char hostsvc[MAXLINE],bbhostsvc[MAXLINE]; char msg[MAXLINE],*msgptr; char pagehelpusernum[MAXLINE]; struct stat statinfo; int recovered; char bbwarn[16]; char workfilename[MAXLINE]; char arg2[MAXLINE]; FILE *fp; char *workptr,*workptr1; int oldstylepagemsg; char hostinfo[MAXLINE]; char redhost[MAXLINE],redsvc[MAXLINE]; char machip[MAXLINE],redhostip[MAXLINE]; time_t timenow; struct tm *time_tm; int ip1,ip2,ip3,ip4; char ruleargs[MAXRULEARGS][MAXLINE]; int i,cont; int nowday; int nowtime; char machsvc[MAXLINE],svcerr[MAXLINE]; char pagers[MAXLINE*2],pgrcpts[MAXLINE],pgpager[MAXLINE],*pgptr; char instr[MAXLINE],fullinstr[MAXLINE],usageline[MAXLINE*2],workline[MAXLINE*2],workline1[MAXLINE*2]; char ignpagers[MAXLINE*2], *ptrpagers, *ignpager; char *beginptr,*endptr; char dayval[MAXLINE],timesval[MAXLINE],startdayval[MAXLINE],enddayval[MAXLINE],starttimesval[MAXLINE],endtimesval[MAXLINE]; int startday,endday,starttimes,endtimes; int ignore; char hosts[MAXLINE*2],hostentry[MAXLINE],exhosts[MAXLINE*2],hghosts[MAXLINE],svcs[MAXLINE],exsvcs[MAXLINE]; char *dayrange,*timesrange; char rcptentry[MAXLINE],rcptentry1[MAXLINE],rcptentry2[MAXLINE]; char overrideval[MAXLINE],*overrideptr,*overrideptr1,*overrideptr2; int ftype; char pagedelayval[MAXLINE]; int initdelay1,delay1,type1,initdelay2,delay2,type2; char bbnumeric[MAXLINE]; char bbalpha[sizeof(msg)+MAXLINE]; char *npfilecontents,npfilename[MAXLINE]; int rc,rcptnum,randval,tmprandval,np_exists; char filemask[MAXLINE]; char prefix[MAXLINE],suffix[MAXLINE],pagelevelsmail[MAXLINE],pagelevels[MAXLINE]; char pagetype[MAXLINE],pageaddhtmlpath[MAXLINE]; DIR *dirinfo; char bbgroup[MAXLINE],color[MAXLINE]; char *bblogstatus,*bbwebhtmllogs,*cgibinurl,*bbwebhost,*bbwebhosturl; char downsecsmsg[MAXLINE],downsecsval[MAXLINE],briefrcpts[MAXLINE*2]; char randvalstr[10],randvaltag[MAXLINE],randvalsubjtag[MAXLINE],htmllink[MAXLINE],tmprandvalstr[16]; char mailsubject[MAXLINE]; char numcode[MAXLINE]; struct bbpageinfo pginfo; int save_notification; char errormsg[MAXLINE]; extern int purpleoffset; memset(&pginfo,0,sizeof(pginfo)); memset(color,0,sizeof(color)); sprintf(workfilename,"%s/etc/bbwarnrules.cfg",bbhome); if( stat(workfilename,&statinfo) != 0 ) { return(usage_done("bbwarnrules.cfg not found",1,&pginfo)); } sprintf(workfilename,"%s/etc/bbwarnsetup.cfg",bbhome); if( stat(workfilename,&statinfo) != 0 ) { usage("bbwarnsetup.cfg not found - using defaults"); } #if DEBUG fprintf(stderr,"argmsg: %s\n",argmsg); fflush(stderr); #endif /* * Not really needed, released code will be * called withing bbd * * clean_string(argmsg,"`$;|&{}\\"); * */ memset(workmsg,0,sizeof(workmsg)); strncpy(workmsg,argmsg,MAXLINE-1); stripleadtrailspaces(workmsg); msgptr = workmsg; while( *msgptr && !isspace(*msgptr) ) { msgptr++; } *msgptr = '\0'; msgptr++; while(isspace(*msgptr)) { msgptr++; } if( strlen(msgptr) > 0 ) { strcpy(msg,msgptr); #if DEBUG fprintf(stderr,"msg: %s\n",msg); fflush(stderr); #endif } else { return(usage_done("notification message missing",2,&pginfo)); } memset(hostsvc,0,sizeof(hostsvc)); strncpy(hostsvc,workmsg,sizeof(hostsvc)-1); /* Don't do notifications on summaries */ if( !strncmp(hostsvc,"summary.",strlen("summary.")) ) { return(done(0,&pginfo)); } #if DEBUG fprintf(stderr,"hostsvc: %s\n",hostsvc); fflush(stderr); #endif /* * if !FQDN then remove domain name */ if( fqdn != 1 ) { workptr = strrchr(hostsvc,'.'); /* Point to service name */ workptr1 = strchr(hostsvc,','); /* Point to domain name */ if( workptr && workptr1 && (workptr1 > workptr) ) { strcpy(workptr,workptr1); } } memset(arg2,0,sizeof(arg2)); strncpy(arg2,msg,sizeof(arg2)-1); sscanf(msg,"%s",arg2); #if DEBUG fprintf(stderr,"2nd word in message is: <%s>\n",arg2); fflush(stderr); #endif recovered = 0; /* Check if notification comes from the paging web page */ /* host.service tag is notify-admin.pagehelp */ if( !strcmp(hostsvc,"notify-admin.pagehelp") ) { #if DEBUG fprintf(stderr,"We have a \"notify-admin\" request\n",hostsvc); fflush(stderr); #endif strcpy(pagehelpusernum,arg2); } else { /* Should you notify and not create any np_* tag files ? */ /* used when color has become normal state again */ if( !strcmp(arg2,"recovered") ) { #if DEBUG fprintf(stderr,"We have a \"recovered\" message\n",hostsvc); fflush(stderr); #endif sprintf(pginfo.recoverytagfile,"%s/nprec_%s",bbtmpdir,hostsvc); /* If multiple BBDISPLAY exists then a BBPAGER */ /* may receive multiple recovery message for the */ /* same event. Only handle the 1st request */ if( stat(pginfo.recoverytagfile,&statinfo) == 0 ) { /* Don't do a done() because that'll remove */ /* the associated nprec_ file */ pginfo.recoverytagfile[0] = '\0'; return(100); } if( (fp = fopen(pginfo.recoverytagfile,"w")) == NULL ) { fprintf(stderr,"Could not create recovery tag file\n"); return(done(1,&pginfo)); } fclose(fp); recovered = 1; } strcpy(color,arg2); #if DEBUG fprintf(stderr,"color of msg: %s\n",color); fflush(stderr); #endif } /* Has this BBPAGER been disabled */ getsetup(bbwarn, "bbwarn", sizeof(bbwarn)); strtoupper(bbwarn); #if DEBUG fprintf(stderr,"bbwarn: %s\n",bbwarn); fflush(stderr); #endif /* * SMM - IF WE'RE IN FAILOVER MODE - OVERRIDE */ sprintf(workfilename,"%s/FAILOVER-BBPAGER",bbtmpdir); if( stat(workfilename,&statinfo) == 0 ) { #if DEBUG fprintf(stderr,"bbwarn: %s, reset du to existence of %s\n",bbwarn,workfilename); fflush(stderr); #endif strcpy(bbwarn,"TRUE"); } /* If BBWARN is disabled, exit */ if( (strlen(bbwarn) == 0) || strcmp(bbwarn,"TRUE") ) { return(done(0,&pginfo)); } /* * Get pagedelay value from config file */ getsetup(pagedelayval,"pagedelay",sizeof(pagedelayval)); if( isdigit(pagedelayval[0]) ) { pginfo.pagedelay = atoi(pagedelayval); } else { pginfo.pagedelay = 15; } #if DEBUG fprintf(stderr,"pagedelay: %s\n",pagedelayval); fflush(stderr); #endif /* * GET THE BBWARN RULES CONFIGURATION FILE DELIMITER */ strcpy(pginfo.cfgdelim,";"); getsetup(pginfo.cfgdelim, "cfgdelim", sizeof(pginfo.cfgdelim)); #if DEBUG fprintf(stderr,"cfgdelim: %s\n",pginfo.cfgdelim); fflush(stderr); #endif /* * GET THE SERVICE:ERROR TAGS */ strcpy(pginfo.svcerrlist,"disk:100 cpu:200 procs:300 msgs:400 conn:500 http:600 dns:800 ERR:999"); getsetup(pginfo.svcerrlist, "svcerrlist", sizeof(pginfo.svcerrlist)); #if DEBUG fprintf(stderr,"svcerrlist: %s\n",pginfo.svcerrlist); fflush(stderr); #endif /* * Get the code for required help when user uses HTML form * to page the admin(s) */ strcpy(pginfo.pagehelpcode ,"911"); getsetup(pginfo.pagehelpcode, "pagehelpcode", sizeof(pginfo.pagehelpcode)); #if DEBUG fprintf(stderr,"pagehelpcode: %s\n",pginfo.pagehelpcode); fflush(stderr); #endif memset(redhost,0,sizeof(redhost)); memset(redsvc,0,sizeof(redsvc)); workptr = strchr(hostsvc,'.'); if( !workptr ) { #if DEBUG fprintf(stderr,"Invalid host in message: %s\n",hostsvc); fprintf(stderr,"Is this a pre1.08 message ? if so upgrade your client\n"); fflush(stderr); #endif if ( match(hostsvc,"[0-9]*",REG_FULL) == 0 ) { return(usage_done("Invalid host defined in message",1,&pginfo)); } /* * Leave the following code here if we ever decide * to support pre-1.08 clients * */ oldstylepagemsg = 1; /* * We presume this is old style message * Rebuild into a new BBWARN style message * host.service (host,domain.service) is the 1st argument * We have to rebuild the IP address without '.' and match with * the incoming */ neterr = getenv("NETERR"); if( !neterr || strlen(neterr) == 0 ) { neterr = "7"; } memset(hostinfo,'\0',sizeof(hostinfo)); if( getoldinfo(hostsvc,hostinfo,sizeof(hostinfo),pginfo.svcerrlist) ) { sscanf(hostinfo,"%s %s", redhost,redsvc); sprintf(bbhostsvc,"%s.%s",redhost,redsvc); #if DEBUG fprintf(stderr,"hostinfo: (bbhostsvc:%s) (redhost:%s) (redsvc:%s)\n",bbhostsvc,redhost,redsvc); fflush(stderr); #endif } else { /* * An unmatched host may occur when the definition in the * foreign bb-hosts file is not the same as the local one * i.e 10.2.4.5 and 10.2.4.05 * one produces 10245 and the other 102405 */ strcpy(redsvc,"ERR"); sprintf(redhost,"unmatched-%s",hostsvc); sprintf(bbhostsvc,"%s.%s",redhost,redsvc); #if DEBUG fprintf(stderr,"hostinfo(unmatched): (bbhostsvc:%s) (redhost:%s) (redsvc:%s)\n",bbhostsvc,redhost,redsvc); fflush(stderr); #endif } } else { oldstylepagemsg = 0; strncpy(redhost,hostsvc,workptr-hostsvc); replacestr(redhost,sizeof(redhost),",","."); strcpy(redsvc,workptr+1); sprintf(bbhostsvc,"%s.%s",redhost,redsvc); #if DEBUG fprintf(stderr,"hostinfo: (hostsvc:%s) (bbhostsvc:%s) (redhost:%s) (redsvc:%s)\n",hostsvc,bbhostsvc,redhost,redsvc); fflush(stderr); #endif } /* * Get the code for required help when user uses HTML form * to page the admin(s) */ memset(pginfo.ignforall,'\0',sizeof(pginfo.ignforall)); getsetup(pginfo.ignforall, "ignforall", sizeof(pginfo.ignforall)); #if DEBUG fprintf(stderr,"ignforall: %s\n",pginfo.ignforall); fflush(stderr); #endif /* Does this host match the ignore token ? */ if( strlen(pginfo.ignforall) && match(hostsvc,pginfo.ignforall,REG_FULL) ) { #if DEBUG fprintf(stderr,"host: %s matched ignforall regex: %s\n",hostsvc,pginfo.ignforall); fflush(stderr); #endif return(done(0,&pginfo)); } /* * Get day of week and time of day * day of week, 0-6 * time of day 0000-2359 */ time(&timenow); time_tm = localtime(&timenow); nowday = time_tm->tm_wday; nowtime = (time_tm->tm_hour * 100) + time_tm->tm_min; /* Get IP address of host (formatted) and service code */ memset(redhostip,0,sizeof(redhostip)); memset(machsvc,0,sizeof(machsvc)); if( getipaddr(redhost,redhostip,sizeof(redhostip),1) == 0 ) { sscanf(redhostip,"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4); sprintf(machip,"%03d%03d%03d%03d",ip1,ip2,ip3,ip4); getsvccode(redsvc,svcerr,pginfo.svcerrlist); sprintf(machsvc,"%s.%s",redhost,redsvc); #if DEBUG fprintf(stderr,"machip: %s - redsvc: %s - svcerr: %s\n",machip,redsvc,svcerr); fflush(stderr); #endif } else { /* They're unmatched */ /* but could be a message from the help HTML page */ /* Is it ? */ if( strcmp(redhost,"notify-admin") != 0 ) { /* Nope */ strcpy(machip,"999999999999"); /* Old way, obsolete */ if( oldstylepagemsg == 1 ) { strcpy(svcerr,"999"); #if DEBUG fprintf(stderr,"machip: %s - svcerr: %s\n",machip,svcerr); fflush(stderr); #endif } else { sprintf(redhost,"unmatched-%s",redhost); sprintf(machsvc,"%s.%s",redhost,redsvc); getsvccode(redsvc,svcerr,pginfo.svcerrlist); #if DEBUG fprintf(stderr,"redhost: %s - machsvc: %s - svcerr: %s\n",redhost,machsvc,svcerr); fflush(stderr); #endif } } else { /* This is a user help request from HTML form */ strcpy(svcerr,pginfo.pagehelpcode); strcpy(machip,pagehelpusernum); #if DEBUG fprintf(stderr,"machip: %s - svcerr: %s\n",machip,svcerr); fflush(stderr); #endif } } sprintf(workfilename,"%s/etc/bbwarnrules.cfg",bbhome); if( (fp=fopen(workfilename,"r")) == NULL ) { return(usage_done("Can't open bbwarnrules.cfg",1,&pginfo)); } cont = 0; memset(instr,0,sizeof(instr)); memset(pagers,0,sizeof(pagers)); memset(ignpagers,0,sizeof(ignpagers)); while( fgets(instr,sizeof(instr)-1,fp) != NULL ) { stripleadtrailspaces(instr); /* empty line ? */ if( instr[0] == '\0' ) { continue; } /* Comment ? */ if( instr[0] == '#' ) { continue; } if( cont == 0 ) { memset(fullinstr,0,sizeof(fullinstr)); } if( (strlen(fullinstr)+strlen(instr)) < sizeof(instr) ) { strcat(fullinstr,instr); } else { if( (sizeof(fullinstr)-strlen(fullinstr)-1) > 0 ) { strncat(fullinstr,instr,sizeof(fullinstr)-strlen(fullinstr)-1); } } /* Do we have a continuation tag ? */ if( instr[strlen(instr)-1] == '\\' ) { /* Yup */ /* Only remove if it's still part of the string */ /* The instr may not have been completely copied into fullinstr */ if( fullinstr[strlen(fullinstr)-1] == '\\' ) { fullinstr[strlen(fullinstr)-1] = '\0'; } cont = 1; continue; } cont = 0; /* If you're wondering why I'm not using fullinstr */ /* it's because it's new code (the '\') and only instr */ /* was used in the code further below */ memset(instr,0,sizeof(instr)); strncpy(instr,fullinstr,sizeof(instr)-1); #if DEBUG fprintf(stderr,"rule line: %s\n",instr); fflush(stderr); #endif /* * For unmatched records and HTML form paging just match on lines * that start with "unmatched-" and "notify-admin" respectively */ if( strncmp(redhost,"unmatched-*",strlen("unmatched-*")) == 0 ) { if( strncmp(instr,"unmatched-*",strlen("unmatched-*")) != 0 ) { continue; } } else if( strncmp(redhost,"notify-admin",strlen("notify-admin")) == 0 ) { if( strncmp(instr,"notify-admin",strlen("notify-admin")) != 0 ) { continue; } } strcpy(workline,instr); strcat(workline,";"); /* make sure all columns are handled in the while loop */ beginptr = workline; i = 0; while( ((endptr = strchr(beginptr,pginfo.cfgdelim[0])) != NULL) && (i < MAXRULEARGS) ) { *endptr = '\0'; strcpy(ruleargs[i],beginptr); stripleadtrailspaces(ruleargs[i]); space_sep(ruleargs[i]); /* * Check if column 1,3,5,6,7 are empty */ if( (strlen(ruleargs[i]) == 0) && (i != 1) && (i!= 3) ) { sprintf(usageline,"Empty column %d",i); usage(usageline); continue; } beginptr = ++endptr; #if DEBUG fprintf(stderr,"Column %d: %s\n",i+1,ruleargs[i]); fflush(stderr); #endif i++; } /* Invalid rule line ? missing args ? */ if( i != MAXRULEARGS ) { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line: "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line: ")-1); usage(usageline); continue; } /* * Arg 1: hosts * Arg 2: excluded hosts * Arg 3: services * Arg 4: excluded hosts * Arg 5: Days of week * Arg 6: Time of day * Arg 7: recipients */ ignore = 0; /* * !line indicates recipients to ignore if it matches * remove ! from line and handle like normal rule line */ if( ruleargs[0][0] == '!' ) { ignore = 1; strcpy(ruleargs[0],&ruleargs[0][1]); #if DEBUG fprintf(stderr,"It's an ignore line, don't notify: %s \n",ruleargs[6]); fflush(stderr); #endif ptrpagers = ignpagers; } else { ptrpagers = pagers; } /* * Get host list to include */ if( strlen(ruleargs[0]) == 0 ) { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line(hosts undefined): "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line(hosts undefined): ")-1); usage(usageline); continue; } memset(workline,0,sizeof(workline)); strcpy(workline,ruleargs[0]); workptr = workline; memset(hosts,'\0',sizeof(hosts)); #if DEBUG fprintf(stderr,"Substituting hg- tags in the rule line\n"); fprintf(stderr,"Original column 1: %s\n",ruleargs[0]); fflush(stderr); #endif /* * Expand host list with hg- entries from bbwarnsetup.cfg */ while( *workptr ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",hostentry); #if DEBUG fprintf(stderr,"Checking host definition: %s\n",hostentry); fflush(stderr); #endif workptr += strlen(hostentry); stripleadspaces(workptr); if( strncmp(hostentry,"hg-",strlen("hg-")) == 0 ) { memset(hghosts,0,sizeof(hghosts)); getsetup(hghosts,hostentry,sizeof(hghosts)); if( strlen(hghosts) == 0 ) { sprintf(usageline,"%s token is empty",hostentry); usage(usageline); } else { space_sep(hghosts); sprintf(hosts,"%s %s",hosts,hghosts); } } else { sprintf(hosts,"%s %s",hosts,hostentry); } } /* * I know for a fact that it starts with a space */ stripleadtrailspaces(hosts); if( strlen(hosts) == 0 ) { strcpy(usageline,"Column 1 is empty"); usage(usageline); continue; } space_sep(hosts); #if DEBUG fprintf(stderr,"Included hosts are: <%s>\n",hosts); fflush(stderr); #endif /*replacestr(hosts,sizeof(hosts),"*",".*");*/ replacestr(hosts,sizeof(hosts)," ","|"); #if DEBUG fprintf(stderr,"Column 1 converted to a regex: <%s>\n",hosts); fflush(stderr); #endif /* * Get host list to exclude */ strcpy(workline,ruleargs[1]); workptr = workline; memset(exhosts,'\0',sizeof(exhosts)); #if DEBUG fprintf(stderr,"Original column 2: %s\n",ruleargs[1]); fflush(stderr); #endif /* Expand host list with hg- entries from bbwarnsetup.cfg */ while( *workptr ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",hostentry); #if DEBUG fprintf(stderr,"Checking host definition: %s\n",hostentry); fflush(stderr); #endif workptr += strlen(hostentry); stripleadspaces(workptr); if( strncmp(hostentry,"hg-",strlen("hg-")) == 0 ) { memset(hghosts,0,sizeof(hghosts)); getsetup(hghosts,hostentry,sizeof(hghosts)); if( strlen(hghosts) == 0 ) { sprintf(usageline,"%s token is empty",hostentry); usage(usageline); } else { space_sep(hghosts); sprintf(exhosts,"%s %s",exhosts,hghosts); } } else { sprintf(exhosts,"%s %s",exhosts,hostentry); } } /* I know for a fact that it starts with a space */ stripleadspaces(exhosts); space_sep(exhosts); #if DEBUG fprintf(stderr,"Excluded hosts are: <%s>\n",exhosts); fflush(stderr); #endif /* Does this host match an exclude token ? */ if( strlen(exhosts) ) { /*replacestr(exhosts,sizeof(exhosts),"*",".*");*/ replacestr(exhosts,sizeof(exhosts)," ","|"); #if DEBUG fprintf(stderr,"Excluded hosts converted to a regex: <%s>\n",exhosts); fprintf(stderr,"Trying to match <%s> with exhosts regex: %s\n",redhost,exhosts); fflush(stderr); #endif if( match(redhost,exhosts,REG_FULL|REG_PATHEXP) ) { /* * Yup */ #if DEBUG fprintf(stderr,"Ignore this rule as host <%s> matched this excluding regex: %s\n",redhost,exhosts); fflush(stderr); #endif continue; } #if DEBUG fprintf(stderr,"host <%s> did not with exhosts regex: %s\n",redhost,exhosts); fflush(stderr); #endif } #if DEBUG fprintf(stderr,"Trying to match host <%s> with hosts regex: %s\n",redhost,hosts); fflush(stderr); #endif /* Does this host match an include token ? */ if( !match(redhost,hosts,REG_FULL|REG_PATHEXP) ) { /* * Nope */ #if DEBUG fprintf(stderr,"Ignore this rule as host <%s> did not match this regex: %s\n",redhost,hosts); fflush(stderr); #endif continue; } #if DEBUG fprintf(stderr,"Host <%s> matched this regex: %s\n",redhost,hosts); fflush(stderr); #endif /* * Get services list to include */ if( strlen(ruleargs[2]) == 0 ) { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line(services undefined): "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line(services undefined): ")-1); usage(usageline); continue; } strcpy(svcs,ruleargs[2]); space_sep(svcs); /*replacestr(svcs,sizeof(svcs),"*",".*");*/ replacestr(svcs,sizeof(svcs)," ","|"); /* * Get services list to exclude */ strcpy(exsvcs,ruleargs[3]); space_sep(exsvcs); /*replacestr(exsvcs,sizeof(exsvcs),"*",".*");*/ replacestr(exsvcs,sizeof(exsvcs)," ","|"); #if DEBUG fprintf(stderr,"Trying to match service <%s> with svcs regex: %s\n",redsvc,exsvcs); fflush(stderr); #endif /* Does this service match an exclude token ? */ if( strlen(exsvcs) && match(redsvc,exsvcs,REG_FULL) ) { #if DEBUG fprintf(stderr,"Ignore this rule as service <%s> matched this excluding regex: %s\n",redsvc,exsvcs); fflush(stderr); #endif continue; } /* Does this service match an include token ? */ if( strlen(svcs) && !match(redsvc,svcs,REG_FULL) ) { #if DEBUG fprintf(stderr,"Ignore this rule as service <%s> did not match this regex: %s\n",redsvc,svcs); fflush(stderr); #endif continue; } /* * Is today a match for the days column ? */ strcpy(workline,ruleargs[4]); if( strcmp(workline,"*") == 0 ) { #if DEBUG fprintf(stderr,"Day definition in rule line matched all (*)\n"); fflush(stderr); #endif goto dotime; } strtolower(workline); workptr = workline; while( *workptr ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",dayval); workptr += strlen(dayval); stripleadspaces(workptr); dayrange = strchr(dayval,'-'); if( dayrange ) { #if DEBUG fprintf(stderr,"We have a day range: %s\n",dayval); fflush(stderr); #endif *dayrange = '\0'; dayrange++; if( *dayrange && !isspace(*dayrange) ) { strcpy(startdayval,dayval); strcpy(enddayval,dayrange); #if DEBUG fprintf(stderr,"Start day range: %s\n",startdayval); fprintf(stderr,"End day range: %s\n",enddayval); fflush(stderr); #endif } else { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line(invalid day range): "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line(invalid day range)): ")-1); usage(usageline); continue; } } else { strcpy(startdayval,dayval); strcpy(enddayval,dayval); #if DEBUG fprintf(stderr,"Start/End day range: %s\n",startdayval); fflush(stderr); #endif } startday = -1; startday = atoi(startdayval); endday = -1; endday = atoi(enddayval); if( startday < 0 || startday > 6 || endday < 0 || endday > 6 ) { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line(invalid day range): "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line(invalid day range)): ")-1); usage(usageline); continue; } if( (nowday >= startday) && (nowday <= endday) ) { #if DEBUG fprintf(stderr,"Current day <%d> is within Start/End day range: <%d-%d>\n",nowday,startday,endday); fflush(stderr); #endif workptr=startdayval; break; } } if( strlen(workptr) == 0 ) { #if DEBUG fprintf(stderr,"Current day <%d> is not within Start/End day range: <%d-%d>\n",nowday,startday,endday); fflush(stderr); #endif continue; } dotime: /* * Is the current time a match for the time column ? */ strcpy(workline,ruleargs[5]); if( strcmp(workline,"*") == 0 ) { #if DEBUG fprintf(stderr,"Time definition in rule line matched all (*)\n"); fflush(stderr); #endif goto dorcpts; } strtolower(workline); workptr = workline; while( *workptr ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",timesval); timesrange = strchr(timesval,'-'); workptr += strlen(timesval); stripleadspaces(workptr); if( timesrange ) { #if DEBUG fprintf(stderr,"We have a time range: %s\n",timesval); fflush(stderr); #endif *timesrange = '\0'; timesrange++; if( *timesrange && !isspace(*timesrange) ) { strcpy(starttimesval,timesval); strcpy(endtimesval,timesrange); #if DEBUG fprintf(stderr,"Start time range: %s\n",starttimesval); fprintf(stderr,"End time range: %s\n",endtimesval); fflush(stderr); #endif } else { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line(invalid time range): "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line(invalid time range)): ")-1); usage(usageline); continue; } } else { strcpy(starttimesval,timesval); strcpy(endtimesval,timesval); #if DEBUG fprintf(stderr,"Start/End time range: %s\n",starttimesval); fflush(stderr); #endif } starttimes = -1; starttimes = atoi(starttimesval); endtimes = -1; endtimes = atoi(endtimesval); if( starttimes < 0 || starttimes > 2400 || endtimes < 0 || endtimes > 2400 ) { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line(invalid time range): "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line(invalid time range)): ")-1); usage(usageline); continue; } if( nowtime >= starttimes && nowtime <= endtimes ) { #if DEBUG fprintf(stderr,"Current time <%04d> is within Start/End time range: <%04d-%04d>\n",nowtime,starttimes,endtimes); fflush(stderr); #endif workptr=starttimesval; break; } } if( strlen(workptr) == 0 ) { #if DEBUG fprintf(stderr,"Current time <%04d> is not within Start/End time range: <%04d-%04d>\n",nowtime,starttimes,endtimes); fflush(stderr); #endif continue; } dorcpts: /* * Get recipients list to notify */ #if DEBUG fprintf(stderr,"Recipients column: <%s>\n",ruleargs[6]); fflush(stderr); #endif if( strlen(ruleargs[6]) == 0 ) { memset(usageline,0,sizeof(usageline)); strcpy(usageline,"Invalid rule line(recipients undefined): "); strncat(usageline,instr,MAXLINE-strlen("Invalid rule line(recipients undefined): ")-1); usage(usageline); continue; } strcpy(workline,ruleargs[6]); workptr = workline; /* Expand host list with pg- entries from bbwarnsetup.cfg */ while( *workptr ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",rcptentry); workptr += strlen(rcptentry); stripleadspaces(rcptentry); /* Make sure the recipient does not start with one */ /* of the special qualifier characters */ if( strspn(rcptentry,":^~-") > 0 ) { sprintf(usageline,"Invalid recipient: %s",rcptentry); usage(usageline); continue; } #if DEBUG fprintf(stderr,"Validate recipient: <%s>\n",rcptentry); fflush(stderr); #endif /* * Take care of ignore recipients */ if( (ignore == 1) ) { #if DEBUG fprintf(stderr,"This recipient <%s> has been defined to be ignored\n",rcptentry); fflush(stderr); #endif if( *rcptentry == '*' ) { #if DEBUG fprintf(stderr,"The <*> recipient matches all, don't notify\n"); fflush(stderr); #endif fclose(fp); return(done(0,&pginfo)); } /* * We don't care about qualifiers on ignored recipients */ overrideptr = strchr(rcptentry,':'); if( overrideptr != NULL ) { #if DEBUG fprintf(stderr,"This recipient <%s> has been redefined as ",rcptentry); fflush(stderr); #endif *overrideptr = '\0'; #if DEBUG fprintf(stderr,"<%s>\n",rcptentry); fflush(stderr); #endif } } /* * Validate overriding qualifier if any */ memset(overrideval,'\0',sizeof(overrideval)); overrideptr = strchr(rcptentry,':'); if( overrideptr != NULL ) { #if DEBUG fprintf(stderr,"This recipient <%s> has an overidding qualifier, is it valid ?\n",rcptentry); fflush(stderr); #endif strcpy(rcptentry1,rcptentry); *overrideptr = '\0'; overrideptr++; /* Don't accept rcpt: */ if( !(*overrideptr && !isspace(*overrideptr)) ) { overrideptr = NULL; sprintf(usageline,"Invalid recipient: <%s>, overidding qualifier ignored",rcptentry1); usage(usageline); continue; } else { /* * Qualifier can only start with [~^0-9] */ #if REGEXEC if( match(overrideptr,"[~^]?[0-9]+",REG_FULL) || match(overrideptr,"[~^]?[0-9]+-[0-9]+",REG_FULL) ) { #else #if REGEX if( match(overrideptr,"[~^]{0,1}[0-9]{1,}",REG_FULL) || match(overrideptr,"[~^]{0,1}[0-9]{1,}-[0-9]{1,}",REG_FULL) ) { #else #if RE_EXEC if( match(overrideptr,"[0-9][0-9]*",REG_FULL) || match(overrideptr,"[~^][0-9][0-9]*",REG_FULL) || match(overrideptr,"[~^][0-9][0-9]*-[0-9][0-9]*",REG_FULL) ) { #else if( 0 ) { #endif #endif #endif strcpy(overrideval,overrideptr); #if DEBUG fprintf(stderr,"This recipient <%s> has a valid overidding qualifier\n",rcptentry1); fflush(stderr); #endif } else { sprintf(usageline,"Invalid recipient: <%s>, invalid overidding qualifier ",rcptentry1); usage(usageline); overrideptr = NULL; continue; } } } /* * Deal with pager group */ if( strncmp(rcptentry,"pg-",strlen("pg-")) == 0 ) { /* * Do we have an overriding parameter ? * if we do then every recipient in the list must be set with it */ #if DEBUG fprintf(stderr,"This recipient <%s> is a page group\n",rcptentry); fflush(stderr); #endif getsetup(pgrcpts,rcptentry,sizeof(pgrcpts)); #if DEBUG fprintf(stderr,"The page group <%s> is defined by <%s>\n",rcptentry,pgrcpts); fflush(stderr); #endif space_sep(pgrcpts); if( overrideptr != NULL ) { pgptr = pgrcpts; pgpager[0] = '\0'; memset(pgpager,'\0',sizeof(pgpager)); while( *pgptr ) { while( isspace(*pgptr) ) { pgptr++; } if( !*pgptr ) { break; } sscanf(pgptr,"%s",pgpager); pgptr += strlen(pgpager); overrideptr = strchr(pgpager,':'); if( overrideptr != NULL ) { *overrideptr = '\0'; } /* Thanks to valankar@ifxcorp.com */ /* for finding a bug where ignored recipient list */ /* wasn't built properly (the 2nd ptrpagers arg was previously defined as pagers) */ sprintf(ptrpagers,"%s %s:%s",ptrpagers,pgpager,overrideval); } } else { sprintf(ptrpagers,"%s %s",ptrpagers,pgrcpts); } } else { if( overrideptr != NULL ) { sprintf(ptrpagers,"%s %s:%s",ptrpagers,rcptentry,overrideval); } else { sprintf(ptrpagers,"%s %s",ptrpagers,rcptentry); } } #if DEBUG fprintf(stderr,"The list of recipients to notify is now: <%s>\n",pagers); fprintf(stderr,"The list of recipients to ignore is now: <%s>\n",ignpagers); fflush(stderr); #endif } /* I know for a fact that it starts with a space */ stripleadspaces(ptrpagers); space_sep(ptrpagers); #if DEBUG fprintf(stderr,"The final list of recipients is: <%s>\n",pagers); fflush(stderr); #endif } /* Reading bbwarnrules.cfg */ fclose(fp); /* * If we don't have any recipients, we're done */ if( strlen(pagers) == 0 ) { #if DEBUG fprintf(stderr,"Oh well, no recipients were determined, we're done\n"); fflush(stderr); #endif return(done(0,&pginfo)); } #if DEBUG fprintf(stderr,"Preliminary recipients list <%s>\n",pagers); fflush(stderr); #endif /* * Remove any recipients that were on a !rule */ if( strlen(ignpagers) > 0 ) { #if DEBUG fprintf(stderr,"Remove these recipients <%s> from the recipients list <%s>\n",ignpagers,pagers); fflush(stderr); #endif memset(workline,'\0',sizeof(workline)); strncpy(workline,ignpagers,sizeof(workline)-1); workptr = workline; while( *workptr ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",rcptentry); workptr += strlen(rcptentry); #if DEBUG fprintf(stderr,"Remove this recipient <%s> from the recipients list <%s>\n",rcptentry,pagers); fflush(stderr); #endif stripleadspaces(workptr); ignpager = strstr(pagers,rcptentry); while( ignpager != NULL ) { sscanf(ignpager,"%s",rcptentry1); pgptr = ignpager + strlen(rcptentry); if( isspace(*pgptr) || (*pgptr == ':') || (*pgptr == '\0') ) { pgptr = ignpager + strlen(rcptentry1); if( *pgptr != '\0' ) { strcpy(ignpager, pgptr); } else { *ignpager = '\0'; } ignpager = strstr(pagers,rcptentry); } else { ignpager = strstr(ignpager+1,rcptentry); } } #if DEBUG fprintf(stderr,"New recipients list <%s>\n",pagers); fflush(stderr); #endif } } space_sep(pagers); stripleadtrailspaces(pagers); if( strlen(pagers) == 0 ) { #if DEBUG fprintf(stderr,"We have no recipients, we're done\n"); fflush(stderr); #endif return(done(0,&pginfo)); } /* * Keep only one recipient definition * The definition with the lowest delay is kept */ strcat(pagers," "); /* we'll search on recipient[ :] */ memset(workline,0,sizeof(workline)); memset(ignpagers,0,sizeof(ignpagers)); strncpy(workline,pagers,sizeof(workline)-1); workptr = workline; #if DEBUG fprintf(stderr,"Keep only one recipient definition per recipient\n"); fprintf(stderr,"Our recipients list is <%s>\n",pagers); fflush(stderr); #endif /* * For each recipient choose the one with the smallest delay */ while( *workptr ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",rcptentry1); workptr += strlen(rcptentry1); stripleadspaces(workptr); #if DEBUG fprintf(stderr,"Working on recipient <%s>\n",rcptentry1); fflush(stderr); #endif strcpy(rcptentry,rcptentry1); getdelay(rcptentry1,&initdelay1,&delay1,&type1,pginfo.pagedelay); if( (overrideptr1 = strchr(rcptentry1,':')) != NULL ) { *overrideptr1 = '\0'; #if DEBUG fprintf(stderr,"Recipient <%s> has an overriding delay <%s>\n",rcptentry1,overrideptr1+1); fflush(stderr); #endif } /* * Is the recipient been defined more than once */ pgptr = workptr; while( sscanf(pgptr,"%s",rcptentry2) > 0 ) { /* Is it the same recipient ? */ if( strncmp(rcptentry2,rcptentry1,strlen(rcptentry1)) == 0 ) { /* Is it really the same recipient ? */ if( (rcptentry2[strlen(rcptentry1)] != ':') && (rcptentry2[strlen(rcptentry1)] != '\0') ) { /* nope, keep going */ pgptr = strstr(pgptr,rcptentry2) + strlen(rcptentry2); continue; } } else { /* nope, keep going */ pgptr = strstr(pgptr,rcptentry2) + strlen(rcptentry2); continue; } /* Remove this new recipient from the workline */ strcpy(pgptr,strstr(pgptr,rcptentry2)+strlen(rcptentry2)); getdelay(rcptentry2,&initdelay2,&delay2,&type2,pginfo.pagedelay); /* * We are dealing with the same recipient * * rcpt:15 has priority of rcpt:~15 or rcpt:^15 * rcpt:^15 has priority over rcpt:~15 */ #if DEBUG fprintf(stderr,"Comparing recipient <%s> to recipient <%s>\n",rcptentry,rcptentry2); fflush(stderr); #endif if( type2 < type1 ) { initdelay1 = initdelay2; delay1 = delay2; type1 = type2; strcpy(rcptentry,rcptentry2); } else if ( (type2 == type1) && (initdelay2 < initdelay1) ) { initdelay1 = initdelay2; delay1 = delay2; strcpy(rcptentry,rcptentry2); } else if ( (type2 == type1) && (initdelay2 == initdelay1) && (delay2 < delay1) ) { delay1 = delay2; strcpy(rcptentry,rcptentry2); } #if DEBUG fprintf(stderr,"Current recipient definition <%s>\n",rcptentry); fflush(stderr); #endif } sprintf(ignpagers,"%s %s",ignpagers,rcptentry); #if DEBUG fprintf(stderr,"Adding recipient <%s> to recipient list\n",rcptentry); fflush(stderr); #endif } strcpy(pagers,ignpagers); stripleadtrailspaces(pagers); space_sep(pagers); #if DEBUG fprintf(stderr,"Final recipients list <%s>\n",pagers); fflush(stderr); #endif sprintf(pginfo.pagemsgfile,"%s/pagemsg.%d",bbtmpdir,getpid()); sprintf(bbnumeric,"%s%s",svcerr,machip); #if DEBUG fprintf(stderr,"bbnumeric set to <%s>\n",bbnumeric); fflush(stderr); #endif getsetup(prefix, "prefix", sizeof(prefix)); #if DEBUG fprintf(stderr,"The prefix is set to <%s>\n",prefix); fflush(stderr); #endif getsetup(suffix, "suffix", sizeof(suffix)); #if DEBUG fprintf(stderr,"The suffix is set to <%s>\n",suffix); fflush(stderr); #endif getsetup(pagelevels, "pagelevels", sizeof(pagelevels)); replacestr(pagelevels,sizeof(pagelevels),"\t"," "); #if DEBUG fprintf(stderr,"The pagelevels is set to <%s>\n",pagelevels); fflush(stderr); #endif strcat(pagelevels," "); /* Add " " so we can search using */ getsetup(pagelevelsmail, "pagelevelsmail", sizeof(pagelevelsmail)); replacestr(pagelevelsmail,sizeof(pagelevelsmail),"\t"," "); #if DEBUG fprintf(stderr,"The pagelevelsmail is set to <%s>\n",pagelevelsmail); fflush(stderr); #endif strcat(pagelevelsmail," "); /* Add " " so we can search using */ getsetup(pagetype, "pagetype", sizeof(pagetype)); #if DEBUG fprintf(stderr,"The pagetype is set to <%s>\n",pagetype); fflush(stderr); #endif getsetup(pageaddhtmlpath, "pageaddhtmlpath", sizeof(pageaddhtmlpath)); #if DEBUG fprintf(stderr,"The pageaddhtmlpath is set to <%s>\n",pageaddhtmlpath); fflush(stderr); #endif getsetup(briefrcpts, "briefrcpt", sizeof(briefrcpts)); #if DEBUG fprintf(stderr,"The briefrcpt token is set to <%s>\n",briefrcpts); fflush(stderr); #endif expand_briefrcpts(briefrcpts,sizeof(briefrcpts)); #if DEBUG fprintf(stderr,"The briefrcpt token after expansion <%s>\n",briefrcpts); fflush(stderr); #endif /* * Determine the hosts's group name */ if( strcmp(pagetype,"GROUP") == 0 ) { #if DEBUG fprintf(stderr,"pagetype=GROUP, determine the hosts's group name\n"); fflush(stderr); #endif memset(bbgroup,0,sizeof(bbgroup)); } /* * Remove recipients that have an np_* file associated with them * but haven't been notified because they are in the state of * an initial delay or the waiting period before been escalated to */ if( recovered == 1 ) { #if DEBUG fprintf(stderr,"Recovery message: remove recipients which haven't been notified (in delay)\n"); fprintf(stderr,"Recipients list: <%s>\n",pagers); fflush(stderr); #endif memset(ignpagers,0,sizeof(ignpagers)); memset(workline,0,sizeof(workline)); strcpy(workline,pagers); workptr = workline; while( *workptr ) { /* Get recipient */ while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",rcptentry); workptr += strlen(rcptentry); while( isspace(*workptr) ) { workptr++; } /* Remove overriding delay definition if any */ workptr1 = strchr(rcptentry,':'); if( workptr1 ) { *workptr1 = '\0'; } if( strstr(ignpagers,rcptentry) != NULL ) { #if DEBUG fprintf(stderr,"Recipient <%s> already in list\n",rcptentry); fflush(stderr); #endif continue; } #if DEBUG fprintf(stderr,"Checking recipient <%s>\n",rcptentry); fflush(stderr); #endif /* Get each np_file file that match tmp/np_* */ /* Changed how np_ file is search. Map on all np_ */ /* files and match the name. the match() function doesn't */ /* like the + character without a reg exp preceeding it. */ /* Thanks to Christian Perrier which fell into this bug */ strcpy(filemask,"np_*"); dirinfo = NULL; rc = getdirfirst(&dirinfo,bbtmpdir,filemask,npfilename,GETDIR_FILE,&ftype); while( rc == 1 ) { #if DEBUG fprintf(stderr,"Is recipient <%s> associated with <%s> ?\n",rcptentry,npfilename); fflush(stderr); #endif if( strncmp(npfilename+3,rcptentry,strlen(rcptentry)) == 0 ) { /* Get file content */ sprintf(workfilename,"%s/%s",bbtmpdir,npfilename); #if DEBUG fprintf(stderr,"<%s> is associated with <%s>\n",rcptentry,workfilename); fflush(stderr); #endif if( stat(workfilename,&statinfo) == 0 ) { if( (npfilecontents=calloc(1,statinfo.st_size+1)) != NULL) { if( (fp=fopen(workfilename,"r")) != NULL ) { if( fread(npfilecontents,statinfo.st_size,1,fp) > 0 ) { /* Is this file related to the recipient ? */ if( strstr(npfilecontents,rcptentry) != NULL ) { /* Is this file related to this event ? */ if( strstr(npfilecontents,bbhostsvc) != NULL ) { /* Has the recipient already notified ? */ if( strstr(npfilecontents,"000000") == NULL ) { #if DEBUG fprintf(stderr,"Yes, add recipient <%s>\n",rcptentry); fflush(stderr); #endif sprintf(ignpagers,"%s %s",ignpagers,rcptentry); fclose(fp); free(npfilecontents); break; } } } } else { sprintf(usageline,"The contents of <%s> could not be read",workfilename); usage(usageline); } fclose(fp); } else { sprintf(usageline,"The file <%s> could not be opened",workfilename); usage(usageline); } free(npfilecontents); } else { usage("Could not allocate memory"); } } else { sprintf(usageline,"<%s> has suddenly disappeared ...",workfilename); usage(usageline); } } rc = getdirnext(dirinfo,bbtmpdir,filemask,npfilename,GETDIR_FILE,&ftype); } getdirdone(dirinfo); } stripleadtrailspaces(ignpagers); if( strlen(ignpagers) == 0 ) { #if DEBUG fprintf(stderr,"All recipients had not been notified yet, we're done: <%s>\n",pagers); fflush(stderr); #endif return(done(0,&pginfo)); } strcpy(pagers,ignpagers); #if DEBUG fprintf(stderr,"Only <%s> are to be notified about this recovery message\n",pagers); fflush(stderr); #endif } bblogstatus = getenv("BBLOGSTATUS"); if( !bblogstatus ) { bblogstatus = ""; } bbwebhtmllogs = getenv("BBWEBHTMLLOGS"); if( !bbwebhtmllogs ) { bbwebhtmllogs = ""; } cgibinurl = getenv("CGIBINURL"); if( !cgibinurl ) { cgibinurl = ""; } bbwebhost = getenv("BBWEBHOST"); if( !bbwebhost ) { bbwebhost = ""; } bbwebhosturl = getenv("BBWEBHOSTURL"); if( !bbwebhosturl ) { bbwebhosturl = ""; } #if DEBUG fprintf(stderr,"BBLOGSTATUS: <%s>\n",bblogstatus); fprintf(stderr,"BBWEBHTMLLOGS: <%s>\n",bbwebhtmllogs); fprintf(stderr,"CGIBINURL: <%s>\n",cgibinurl); fprintf(stderr,"BBWEBHOST: <%s>\n",bbwebhost); fprintf(stderr,"BBWEBHOSTURL: <%s>\n",bbwebhosturl); fflush(stderr); #endif rcptnum = 10; /* no need for leading zeros */ memset(workline,0,sizeof(workline)); strcpy(workline,pagers); workptr = workline; while( strlen(workptr) > 0 ) { while( isspace(*workptr) ) { workptr++; } if( !*workptr ) { break; } sscanf(workptr,"%s",rcptentry); randval = -1; #if DEBUG fprintf(stderr,"Notifying <%s>\n",rcptentry); fflush(stderr); #endif workptr += strlen(rcptentry); stripleadtrailspaces(workptr); getdelay(rcptentry,&initdelay1,&delay1,&type1,pginfo.pagedelay); #if DEBUG fprintf(stderr,"Recipient <%s> initdelay <%d> delay <%d> type <%d>\n",rcptentry,initdelay1,delay1,type1); fflush(stderr); #endif if( (pgptr=strchr(rcptentry,':')) != NULL ) { *pgptr = '\0'; } if( (strncmp(bbnumeric,"911",3) != 0) && recovered != 1 ) { if( strstr(pagelevelsmail,color) != NULL ) { #if DEBUG fprintf(stderr,"Only send to an e-mail recipient: <%s> in <%s>\n",color, pagelevelsmail); fflush(stderr); #endif if( (match(rcptentry,".*@.*",REG_FULL) == 1) && (match(rcptentry,"ep-.*",REG_FULL) == 0) && (match(rcptentry,"ext-.*",REG_FULL) == 0) ) { #if DEBUG fprintf(stderr,"<%s> is an e-mail recipient\n",rcptentry); fflush(stderr); #endif } else { #if DEBUG fprintf(stderr,"<%s> is *not* an e-mail recipient\n",rcptentry); fflush(stderr); #endif continue; } } time(&timenow); memset(workfilename,0,sizeof(workfilename)); sprintf(workfilename,"%s/np_%s",bbtmpdir,rcptentry); if( strcmp(pagetype,"EVENT") == 0 ) { strcat(workfilename,"_"); strcat(workfilename,bbhostsvc); } else if( strcmp(pagetype,"GROUP") == 0 ) { strcat(workfilename,"_"); strcat(workfilename,bbgroup); } else if( strcmp(pagetype,"HOST") == 0 ) { strcat(workfilename,"_"); strcat(workfilename,machip); } #if DEBUG fprintf(stderr,"Notification tag file: <%s>\n",workfilename); fflush(stderr); #endif /* * Check if a tag file already exists */ if( stat(workfilename,&statinfo) == 0 ) { #if DEBUG fprintf(stderr,"Last modification time: <%d>, time now: <%d>\n",statinfo.st_mtime,timenow); fflush(stderr); #endif if( statinfo.st_mtime > timenow ) { #if DEBUG fprintf(stderr,"Delay hasn't expired, disregard <%s>\n",rcptentry); fflush(stderr); #endif continue; } np_exists = 1; } else { np_exists = 0; } randval = getpid() % 100000; if( randval < 10 ) { randval *= 1000000; } else if( randval < 100 ) { randval *= 100000; } else if( randval < 1000 ) { randval *= 10000; } else if( randval < 10000 ) { randval *= 1000; } else { randval *= 100; } randval += rcptnum; #if DEBUG fprintf(stderr,"randval <%d>\n",randval); fprintf(stderr,"Recipient ID <%d>\n",rcptnum); fflush(stderr); #endif rcptnum++; if( type1 & (PAGE_ESCALATE|PAGE_INITDELAY) ) { /* * If the np_ file does not exist * or if an np_ file is older than 10 minutes * (or the PURPLEDELAY value if it's a purple) * then it is considered inactive and is resetted * (unless pagetype is EVENT, all np_ files are active) */ if( (np_exists == 0) || ((np_exists == 1) && (statinfo.st_mtime < (timenow - (strcmp(color,"purple") ? 600 : purpleoffset))) && (strcmp(pagetype,"EVENT") != 0)) ) { if( type1 & PAGE_INITDELAY) { sprintf(workline1,"%7d0000000 %s %s %s\n",randval,bbhostsvc,color,rcptentry); } else { sprintf(workline1,"0000000 %s %s %s\n",bbhostsvc,color,rcptentry); } savefile(workfilename,workline1); touchtime(workfilename,initdelay1); #if DEBUG fprintf(stderr,"Toggle file <%s> created with a initial delay of <%d> minutes\n",workfilename,initdelay1); fprintf(stderr,"Do not notify immediately\n",workfilename,initdelay1); fflush(stderr); #endif continue; } } /* When using pagetype EVENT, reuse ACK ids as it is certain */ /* that it is unique to that recipient/event */ if( strcmp(pagetype,"EVENT") == 0 ) { #if DEBUG fprintf(stderr,"Reuse ACK id ? np_file is <%s>\n",workfilename); fflush(stderr); #endif if( (npfilecontents = readfile(workfilename)) != NULL ) { #if DEBUG fprintf(stderr,"Contents of <%s>: <%s>\n",workfilename,npfilecontents); fflush(stderr); #endif replacestr(npfilecontents,strlen(npfilecontents),"0000000",""); if( match(npfilecontents,"[0-9][0-9][0-9][0-9][0-9][0-9][0-9][ ]",REG_BOL) == 1 ) { memset(tmprandvalstr,0,sizeof(tmprandvalstr)); strncpy(tmprandvalstr,npfilecontents,7); #if DEBUG fprintf(stderr,"<%s> has a proper ACK ID: <%s>\n",workfilename,tmprandvalstr); fflush(stderr); #endif tmprandvalstr[7] = '\0'; tmprandval = atoi(tmprandvalstr); #if DEBUG fprintf(stderr,"Current ACK id of <%s> is <%s>\n",workfilename,tmprandvalstr); fflush(stderr); #endif if( tmprandval > 0 ) { #if DEBUG fprintf(stderr,"ACK id of <%s> will be used\n",workfilename,tmprandvalstr); fflush(stderr); #endif randval = tmprandval; } } free(npfilecontents); } } sprintf(workline1,"%7d %s %s %s\n",randval,bbhostsvc,color,rcptentry); savefile(workfilename,workline1); touchtime(workfilename,delay1); #if DEBUG fprintf(stderr,"Toggle file <%s> created with a delay of <%d> minutes\n",workfilename,delay1); fprintf(stderr,"Go on and notify immediately\n",workfilename,initdelay1); fflush(stderr); #endif } /* Not a 911 notification || a recovery message */ if( recovered == 1 ) { randval = 0; } memset(randvalstr,0,sizeof(randvalstr)); memset(randvaltag,0,sizeof(randvaltag)); memset(randvalsubjtag,0,sizeof(randvalsubjtag)); if( randval >= 0 ) { sprintf(randvalstr,"%07d ",randval); sprintf(randvaltag,"[%07d] ",randval); sprintf(randvalsubjtag," - %07d",randval); } #if DEBUG fprintf(stderr,"randvaltag: <%s> randvalsubjtag: <%s>\n",randvaltag,randvalsubjtag); fflush(stderr); #endif memset(htmllink,0,sizeof(htmllink)); if( strcmp(pageaddhtmlpath,"TRUE") == 0 ) { #if DEBUG fprintf(stderr,"pageaddhtmlpath is set to TRUE\n"); fflush(stderr); #endif if( (strncmp(hostsvc,"notify-admin",strlen("notify-admin")) == 0) || (strncmp(hostsvc,"unmatched-",strlen("unmatched-")) == 0) ) { /* do nothing */ } else { if( strcmp(bblogstatus,"DYNAMIC") == 0 ) { /* Does CGIBINURL already have the BBWEBHOST path defined ? */ if( strncmp(bbwebhost,cgibinurl,strlen(bbwebhost)) != 0 ) { /* Nope */ sprintf(htmllink,"\n\nPlease see: %s%s/bb-hostsvc.sh?HOSTSVC=%s",bbwebhost,cgibinurl,hostsvc); } else { /* Yup */ sprintf(htmllink,"\n\nPlease see: %s/bb-hostsvc.sh?HOSTSVC=%s",cgibinurl,hostsvc); } } else if( strcmp(bblogstatus,"TEXT") == 0 ) { sprintf(htmllink,"\n\nPlease see: %s/logs/%s",bbwebhosturl,hostsvc); } else { /* Default is STATIC */ sprintf(htmllink,"\n\nPlease see: %s/%s.html",bbwebhtmllogs,bbhostsvc); } } } #if DEBUG fprintf(stderr,"htmllink: <%s>\n",htmllink); fflush(stderr); #endif #if DEBUG fprintf(stderr,"BBWEBHOSTURL: <%s>\n",bbwebhosturl); fflush(stderr); #endif memset(downsecsmsg,0,sizeof(downsecsmsg)); memset(downsecsval,0,sizeof(downsecsval)); if( recovered == 1 ) { memset(workline1,0,sizeof(workline1)); workptr1 = strstr(msg," seconds"); if( workptr1 ) { while( isspace(*workptr1) && workptr1 > msg ) { workptr1--; } while( isdigit(*workptr1) && workptr1 > msg ) { workptr1--; } sscanf(workptr1,"%s",workline1); } sprintf(downsecsmsg,"-- Event Duration: %s seconds",workline1); strcpy(downsecsval,workline1); #if DEBUG fprintf(stderr,"downsecsmsg: <%s>\n",downsecsmsg); fflush(stderr); #endif } memset(bbalpha,0,sizeof(bbalpha)); if( strstr(briefrcpts,rcptentry) ) { sprintf(bbalpha,"%s - %s - %s\n%s\n",bbhostsvc,bbnumeric,randvaltag,htmllink); #if DEBUG fprintf(stderr,"Brief message: <%s>\n",bbalpha); fflush(stderr); #endif } else { #if DEBUG fprintf(stderr,"randvaltag: <%s>\n",randvaltag); fprintf(stderr,"msg: <%s>\n",msg); fprintf(stderr,"htmllink: <%s>\n",htmllink); fflush(stderr); #endif strcpy(bbalpha,randvaltag); strncat(bbalpha," ",sizeof(bbalpha)-strlen(bbalpha)-2); strncat(bbalpha,bbhostsvc,sizeof(bbalpha)-strlen(bbalpha)-2); strncat(bbalpha," ",sizeof(bbalpha)-strlen(bbalpha)-2); strncat(bbalpha,msg,sizeof(bbalpha)-strlen(bbalpha)-2); strncat(bbalpha,htmllink,sizeof(bbalpha)-strlen(bbalpha)-2); strcat(bbalpha,"\n"); #if DEBUG fprintf(stderr,"Regular message: <%s>\n",bbalpha); fflush(stderr); #endif } #ifndef ZOMBIE signal(SIGCHLD, SIG_IGN); #endif /* NO ZOMBIE */ memset(numcode,0,sizeof(numcode)); sprintf(numcode,"%s%s",bbnumeric,randvalstr); save_notification = 0; if( match(rcptentry,"ext-.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an user defined recipient, trying custom notification in ext/pg/\n",rcptentry); fflush(stderr); #endif bb_putenv("BBALPHAMSG",bbalpha,bbalphamsg_env,sizeof(bbalphamsg_env)); bb_putenv("ACKCODE",randvalstr,ackcode_env,sizeof(ackcode_env)); bb_putenv("BBHOSTSVC",bbhostsvc,bbhostsvc_env,sizeof(bbhostsvc_env)); bb_putenv("BBHOSTNAME",redhost,bbhostname_env,sizeof(bbhostname_env)); bb_putenv("MACHIP",machip,machip_env,sizeof(machip_env)); bb_putenv("BBSVCNUM",svcerr,bbsvcnum_env,sizeof(bbsvcnum_env)); bb_putenv("BBSVCNAME",redsvc,bbsvcname_env,sizeof(bbsvcname_env)); bb_putenv("BBNUMERIC",numcode,bbnumeric_env,sizeof(bbnumeric_env)); bb_putenv("BBCOLORLEVEL",color,bbcolorlevel_env,sizeof(bbcolorlevel_env)); bb_putenv("BBHOSTSVCDOTS",bbhostsvc,bbhostsvcdots_env,sizeof(bbhostsvcdots_env)); bb_putenv("BBHOSTSVCCOMMAS",hostsvc,bbhostsvccommas_env,sizeof(bbhostsvccommas_env)); bb_putenv("DOWNSECSMSG",downsecsmsg,downsecsmsg_env,sizeof(downsecsmsg_env)); bb_putenv("DOWNSECS",downsecsval,downsecs_env,sizeof(downsecs_env)); bb_putenv("RECOVERED",(recovered == 1 ? "1" : "0"),recovered_env,sizeof(recovered_env)); save_notification = send_extpage(rcptentry); } else if( match(rcptentry,"ep-.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an e-page recipient\n",rcptentry); fflush(stderr); #endif sprintf(bbalpha,"!BB%s! %s - %s",randvalsubjtag,bbhostsvc,bbnumeric); strcpy(mailsubject,"BB"); save_notification = send_mail(bbalpha,mailsubject,rcptentry); } else if( match(rcptentry,".*@.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an e-mail recipient\n",rcptentry); fflush(stderr); #endif sprintf(mailsubject,"!BB%s! %s - %s",randvalsubjtag,bbhostsvc,bbnumeric); save_notification = send_mail(bbalpha,mailsubject,rcptentry); } else if( match(rcptentry,"[0-9]",REG_BOL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is a numeric recipient\n",rcptentry); fflush(stderr); #endif save_notification = send_numeric(numcode,prefix,suffix,rcptentry); } else if( match(rcptentry,"sms-.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an sms recipient\n",rcptentry); fflush(stderr); #endif save_notification = send_sms(bbalpha,rcptentry); } else if( match(rcptentry,"alpha-.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an alpha msg recipient\n",rcptentry); fflush(stderr); #endif save_notification = send_alpha(bbalpha,rcptentry); } else if( match(rcptentry,"qp-.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an qpage recipient\n",rcptentry); fflush(stderr); #endif save_notification = send_qpage(bbalpha,rcptentry); } else if( (match(rcptentry,"sp-.*",REG_FULL) == 1) || (match(rcptentry,"hsp-.*",REG_FULL) == 1) ) { #if DEBUG fprintf(stderr,"<%s> is an sendpage recipient\n",rcptentry); fflush(stderr); #endif save_notification = send_sendpage(bbalpha,rcptentry); } else if( match(rcptentry,"trap-.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an SNMP trap recipient\n",rcptentry); fflush(stderr); #endif save_notification = send_snmptrap(bbalpha,rcptentry,redhostip,redsvc,recovered); } else if( match(rcptentry,"smsclient-.*",REG_FULL) == 1 ) { #if DEBUG fprintf(stderr,"<%s> is an smsclient recipient\n",rcptentry); fflush(stderr); #endif save_notification = send_smsclient(bbalpha,rcptentry); } else { sprintf(errormsg,"Unknown recipient <%s> - it may need to be prefixed with pg-",rcptentry); bb_errmsg("bbpage",errormsg); } if( save_notification == 1 ) { save_notif(bbhostsvc,machip,rcptentry,svcerr,downsecsmsg,recovered); } } /* For each recipient */ cleanup(&pginfo); return(0); } #ifdef MAIN int main(argc,argv) int argc; char *argv[]; { if( argc != 2 ) { usage("wrong argument count"); exit(1); } bb_page(argv[1]); exit(0); } #endif /* * Process "ack" message type * * Format: * * ack_event [message] * rm_event */ void bb_doack(req) char *req; { char acktype[MAXLINE]; char workreq[MAXLINE]; char errormsg[MAXLINE*2]; char acknumber[MAXLINE],acknum[MAXLINE]; char delay[MAXLINE],downsecs[MAXLINE]; int acknumber_int,delay_int,downsecs_int; char message[MAXLINE]; char *workptr; char filemask[MAXLINE],hostsvc[MAXLINE],event[MAXLINE]; DIR *dirinfo; FILE *fp; int rc,ftype,rcptid; char npfilename[MAXLINE],workfilename[MAXLINE],ackfilename[MAXLINE],ackfilemsg[MAXLINE]; char np_acknumber[MAXLINE],np_host[MAXLINE],np_color[MAXLINE],np_recipient[MAXLINE]; struct stat statinfo; char *npfilecontents; char pagetype[MAXLINE],pagerecovered[MAXLINE]; char taginfo[MAXLINE],*commaptr,*dotptr; char request[MAXLINE],rm_npfiles[MAXLINE]; struct stat ackfilestat; int statres; time_t timenow; char timenowbuf[32]; char bbmsg[MAXLINE]; extern char bb[],*bbdisp,*bbdisplays; #ifdef SCO3 pid_t child; #else int child; #endif int status; if( req == NULL ) { errmsg("ack","NULL request for bb_doack()"); return; } if( strlen(req) == 0 ) { errmsg("ack","Empty request for bb_doack()"); return; } #if DEBUG fprintf(stderr,"Ack request: <%s>\n",req); fflush(stderr); #endif if( strlen(req) >= sizeof(workreq) ) { sprintf(errormsg,"Truncating ack request. Is %d chars, max %d characters allowed.",strlen(req),sizeof(workreq)-1); errmsg("ack",errormsg); } memset(workreq,0,sizeof(workreq)); strncpy(workreq,req,sizeof(workreq)-1); stripleadtrailspaces(workreq); memset(acktype,0,sizeof(acktype)); sscanf(workreq,"%s",acktype); workptr = strstr(workreq,acktype) + strlen(acktype); stripleadspaces(workptr); if( strcmp(acktype,"ack_event") == 0 ) { #if DEBUG fprintf(stderr,"Acking event\n"); fflush(stderr); #endif if( strlen(workptr) == 0 ) { errmsg("ack:ack_event","ack_event message is missing Ack number and delay"); return; } memset(acknumber,0,sizeof(acknumber)); sscanf(workptr,"%s",acknumber); #if DEBUG fprintf(stderr,"Ack number: <%s>\n",acknumber); fflush(stderr); #endif if( strlen(acknumber) == 0 ) { errmsg("ack:ack_event","ack_event message is missing the Ack number"); return; } acknumber_int = 0; acknumber_int = atoi(acknumber); if( acknumber_int <= 0 || acknumber_int == 99 || acknumber_int > 9999999 || strlen(acknumber) != 7 ) { sprintf(errormsg,"Invalid Ack number <%s>",acknumber); errmsg("ack:ack_event",errormsg); return; } workptr = strstr(workptr,acknumber) + strlen(acknumber); stripleadspaces(workptr); if( strlen(workptr) == 0 ) { errmsg("ack:ack_event","ack_event message is missing the delay value"); return; } memset(delay,0,sizeof(delay)); sscanf(workptr,"%s",delay); #if DEBUG fprintf(stderr,"Delay <%s>\n",delay); fflush(stderr); #endif delay_int = -1; delay_int = atoi(delay); if( delay_int < 0 ) { sprintf(errormsg,"Invalid delay <%s>",delay); errmsg("ack:ack_event",errormsg); return; } /* * Point to message if any */ workptr = strstr(workptr,delay) + strlen(delay); stripleadspaces(workptr); memset(message,0,sizeof(message)); if( strlen(workptr) != 0 ) { strncpy(message,workptr,sizeof(message)-1); replacestr(message,sizeof(message),"+"," "); } #if DEBUG fprintf(stderr,"Message <%s>\n",message); fflush(stderr); #endif /* * Now go thru the list of pagin tag files * and find out which one is associated with the number * if the ack # ends with 99 then all tagfiles with * the same prefix (without the 99) will be acknowledged */ /* * if the ack # ends with 99 then all tagfiles with * the same prefix (without the 99) will be acknowledged */ memset(acknum,0,sizeof(acknum)); rcptid = acknumber_int % 100; if( rcptid == 99 ) { strncpy(acknum,acknumber,5); } else { strcpy(acknum,acknumber); } /* Get each np_file file that match tmp/np_* */ strcpy(filemask,"np_*"); dirinfo = NULL; rc = getdirfirst(&dirinfo,bbtmpdir,filemask,npfilename,GETDIR_FILE,&ftype); while( rc == 1 ) { #if DEBUG fprintf(stderr,"Is acknumber <%s> associated with <%s> ?\n",acknumber,npfilename); fflush(stderr); #endif /* * Get file contents */ sprintf(workfilename,"%s/%s",bbtmpdir,npfilename); if( stat(workfilename,&statinfo) == 0 ) { if( (npfilecontents=calloc(1,statinfo.st_size+1)) != NULL) { if( (fp=fopen(workfilename,"r")) != NULL ) { if( fread(npfilecontents,statinfo.st_size,1,fp) > 0 ) { /* * Is this file related to the acknum ? */ if( strncmp(npfilecontents,acknum,strlen(acknum)) == 0 ) { memset(np_acknumber,0,sizeof(np_acknumber)); memset(np_host,0,sizeof(np_host)); memset(np_color,0,sizeof(np_color)); memset(np_recipient,0,sizeof(np_recipient)); sscanf(npfilecontents,"%32s %512s %16s %512s",np_acknumber,np_host,np_color,np_recipient); if( strlen(np_host) == 0 ) { strcpy(np_host,"host.not.found.in.tagfile"); } if( strlen(np_color) == 0 ) { strcpy(np_color,"color.not.found.in.tagfile"); } if( strlen(np_recipient) == 0 ) { strcpy(np_recipient,"recipient.not.found.in.tagfile"); } /* * Adjust for the delay */ #if DEBUG fprintf(stderr,"Ack # <%s> for <%s> delayed for <%s> mins\n",acknumber,np_host,delay); fflush(stderr); #endif touchtime(workfilename,delay_int); convert_web_str(message); save_acklog(np_acknumber,delay,acknumber,npfilename,np_host,np_color,message); /* * Save an ack tag file to display a different gif */ timenow = time(NULL); sprintf(timenowbuf,"%d",timenow); memset(ackfilemsg,0,sizeof(ackfilemsg)); strncpy(ackfilemsg,np_host,sizeof(ackfilemsg)-1); strncat(ackfilemsg," ",sizeof(ackfilemsg)-strlen(ackfilemsg)-1); if( rcptid == 99 ) { strncat(ackfilemsg,"global-ack",sizeof(ackfilemsg)-strlen(ackfilemsg)-1); } else { strncat(ackfilemsg,np_recipient,sizeof(ackfilemsg)-strlen(ackfilemsg)-1); } strncat(ackfilemsg," ",sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg,acknumber,sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg," ",sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg,delay,sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg," ",sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg,timenowbuf,sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg," ",sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg,message,sizeof(ackfilemsg)-strlen(ackfilemsg)-1); strncat(ackfilemsg,"\n",sizeof(ackfilemsg)-strlen(ackfilemsg)-1); /* send addtag_event message here */ /* To all known BBDISPLAYS ... */ if ((child = fork()) < 0) bbd_die("fork error"); if (child == 0) { /* THE CHILD */ /* Build message to send */ sprintf(bbmsg,"ack addtag_event %s %s ",np_host, delay); strncat(bbmsg,ackfilemsg,sizeof(bbmsg)-strlen(bbmsg)-1); /* For ZOMBIE prone OSes, use the bb exec instead of bbsend() */ /* The reason is if bbsend() gets stuck, then the whole bbd */ /* waits for the child process to end */ #ifdef ZOMBIE execlp(bb, bb, bbdisp, bbmsg, (char *)NULL); #else rc = bbsend(bbdisp,bbdisplays,bbmsg); exit(rc); #endif } /* Parent continues */ #ifdef ZOMBIE wait(&status); #endif } } else { sprintf(errormsg,"The contents of <%s> could not be read",workfilename); errmsg("ack:ack_event",errormsg); } fclose(fp); } else { sprintf(errormsg,"The file <%s> could not be opened",workfilename); errmsg("ack:ack_event",errormsg); } free(npfilecontents); } else { errmsg("ack:ack_event","Could not allocate memory"); } } else { sprintf(errormsg,"<%s> has suddenly disappeared ...",workfilename); errmsg("ack:ack_event",errormsg); } rc = getdirnext(dirinfo,bbtmpdir,filemask,npfilename,GETDIR_FILE,&ftype); } getdirdone(dirinfo); } else if( strcmp(acktype,"rm_event") == 0 ) { #if DEBUG fprintf(stderr,"ack type: <%s>\n",acktype); fflush(stderr); #endif if( strlen(workptr) == 0 ) { errmsg("ack:rm_event","message is missing host.service & event duration"); return; } memset(hostsvc,0,sizeof(hostsvc)); sscanf(workptr,"%s",hostsvc); #if DEBUG fprintf(stderr,"host.service <%s>\n",hostsvc); fflush(stderr); #endif if( valid_logname(hostsvc) != 1 ) { sprintf(errormsg,"Invalid hostname: <%s>\n",hostsvc); errmsg("ack:rm_event",errormsg); return; } workptr = strstr(workptr,hostsvc) + strlen(hostsvc); stripleadspaces(workptr); if( strlen(workptr) == 0 ) { errmsg("ack:rm_event","message is missing event duration"); return; } memset(downsecs,0,sizeof(downsecs)); sscanf(workptr,"%s",downsecs); #if DEBUG fprintf(stderr,"Duration <%s>\n",downsecs); fflush(stderr); #endif downsecs_int = -1; downsecs_int = atoi(downsecs); if( downsecs_int < 0) { sprintf(errormsg,"Invalid event duration <%s>",downsecs); errmsg("ack:rm_event",errormsg); return; } workptr = strstr(workptr,downsecs) + strlen(downsecs); stripleadspaces(workptr); if( strlen(workptr) > 0 ) { errmsg("ack:rm_event","Message contains invalid arguments"); return; } memset(taginfo,0,sizeof(taginfo)); if( fqdn == 0 ) { strcpy(event,hostsvc); commaptr = strchr(event,','); if( commaptr ) { *commaptr = '\0'; strcpy(taginfo,event); commaptr++; dotptr = strrchr(commaptr,'.'); if( dotptr ) { strcat(taginfo,dotptr); } else { /* Error, not supposed to happend */ /* but just in case */ sprintf(errormsg,"invalid host.service <%s>\n",hostsvc); errmsg("ack:rm_event",errormsg); return; } } else { strcpy(taginfo,hostsvc); } } else { strcpy(taginfo,hostsvc); replacestr(taginfo,sizeof(taginfo),",","."); } getsetup(pagetype,"pagetype", sizeof(pagetype)); if( strlen(pagetype) == 0 ) { errmsg("ack:rm_event","pagetype token is not defined in bbwarnsetup.cfg"); } #if DEBUG fprintf(stderr,"pagetype: <%s>\n",pagetype); fflush(stderr); #endif if( (strcmp(pagetype,"RCPT") != 0) && (strcmp(pagetype,"GROUP") != 0) && (strcmp(pagetype,"HOST") != 0) && (strcmp(pagetype,"EVENT") != 0) ) { sprintf(errormsg,"pagetype <%s> is invalid\n",pagetype); errmsg("ack:rm_event",errormsg); } getsetup(pagerecovered,"pagerecovered", sizeof(pagerecovered)); if( strlen(pagerecovered) == 0 ) { errmsg("ack:rm_event","pagerecovered token is not defined in bbwarnsetup.cfg"); } #if DEBUG fprintf(stderr,"pagerecovered: <%s>\n",pagerecovered); fflush(stderr); #endif /* * A recovery msg is to be sent out */ if( strcmp(pagerecovered,"TRUE") == 0 ) { sprintf(request,"%s recovered %s Problem has been resolved after %d seconds",hostsvc,gettimestr(),downsecs_int); /* * If not the first one to deal with this * then bb_page() will exit (no need to remove associated np_ files) */ #if DEBUG fprintf(stderr,"bb_page() <%s>\n",request); fflush(stderr); #endif if( bb_page(request) == 100 ) { #if DEBUG fprintf(stderr,"bb_page() already doing recovery for <%s>\n",hostsvc); fflush(stderr); #endif return; } } /* send rmtag_event message here */ /* To all known BBDISPLAYS ... */ if ((child = fork()) < 0) bbd_die("fork error"); if (child == 0) { /* THE CHILD */ /* Build message to send */ sprintf(bbmsg,"ack rmtag_event %s",taginfo); /* For ZOMBIE prone OSes, use the bb exec instead of bbsend() */ /* The reason is if bbsend() gets stuck, then the whole bbd */ /* waits for the child process to end */ #ifdef ZOMBIE execlp(bb, bb, bbdisp, bbmsg, (char *)NULL); #else rc = bbsend(bbdisp,bbdisplays,bbmsg); exit(rc); #endif } /* Parent continues */ #ifdef ZOMBIE wait(&status); #endif dotptr = strrchr(taginfo,'.'); *dotptr = '\0'; dotptr++; save_recoveries(taginfo,dotptr,downsecs_int); dotptr--; *dotptr = '.'; /* * Remove associated np_* with recovery * Do only when pagetype == EVENT * Because we know in that case that np_ file is unique * to recovered event */ if( strcmp(pagetype,"EVENT") == 0 ) { /* Get each np_file file that match tmp/np_* */ memset(rm_npfiles,0,sizeof(rm_npfiles)); strcpy(filemask,"np_*"); dirinfo = NULL; rc = getdirfirst(&dirinfo,bbtmpdir,filemask,npfilename,GETDIR_FILE,&ftype); while( rc == 1 ) { #if DEBUG fprintf(stderr,"Is recovery event <%s> associated with <%s> ?\n",taginfo,npfilename); fflush(stderr); #endif /* * Get file contents */ sprintf(workfilename,"%s/%s",bbtmpdir,npfilename); if( stat(workfilename,&statinfo) == 0 ) { if( (npfilecontents=calloc(1,statinfo.st_size+1)) != NULL) { if( (fp=fopen(workfilename,"r")) != NULL ) { if( fread(npfilecontents,statinfo.st_size,1,fp) > 0 ) { /* * Is this file related to the acknum ? */ fclose(fp); #if DEBUG fprintf(stderr,"<%s> contents <%s>\n",npfilename,npfilecontents); fflush(stderr); #endif if( strstr(npfilecontents,taginfo) != NULL ) { if( (strlen(rm_npfiles)+strlen(workfilename)+1) < (sizeof(rm_npfiles)-1) ) { strcat(rm_npfiles,workfilename); strcat(rm_npfiles," "); #if DEBUG fprintf(stderr,"rm_npfiles <%s>\n",rm_npfiles); fflush(stderr); #endif } else { strcpy(errormsg,"The rm_npfiles hold buffer is too small"); errmsg("ack:rm_event",errormsg); } } } else { sprintf(errormsg,"The contents of <%s> could not be read",workfilename); errmsg("ack:rm_event",errormsg); fclose(fp); } } else { sprintf(errormsg,"The file <%s> could not be opened",workfilename); errmsg("ack:rm_event",errormsg); } free(npfilecontents); } else { errmsg("ack:rm_event","Could not allocate memory"); } } else { sprintf(errormsg,"<%s> has suddenly disappeared ...",workfilename); errmsg("ack:rm_event",errormsg); } rc = getdirnext(dirinfo,bbtmpdir,filemask,npfilename,GETDIR_FILE,&ftype); } getdirdone(dirinfo); /* * Now remove the matched np_ files */ stripleadtrailspaces(rm_npfiles); workptr = rm_npfiles; while( strlen(workptr) > 0 ) { sscanf(workptr,"%512s",workfilename); workptr += strlen(workfilename); stripleadspaces(workptr); #if DEBUG fprintf(stderr,"removing <%s>\n",workfilename); fflush(stderr); #endif unlink(workfilename); } } } else if( strcmp(acktype,"addtag_event") == 0 ) { #if DEBUG fprintf(stderr,"ack type: <%s>\n",acktype); fflush(stderr); #endif if( strlen(workptr) == 0 ) { errmsg("ack:addtag_event","message details are missing"); return; } /* Create ack file for checkmark display if need be */ timenow = time(NULL); sprintf(timenowbuf,"%d",timenow); /* Message should be in the form "host.service delay filecontents" */ /* Get host.service */ memset(np_host,0,sizeof(np_host)); sscanf(workptr,"%s",np_host); workptr = strstr(workptr,np_host); workptr += strlen(np_host) + 1; /* Get delay */ memset(delay,0,sizeof(delay)); sscanf(workptr,"%s",delay); workptr = strstr(workptr,delay); workptr += strlen(delay) + 1; delay_int = atoi(delay); /* workptr now points to the beginning of the message */ memset(ackfilename,0,sizeof(ackfilename)); strncpy(ackfilename,bbacksdir,sizeof(ackfilename)-2); strcat(ackfilename,"/ack."); strncat(ackfilename,np_host,sizeof(ackfilename)-strlen(ackfilename)-1); memset(&ackfilestat,0,sizeof(ackfilestat)); statres = stat(ackfilename,&ackfilestat); if( statres == -1 || (ackfilestat.st_mtime < (timenow+delay_int)) ) { savefile(ackfilename,workptr); touchtime(ackfilename,delay_int); } } else if( strcmp(acktype,"rmtag_event") == 0 ) { #if DEBUG fprintf(stderr,"ack type: <%s>\n",acktype); fflush(stderr); #endif if( strlen(workptr) == 0 ) { errmsg("ack:rmtag_event","message is missing host.service"); return; } /* Message should be in the form "host.service" */ memset(hostsvc,0,sizeof(hostsvc)); sscanf(workptr,"%s",hostsvc); if( valid_logname(hostsvc) != 1 ) { sprintf(errormsg,"Invalid hostname: <%s>\n",hostsvc); errmsg("ack:rmtag_event",errormsg); return; } memset(ackfilename,0,sizeof(ackfilename)); strncpy(ackfilename,bbacksdir,sizeof(ackfilename)-7); strcat(ackfilename,"/ack."); strncat(ackfilename,hostsvc,sizeof(ackfilename)-strlen(ackfilename)-1); unlink(ackfilename); } else { sprintf(errormsg,"Invalid ack type: <%s>\n",acktype); errmsg("ack:rm_event",errormsg); } return; } ./bb/bb19c/src/bb.h0100644002342100007640000000400607616533072011566 0ustar bbbb/* * bb.h * BIG BROTHER INCLUDE FILE * Sean MacGuire * Version 1.9c * May 15th, 2002 * * (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. */ #include #include #define _HAVE_STDLIB_H_ #define _HAVE_STRING_H_ #define _HAVE_UNISTD_H_ #ifdef _HAVE_STDLIB_H_ #include #endif #ifdef _HAVE_STRING_H_ #include #endif #ifdef _HAVE_UNISTD_H_ #include #endif #include #include #include #include /* FOR ALARMS */ #include /* FOR STUPID FREEBSD */ #include /* FOR LOGGING */ #include /* FOR NON-LOCAL GOTO */ #define MAXLINE 8192 /* CHANGED FROM 256 - MAX LINE SIZE */ #ifndef DEBUG #define DEBUG 0 #endif #define debug printf #define PORT 1984 /* OBVIOUSLY BIG BROTHER'S PORT # */ #ifdef BZERO #define bzero(a,b) memset(a,0,b) #endif /* BZERO */ #ifdef SYSLOG #define LOG_DAEMON (3<<3) #endif /* SYSLOG */ #define BBREL "1.9c" #define BBRELDATE "Wed, 15 May 2002 11:00:00 GMT" #define PAGELEVELSDEFAULT "red purple" /* Make sure same value is in bbdef.sh */ #define VALIDFILENAMECHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,:" #define REG_FULL 1 #define REG_BOL 2 #define REG_EOL 4 #define REG_IGN_CASE 8 #define REG_PATHEXP 16 #define PAGE_DEFAULT 1 #define PAGE_BASIC 2 #define PAGE_ESCALATE 4 #define PAGE_INITDELAY 8 #define GETDIR_FILE 1 #define GETDIR_DIR 2 #define GETDIR_OTHER 4 #define GETDIR_ALL 8 #define LINEBBHOSTS_ALL 1 #define LINEBBHOSTS_IPADDR 2 #define BB_DISABLEMSG 1 #define BB_ENABLEMSG 2 #ifdef __GNUC__ /* GCC on darwin doesn't like function in function */ /* GCC on solaris does not seem to process a function within a function correctly */ #ifndef DARWIN #ifndef SOLARIS #define FUNCINFUNCOK 1 #endif #endif #endif ./bb/bb19c/install/0040755002342100007640000000000007616533074011716 5ustar bbbb./bb/bb19c/install/Makefile.darwin0100644002342100007640000000431607616533072014640 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc LIBS= # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # SOLARIS # CFLAGS=-DBZERO -O # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # FREEBSD NEEDS SPECIAL ZOMBIE HANDLING CFLAGS=-DZOMBIE -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -O all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/bbsys.aix0100644002342100007640000000126307616533072013540 0ustar bbbb#!/bin/sh # # bbsys.aix # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # # From: Darren Hederson (darren.henderson@state.me.us) # DFUSE/DFSORT confusion fixed by Patrice Allais # PING="/etc/ping" # aix PS="/bin/ps axuww" # aix Joe Moore # axuww (ww for large program paths) DF="/bin/df -Ik" # aix Jeff Krintila #MSGFILE="/var/adm/messages" # aix #MSGFILE="/var/adm/SPlogs/SPdaemon.log" # Support for SP nodes jane.bamberger@bassett.org MSGFILE="/var/adm/syslog/syslog.log" # aix Richard Warkentin DFUSE="^/dev" # aix DFSORT="4" # aix DFEXCLUDE="^/dev/cd0" # aix ./bb/bb19c/install/bbsys.bsdi0100644002342100007640000000125607616533072013702 0ustar bbbb# Well I did `bbconfig freebsd` then `cd ../src ; make` then I changed the # bbdef to have the following paths: NSLOOKUP="/usr/bin/nslookup" # SMM NEW IN 1.06C PING="/bin/ping" # CONNECTIVITY TEST LS="/bin/ls" PS="/bin/ps -ax" FIND="/usr/bin/find" TOUCH="/usr/bin/touch" CAT="/bin/cat" GREP="/bin/grep" SORT="/usr/bin/sort" UNIQ="/usr/bin/uniq" DATE="/bin/date" TAIL="/usr/bin/tail" SED="/usr/bin/sed" UPTIME="/usr/bin/uptime" WC="/usr/bin/wc -l" WHO="/usr/bin/who" RM="/bin/rm" MSGFILE="/var/log/messages" # BSD STYLE MACHINES EXPR="/bin/expr" # I think I only had to change nslookup and ping. # > > George Henson # > > george@gekko.net ./bb/bb19c/install/bbsys.debian0100644002342100007640000000053207616533072014177 0ustar bbbb#!/bin/sh # # bbsys.debian # From: Mark A. Bialik # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps ax" # the "-" is deprecated now MSGFILE="/var/log/messages" TOUCH="/usr/bin/touch" SORT="/usr/bin/sort" EGREP="/bin/egrep" PING="/bin/ping" GREP="/bin/grep" SED="/bin/sed" ./bb/bb19c/install/bbsys.dgux0100644002342100007640000000042107616533072013721 0ustar bbbb#!/bin/sh # # bbsys.dgux # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # MSGFILE="/var/adm/messages" # syslogd on DG/UX PS="/usr/bin/ps -fe" # DG/UX DF="/usr/bin/df -k" # DG/UX PINGPAR1="-s -c 1" # David Dulek ./bb/bb19c/install/bbsys.dynix0100644002342100007640000000214107616533072014106 0ustar bbbb#!/bin/sh # # bbsys.local.dynix # From Stephen Couch (scouch@fremontcomp.com) # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -ef" # dynix DF="/bin/df -k" # dynix #If you are using syslogd, change the file name to suit your site MSGFILE="/usr/adm/log/messages" # using syslogd PING="/etc/ping" # CONNECTIVITY TEST FIND="/bin/find" TOUCH="/bin/touch" GREP="/usr/bin/egrep" SORT="/bin/sort" LS="/bin/ls" CAT="/bin/cat" DATE="/bin/date" TAIL="/bin/tail" SED="/bin/sed" UPTIME="/usr/bin/ruptime" # uptime will not show loading ! # normal load levels need to be # around 600 ( CPUWARN ) or more ! WC="/bin/wc -l" WHO="/bin/who" RM="/bin/rm" MAIL="/usr/bin/mailx -s" # PING PARAMETERS # Added by Gunnar Helliesen to accomodate different # styles of ping commands. # # From Jim Whitby jim@tps.tpsdata.com # # The leading switches are -sni3 # ( no name lookup and wait 3 seconds for a reply ). PINGPAR1="-n -c 1 -i 3 -s 56 " # No trailing switches PINGPAR2="" NSLOOKUP="/usr/etc/nslookup" EXPR="/bin/expr" ./bb/bb19c/install/bbsys.freebsd0100644002342100007640000000065407616533072014374 0ustar bbbb#!/bin/sh # # bbsys.freebsd # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -axww" # FREEBSD, LINUX, SUNOS DF="/bin/df" # SUNOS, LINUX, FREEBSD MSGFILE="/var/log/messages" # BSD STYLE MACHINES NSLOOKUP="/usr/sbin/nslookup" # NEW IN 1.06c EXPR="/bin/expr" # NEW IN 1.2 LOCKPREFIX="/var/spool/lock/LCK.." # THANKS Glen TOP="/usr/bin/top" TOPARGS="-n 30" ./bb/bb19c/install/bbsys.hpux0100644002342100007640000000126307616533072013743 0ustar bbbb#!/bin/sh # # bbsys.hpux # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -ef" # SOLARIS, HPUX DF="/bin/bdf" # HPUX 10.0 MSGFILE="/var/adm/syslog/syslog.log" # SYSTEM V TYPE MACHINES PING="/etc/ping" MAIL="/usr/bin/mailx -s" LOCKPREFIX="/var/spool/locks/LCK.." # # From: Steve Bonds # PINGPAR1="" PINGPAR2="-n 1" # DFCMD must always appear after DF & SED # Thanks to Mark.Deiss@acs-gsg.com, bdf output on HP-UX may appear on 2 lines #DFCMD="$DF | $SED -e '/^[^ ][^ ]*$/{ N ; s/[ ]*\n[ ]*/ / ;}'" DFCMD="$DF | $SED -e '/^[^ ][^ ]*$/{ N s/[ ]*\n[ ]*/ / }'" TOP="/usr/bin/top" TOPARGS="-d1 -f $BBTMP/TOP" ./bb/bb19c/install/bbsys.hpux90100644002342100007640000000055007616533072014032 0ustar bbbb#!/bin/sh # # bbsys.hpux9 # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PING="/etc/ping" PS="/bin/ps -ef" FIND="/bin/find" TOUCH="/bin/touch" GREP="/bin/grep" SORT="/bin/sort" TAIL="/bin/tail" SED="/bin/sed" WC="/bin/wc -l" WHO="/bin/who" DF="/usr/bin/bdf" MAIL="/usr/bin/mailx -s" MSGFILE="/usr/adm/syslog" EXPR="/bin/expr" ./bb/bb19c/install/bbsys.irix0100644002342100007640000000120507616533072013726 0ustar bbbb#!/bin/sh # # bbsys.irix # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # # CHANGES FROM Jeff Matson # PS="/bin/ps -ef" # FREEBSD, LINUX, SUNOS DF="/bin/df -k" # SUNOS, LINUX, FREEBSD # -k added thanks to #Thomas Alex MSGFILE="/var/adm/SYSLOG" # BSD STYLE MACHINES PING="/usr/etc/ping" UPTIME="/usr/bsd/uptime" # Thanks to: Paul Duncan DFSORT=5 DFEXCLUDE="/CDROM" NSLOOKUP="/usr/sbin/nslookup" # NEW IN 1.06C EXPR="/sbin/expr" HEAD="/usr/bsd/head" MAIL="/usr/sbin/Mail -s" # Thanks to helge.jacobsen@mch.sbs.de ./bb/bb19c/install/bbsys.linux0100644002342100007640000000032107616533073014111 0ustar bbbb#!/bin/sh # # bbsys.linux # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps ax" # LINUX DF="/bin/df -k" MSGFILE="/var/log/messages" TOUCH="/bin/touch" # SPECIAL TO LINUX ./bb/bb19c/install/bbsys.netbsd0100644002342100007640000000045607616533073014242 0ustar bbbb#!/bin/sh # # bbsys.netbsd # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -axww" # FREEBSD, LINUX, SUNOS DF="/bin/df" # SUNOS, LINUX, FREEBSD MSGFILE="/var/log/messages" # BSD STYLE MACHINES NSLOOKUP="/usr/bin/nslookup" # EXPR="/bin/expr" ./bb/bb19c/install/bbsys.osf0100644002342100007640000000061307616533073013545 0ustar bbbb#!/bin/sh # # bbsys.osf # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps -ef" DF="/bin/df -k -tnonfs,procfs,ffm,fdfs,nfsv3" #DFUSE="%" # THANKS TO ericf@conetra.com DFUSE="^/dev|^[^# :/*?][^# :/*?]*#[^# ]" # Thanks to Mark.Deiss@acs-inc.com MSGFILE="/var/adm/messages" # MAIL="/usr/bin/mailx -s" EXPR="/bin/expr" [ ! -x "${AWK}" ] && AWK="/usr/ucb/awk" ./bb/bb19c/install/bbsys.redhat0100644002342100007640000000122207616533073014222 0ustar bbbb# # bbsys.redhat (Linux) # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps axww" # DF="/bin/df -k" MSGFILE="/var/log/messages" PING="/bin/ping" SED="/bin/sed" MAIL="/bin/mail -s" GREP="/bin/grep" EGREP="/bin/egrep" AWK="/bin/awk" PINGPAR1="&WOPTION -n -c1" # ADDED BY ROB. DON'T RESOLVE NAME # IF -n NOT THERE THAN NEW NETKIT (RH7) PING MAY FAIL # & WOPTION is replaced by -w3 for versions >= 7.3 # # From: Martin Richard # and others... took forever to make this change! # TOUCH="/bin/touch" # ADDED SORT="/bin/sort" # ADDED ./bb/bb19c/install/bbsys.sco0100644002342100007640000000067707616533073013554 0ustar bbbb# # bbsys.sco5 # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # From: Douwe Dijkstra (D.Dijkstra@Twinfo.nl) # PS="/bin/ps -ef" DF="/bin/df -P" MSGFILE="/var/adm/messages" # PING="/usr/bin/ping" HEAD="/bin/head" FIND="/bin/find" TOUCH="/bin/touch" GREP="/bin/grep" SORT="/bin/sort" TAIL="/bin/tail" SED="/bin/sed" WC="/bin/wc -l" WHO="/bin/who" PINGPAR1="-c 1 -s 56" EXPR="/bin/expr" MAIL="/bin/mail -s" DIG="/etc/dig" ./bb/bb19c/install/bbsys.sco30100644002342100007640000000074507616533073013633 0ustar bbbb# # bbsys.sco3 # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # From: Richard Dansereau (Dansereau.Richard@regis.uqam.ca) # PS="/bin/ps -ef" DF="/bin/df -v" DFSORT="5" DFUSE="/dev" MSGFILE="/usr/adm/messages" # PING="/usr/bin/ping" FIND="/bin/find" TOUCH="/bin/touch" GREP="/bin/grep" SORT="/bin/sort" HEAD="/bin/head" TAIL="/bin/tail" SED="/bin/sed" WC="/bin/wc -l" WHO="/bin/who" PINGPAR1="-c 1 -s 56" EXPR="/bin/expr" MAIL="/bin/mail -s" DIG="/etc/dig" ./bb/bb19c/install/Makefile.aix0100644002342100007640000000462607616533073014142 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # LIBS= # From: Darren Hederson (darren.henderson@state.me.us) # SOLARIS #LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS # -DZOMBIE - NEEDS SPECIAL ZOMBIE HANDLING # -DBZERO - MIMIC BZERO FUNCTIONS CFLAGS=-D&BBOSTYPE -DTIMEH -DREGEXEC -DGETTIMEOFDAY all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc bbstat getipaddr bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/bbsys.solaris0100644002342100007640000000120607616533073014431 0ustar bbbb#!/bin/sh # # bbsys.solaris # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps -ef" # SOLARIS, HPUX DF="/bin/df -kl" # SOLARIS, SYSTEM V DFUSE="^/dev|^swap" # Scott Walters MSGFILE="/var/adm/messages" # SYSTEM V TYPE MACHINES PING="/usr/sbin/ping" # From: Josh Wilmes PINGPAR1="-sn" PINGPAR2="56 1" # No. of bytes and # of pings. MAIL="/usr/ucb/mail -s" NSLOOKUP="/usr/sbin/nslookup" # NEW IN 1.06C EGREP=/usr/xpg4/bin/egrep AWK=/usr/xpg4/bin/awk LOCKPREFIX="/var/spool/locks/LCK.." # from: DIG="/usr/local/bin/dig" ./bb/bb19c/install/bbsys.sunos0100644002342100007640000000071307616533073014126 0ustar bbbb#!/bin/sh # # bbsys.sunos # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # # this is bbsys.local for sunos 4.1.4: # Erik Johannessen - erik@docunetworks.com PS="/bin/ps -ax" DF="/bin/df" MSGFILE="/var/adm/messages" WC="/usr/ucb/wc -l" UPTIME="/usr/ucb/uptime" TAIL="/usr/ucb/tail" TOUCH="/usr/bin/touch" PING="/usr/etc/ping" PINGPAR1="-s" PINGPAR2="56 1" MAIL="/usr/ucb/mail -s" NSLOOKUP="/usr/etc/nslookup" EXPR="/bin/expr" ./bb/bb19c/install/bbsys.ultrix0100644002342100007640000000070607616533073014310 0ustar bbbb#!/bin/sh # # bbsys.ultrix # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -ax" DF="/bin/df" MSGFILE="/var/adm/messages" PING="/usr/etc/ping" GREP="/bin/grep" TAIL="/usr/ucb/tail" SED="/bin/sed" UPTIME="/usr/ucb/uptime" WC="/usr/ucb/wc -l" PINGPAR1="-l" # -l for "long" (standard) output. PINGPAR2="56 1" # No. of bytes and no. of times to ping. EXPR="/bin/expr" ./bb/bb19c/install/bbsys.unixware0100644002342100007640000000242407616533073014622 0ustar bbbb#!/usr/bin/sh # # bbsys.local.unixware version 2.x # From Jim Whitby (jwhitby@ix.netcom.com) # New address jim@tps.tpsdata.com # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -ef" # Unixware DF="/usr/bin/df -k" # Unixware #If you are *not* using syslogd, this is the default file name # MSGFILE="/var/adm/log/osmlog # using osm #If you are using syslogd, change the file name to suit your site MSGFILE="/var/adm/log/messages" # using syslogd PING="/usr/sbin/ping" # CONNECTIVITY TEST LS="/usr/bin/ls" CAT="/usr/bin/cat" DATE="/usr/bin/date" TAIL="/usr/bin/tail" SED="/usr/bin/sed" UPTIME="/usr/bin/ruptime" # uptime will not show loading ! # normal load levels need to be # around 600 ( CPUWARN ) or more ! WC="/usr/bin/wc -l" WHO="/usr/bin/who" RM="/usr/bin/rm" # PING PARAMETERS # Added by Gunnar Helliesen to accomodate different # styles of ping commands. # # From Jim Whitby jim@tps.tpsdata.com # # The leading switches are -sni3 # ( no name lookup and wait 3 seconds for a reply ). PINGPAR1="-sni3 " # The trailing switches are 56 1 ( 56 byte packets and ping only once ). PINGPAR2=" 56 1" NSLOOKUP="/usr/sbin/nslookup" ./bb/bb19c/install/Makefile.bsdi0100644002342100007640000000455207616533073014300 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc # LIBS= #LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # CFLAGS=-DBZERO # BSDI NEEDS SPECIAL ZOMBIE HANDLING CFLAGS=-DZOMBIE -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -O all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.debian0100644002342100007640000000474607616533073014606 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER #CFLAGS=-O LIBS= # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) CFLAGS=-DSIGSETJMP -O -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -DTIMEH all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.dgux0100644002342100007640000000420607616533073014322 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) LIBS = -lnsl -lsocket # DG/UX needs this CFLAGS=-D&BBOSTYPE -DREGEXEC all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.dynix0100644002342100007640000000421707616533073014510 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc LIBS = -lgen -lnsl -lsocket # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) CFLAGS = -O -DBZERO -DTIMEH -D&BBOSTYPE -DREGEXEC all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.freebsd0100644002342100007640000000431607616533073014767 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc LIBS= # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # SOLARIS # CFLAGS=-DBZERO -O # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # FREEBSD NEEDS SPECIAL ZOMBIE HANDLING CFLAGS=-DZOMBIE -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -O all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.generic0100644002342100007640000000472007616533073014770 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) # CFLAGS=-DSIGSETJMP -O CFLAGS=-O -D&BBOSTYPE -DREGEXEC # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.hpux0100644002342100007640000000473607616533073014347 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) # CFLAGS=-DSIGSETJMP -O CFLAGS=-O -D&BBOSTYPE -DREGEXEC -DGETTIMEOFDAY # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.hpux90100644002342100007640000000471607616533073014436 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) #CFLAGS=-DSIGSETJMP -O CFLAGS=-O -D&BBOSTYPE -DREGEXEC all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.irix0100644002342100007640000000471707616533073014335 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) # CFLAGS=-DSIGSETJMP -O CFLAGS=-O -D&BBOSTYPE -DREGEXEC # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.linux0100644002342100007640000000474607616533073014523 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) CFLAGS=-DSIGSETJMP -O -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -DTIMEH all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.netbsd0100644002342100007640000000451707616533073014637 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc #LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # CFLAGS=-O # CFLAGS=-DBZERO -O # FREEBSD NEEDS SPECIAL ZOMBIE HANDLING CFLAGS=-DZOMBIE -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -O all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.osf0100644002342100007640000000466107616533073014147 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # SOLARIS # CFLAGS=-DBZERO -O # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # DEC Unix (OSF/1) NEEDS SPECIAL ZOMBIE HANDLING # DEC Unix port contributed by Gunnar Helliesen CFLAGS=-DZOMBIE -D&BBOSTYPE -DREGEXEC -O #LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.redhat0100644002342100007640000000503007616533073014616 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # Fixed confusing CFLAGS # thanks to Adam Goryachev # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # SOME OS DON'T HAVE bzero() (-DBZERO) # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) # REDHAT NEEDS -DSIGSETJMP CFLAGS=-O -D&BBOSTYPE -DGETTIMEOFDAY -DSIGSETJMP -DREGEXEC -DTIMEH all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.sco0100644002342100007640000000435707616533073014146 0ustar bbbb# From: Douwe Dijkstra (D.Dijkstra@Twinfo.nl) SHELL = /bin/sh MAKE = make CC = cc # SCO # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # SCO 5 should support regexec, -DREGEX did cause some problems. CFLAGS=-D&BBOSTYPE -DTIMEH -DREGEXEC -O LIBS = -lsocket all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.sco30100644002342100007640000000425507616533073014226 0ustar bbbb# From: Douwe Dijkstra (D.Dijkstra@Twinfo.nl) SHELL = /bin/sh MAKE = make CC = cc # SCO # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) CFLAGS=-D&BBOSTYPE -DTIMEH -DREGEX -O LIBS = -lsocket all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.solaris0100644002342100007640000000454507616533073015035 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # LIBS= # -DZOMBIE - NEEDS SPECIAL ZOMBIE HANDLING # SOLARIS CFLAGS=-DBZERO -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -O LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.sunos0100644002342100007640000000455307616533073014527 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # SOLARIS # CFLAGS=-DBZERO -O # FREEBSD NEEDS SPECIAL ZOMBIE HANDLING # CFLAGS=-DZOMBIE -O CFLAGS=-O -DSEEK_END=2 -D&BBOSTYPE -DREGEXEC # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.ultrix0100644002342100007640000000476607616533073014715 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc #LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # SOLARIS #CFLAGS=-DBZERO -O # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # FREEBSD NEEDS SPECIAL ZOMBIE HANDLING # CFLAGS=-DZOMBIE -O # ULTRIX NEEDS SPECIAL ZOMBIE AND SYSLOG HANDLING # Ultrix port contributed by Gunnar Helliesen CFLAGS=-DZOMBIE -DSYSLOG -D&BBOSTYPE -DREGEXEC -O all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.unixware0100644002342100007640000000426207616533073015217 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # Unixware 2.0 FLAGS REQUIRED FOR PORTING LIBS = -lgen -lnsl -lsocket # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) CFLAGS = -O -DBZERO -D&BBOSTYPE -DREGEXEC all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/bbclient0100755002342100007640000000516107616533073013425 0ustar bbbb#!/bin/sh # bbclient # SCRIPT TO CREATE BIG BROTHER CLIENT TARBALLS # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # THIS SCRIPT MUST BE RUN FROM HERE! # USE ONLY IF THE CLIENTS ARE RUNNING THE SAME OS!!! # # Format: bbclient # if test "$#" != "1" then echo "bbclient: Wrong number of arguments! Format: ./bbclient [client-machine-name]" exit 1 else CLIENT=$1 fi # # FIRST, SEE IF THIS MACHINE IS EITHER THE DISPLAY SERVER # THE PAGER SERVER, OR BOTH... # grep "$CLIENT" ../etc/bb-hosts > /tmp/BB.$$ if test "$?" != "0" then echo "bbclient: $CLIENT not defined in ../etc/bb-hosts!" exit 2 fi # Save the BB base directory currpwd=`pwd` cd .. OLDIFS=$IFS IFS='/' set `pwd` IFS=$OLDIFS shift `expr $# - 1` BBASE=$1 # Don't archive this host alias name if [ -f "../$BBASE/etc/bbaliasname" ] then mv ../$BBASE/etc/bbaliasname ../$BBASE/tmp fi cd $currpwd # START MAKING THE CLIENT LIST... # EVERY ONE GETS THESE... echo "*** Adding standard things..." echo "$BBASE/README $BBASE/README.INSTALL $BBASE/LICENSE* $BBASE/runbb.sh $BBASE/tmp/.helloworld $BBASE/etc $BBASE/bin $BBASE/ext $BBASE/bin/bb-local.sh $BBASE/bin/bb $BBASE/bin/bbrun" > /tmp/BBLIST grep BBDISPLAY /tmp/BB.$$ > /dev/null 2>&1 if test "$?" = "0" # WE'RE A DISPLAY SERVER then echo "*** Adding Big Brother Display things..." BBSERVER="TRUE" echo " $BBASE/www $BBASE/web" >> /tmp/BBLIST fi grep BBPAGER /tmp/BB.$$ > /dev/null 2>&1 if test "$?" = "0" then echo "*** Adding Big Brother Pager Server things..." # Add only if host is not BBDISPLAY also if test "$BBSERVER" != "TRUE" then echo " $BBASE/www $BBASE/web" >> /tmp/BBLIST BBSERVER="TRUE" fi fi grep BBNET /tmp/BB.$$ > /dev/null 2>&1 if test "$?" = "0" then echo "*** Adding Big Brother Network Monitor things..." # Nothing to add for now fi # # IF WE NEED THE BIG BROTHER DAEMON ON THIS MACHINE THEN ADD IT # if test "$BBSERVER" = "TRUE" then echo "*** Adding Big Brother Daemon..." # Nothing to add for now fi rm -f /tmp/BB.$$ # DON'T NEED THIS ANY MORE... cd ../.. echo "*** Creating tar file for Big Brother on $CLIENT" tar cvf bb-${CLIENT}.tar `cat /tmp/BBLIST` rm -f /tmp/BBLIST # Restore this host alias name if [ -f "$BBASE/tmp/bbaliasname" ] then mv $BBASE/tmp/bbaliasname $BBASE/etc fi echo "*** Done. The Big Brother Client archive has been created. It's called: bb-${CLIENT}.tar and lives in the directory above the bb directory. You can now install Big Brother on ${CLIENT} Do not forget to edit PROCS/PAGEPROC in bbdef.sh on ${CLIENT} Also modify BBHOME in runbb.sh if required" ./bb/bb19c/install/bbconfig0100755002342100007640000005725107616533073013423 0ustar bbbb#!/bin/sh # bbconfig # BIG BROTHER - AUTOMATIC CONFIG SCRIPT # Sean MacGuire # Version 1.9c # May 15th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # #-------------------------------------------------------- # FIGURE OUT WHERE WE ARE AND SET BBHOME #-------------------------------------------------------- PROG="$0"; export PROG OSARG="$1" # put all OS type to lower case # thanks for the tip to "Thomas E. Alex" OSARG=`echo "$OSARG" | tr '[A-Z]' '[a-z]' ` ARGNUM="$#" NAME=`basename $0`; export NAME DIR=`echo $PROG | sed "s/${NAME}$//"` cd $DIR # GET TO THE INSTALL DIRECTORY cd .. # GO UP TO BBHOME BBHOME=`pwd` # SET IT THE EASY WAY cd $DIR # GO BACK WHERE WE WERE... #-------------------------------------------------------- # WHAT VERSION OF echo? #-------------------------------------------------------- # Find out which version of echo we have # So we use the proper directive to not print out the newline character # There are differences in echo on a SYSV system and a *BSD based system testline=`echo -n bobo` # echo "TESTLINE=$testline" if [ "$testline" = "bobo" ] then ECHOOPTION=" -n " ECHOTAIL="" else ECHOOPTION="" ECHOTAIL='\c' fi tput clear isroot=FALSE idline=`id 2>/dev/null` if [ "$idline" != "" ] then set $idline 2>/dev/null idline=`echo $1 | sed 's/=/ /' | sed 's/(/ /' | sed 's/)/ /'` set $idline 2>/dev/null BBUID=$3 if [ "$2" -eq 1 -o "$BBUID" = "root" ] then isroot=TRUE fi fi if [ "$isroot" != "TRUE" ] then echo "" echo "You are installing Big Brother logged in as $BBUID" echo "If you are installing a BBDISPLAY host, you should be installing" echo " Big Brother logged in as root" echo $ECHOOPTION "Press any key to continue... $ECHOTAIL" read ANS fi tput clear if test ! -f $BBHOME/tmp/.license then more $BBHOME/LICENSE echo echo $ECHOOPTION "Do you agree to the terms of this license (y/n): $ECHOTAIL" read ANS ANS=`echo "$ANS" | tr '[A-Z]' '[a-z]'` if [ "$ANS" != "y" ] then echo echo "Exiting..." exit 1 else echo echo "Thank you, installation continuing..." sleep 2 tput clear echo > $BBHOME/tmp/.license fi fi #-------------------------------------------------------- # WE REALLY SHOULD TRY TO FIGURE WHAT MACHINE WE'RE ON. #-------------------------------------------------------- set `uname -a` VERSION="$3" if [ "$OSARG" = "" ] then MACHINE="$1" # THIS IS WHAT THE MACHINE THINKS IT IS MACHINE=`echo "$MACHINE" | tr '[A-Z]' '[a-z]' ` # echo MACHINE IS $MACHINE else MACHINE=$OSARG fi WOPTION="" case $MACHINE in linux ) # ARE WE A REDHAT MACHINE? grep "Red" /etc/issue >/dev/null if test "$?" = "0" then MACHINE="redhat" # bbconfig expects "Red Hat Linux release 7.3 (Valhalla)" # and got at least "Red" in /etc/issue # now, go get the version. set bogus `grep "Red" /etc/issue` 2>/dev/null shift # remove bogus fi grep "SuSE[ ]" /etc/issue >/dev/null if test "$?" = "0" then MACHINE="suse" # bbconfig expects "Welcome to SuSE Linux 7.3 (i386) - Kernel ..." # and got at least "SuSE" in /etc/issue # now, go get the version. set bogus `grep "SuSE[ ]" /etc/issue` 2>/dev/null shift # remove bogus fi # If MACHINE is either RedHat or SuSE then determine which # version it is. PING may need a special directive # SuSE - 7.0 and up need -w3 in PINGPAR1 # RH - 7.3 and up need -w3 in PINGPAR1 if [ "$MACHINE" = "redhat" -o "$MACHINE" = "suse" ] then # We're expecting the version at the 5th argument, # so make sure there's that many arguments if test "$#" -ge "5" then # Remove first 4 arguments shift;shift;shift;shift OLDIFS=$IFS IFS='.' set bogus $1 # Split 7.3 argument IFS=$OLDIFS shift # Test if it's a digit/number expr "$1" + 0 >/dev/null 2>&1 retc1=$? expr "$2" + 0 >/dev/null 2>&1 retc2=$? if [ $retc1 -eq 0 -a $retc2 -eq 0 ] then # It is VERSION=$1 SUBVERSION=$2 if [ "$MACHINE" = "suse" -a "$VERSION" -ge 7 ] then WOPTION="-w3" elif [ "$MACHINE" = "redhat" -a "$VERSION" -eq 7 -a "$SUBVERSION" -ge 3 ] then WOPTION="-w3" elif [ "$MACHINE" = "redhat" -a "$VERSION" -ge 8 ] then WOPTION="-w3" fi else VERSION=-1 SUBVERSION=-1 fi fi fi grep "Caldera" /etc/issue > /dev/null if test "$?" = "0" then MACHINE="caldera" fi echo "$3" | grep "mdk" 2>&1 >/dev/null if [ "$?" -eq 0 ] then MACHINE="mandrake" fi ;; sunos ) #echo "VERSION=$VERSION" # Real SunOS are 4.X and less, Solaris are 5.X and up # Thanks to Bill Earle VERSION=`echo $VERSION | sed "s/\./ /g"` set bogus $VERSION 2>/dev/null shift if test "$1" -ge "5" then MACHINE="solaris" fi ;; hp-ux ) MACHINE="hpux" ;; bsdi ) OLDIFS=$IFS IFS='.' set $3 >/dev/null 2>&1 IFS=$OLDIFS if [ "$#" -gt 1 -a "$1" -ge 4 ] then if [ "$1" -gt 4 -o "$2" -ge 1 ] then MACHINE="bsdi4" fi fi ;; irix* ) MACHINE=irix ;; unixware* ) VERSION=`echo $4 | sed "s/\./ /g"` set bogus $VERSION shift if test "$1" -ge "7" then MACHINE="unixware7" fi ;; esac OS="bsdi bsdi4 sco3 sco freebsd solaris hpux9 hpux linux sunos netbsd osf ultrix irix unixware unixware7 redhat aix dynix debian dgux openbsd caldera mandrake sinix suse darwin" #-------------------------------------------------------- # SET UP BBHOME #-------------------------------------------------------- if test "$ARGNUM" != "1" then echo " Welcome to the Big Brother installation procedure... The first thing we need to know is that OS you're running... Choose one of the following: $OS " echo $ECHOOPTION "Please enter your OS: [$MACHINE]: $ECHOTAIL" read ANS if test "$ANS" != "" then MACHINE="$ANS" fi fi echo $OS | grep "$MACHINE" > /dev/null 2>&1 if test "$?" = "1" then echo "---> $MACHINE unsupported... configure manually" echo "---> ./bbconfig [OS]" echo "---> where OS is one of: $OS" exit 2 else echo "---> OK, we'll try $MACHINE..." fi case ${MACHINE} in solaris ) # Force the use of /usr/xpg4/bin if it's available if [ ! -d /usr/xpg4/bin ] then echo "** It is stronly suggested that you get the xpg4 package ** ** and install it on this server and rerun this script ** ** before continuing any further **" fi ;; esac #-------------------------------------------------------- # WARN ABOUT RUNNING BB AS root #-------------------------------------------------------- STOPROOT="" while [ "$STOPROOT" = "" ] do STOPROOT="y" echo " *** WARNING: Don't run BB as root ! *** Executing BB as root is not recommended " echo $ECHOOPTION "Prevent the execution of BB as user 'root' (y/n) [$STOPROOT]: $ECHOTAIL" read ANS ANS=`echo "$ANS" | tr '[A-Z]' '[a-z]'` if [ "$ANS" != "" ] then STOPROOT="$ANS" fi if [ "$STOPROOT" = "y" ] then echo "---> OK... BB is NOT ALLOWED to run as root" STOPROOT=TRUE elif [ "$STOPROOT" = "n" ] then echo "---> OK... BB is ALLOWED to run as root" STOPROOT=FALSE else ANS="" STOPROOT="" fi done BBUSER="" while [ "$BBUSER" = "" ] do echo " BB will only start under a designated user id. The startup script will verify that the current user ID and the designated user ID are identical. Note: This check is only performed during the startup script. It does not prevent the execution of other BB binaries/scripts while working using another user ID. It only prevents you from starting BB while working another user ID. " BBUSER="bb" echo $ECHOOPTION "What will be the user ID of BB [$BBUSER]: $ECHOTAIL" read ANS ANS=`echo "$ANS"` if [ "$ANS" != "" ] then BBUSER="$ANS" fi if [ "$BBUSER" = "root" -a "$STOPROOT" = "TRUE" ] then echo "---> User root has been previously disallowed" BBUSER="" continue fi # Hummmmm, id should be fine for everything id $BBUSER >/dev/null 2>&1 if [ "$?" -eq 0 ] then echo "---> BB will only run from user '$BBUSER'" else echo "---> User '$BBUSER' has not yet been created" echo "---> Don't forget to create the user '$BBUSER'" fi done #-------------------------------------------------------- # SET UP BBHOME #-------------------------------------------------------- echo " Making sure BBHOME <$BBHOME> is writable... " if [ ! -w "$BBHOME" ] then echo "<$BBHOME> is not a writable directory" echo "Please become root or change permissions". echo "Exiting." exit 1 ANS="" fi echo "---> OK, $BBHOME is fine..." #----------------------------------------------------- # SET UP OLD-STYLE DIRECTORY STRUCTURE #----------------------------------------------------- OLDSTYLE="" while [ "$OLDSTYLE" = "" ] do echo " Do you want to preserve the old style directory structure ? You may want to do so if you use BB extensions or externals that do not understand the new directory structure. This option is *NOT* recommend as keeping the old directory around represents a security risk. " ANS="" echo $ECHOOPTION "Old-style directory structure (y/n): [n] $ECHOTAIL" read ANS if [ "$ANS" = "" ] then OLDSTYLE="n" else if [ "$ANS" != 'y' -a "$ANS" != 'Y' -a "$ANS" != 'n' -a "$ANS" != 'N' ] then OLDSTYLE="" else OLDSTYLE="$ANS" fi fi done # Get the top directory in the BB structure OLDIFS=$IFS IFS="/" set $BBHOME IFS=$OLDIFS BBTOP="" while [ "$#" -gt 1 ] do # Don't accept empty args if [ "$1" != "" ] then BBTOP="$BBTOP/$1" fi shift done BBVAR=$BBTOP/bbvar if [ "$OLDSTYLE" = "y" -o "$OLDSTYLE" = "Y" ] then ln -s $BBVAR/acks $BBHOME/www/acks ln -s $BBVAR/data $BBHOME/www/data ln -s $BBVAR/disabled $BBHOME/disabled ln -s $BBVAR/hist $BBHOME/www/hist ln -s $BBVAR/histlogs $BBHOME/www/histlogs ln -s $BBVAR/logs $BBHOME/www/logs fi #-------------------------------------------------------- # SET UP FQDN #-------------------------------------------------------- FQDN="y" BBFQDN="FALSE" while [ "$BBFQDN" != "TRUE" -a "$BBFQDN" != "" ] do echo " When you set up your machines, you should use Fully Qualified Domain names, this means you use the whole name, like www.bb4.com, instead of just 'www'. This is recommended. " echo $ECHOOPTION "Use FQDN (y/n): [$FQDN] $ECHOTAIL" read ANS if [ "$ANS" = "" ] then BBFQDN="TRUE" echo "---> Good, we'll use FQDN" else if [ "$ANS" = 'y' -o "$ANS" = 'Y' ] then BBFQDN="TRUE" echo "---> Good, we'll use FQDN" else BBFQDN="" echo "---> OK... if you must..." fi fi done #-------------------------------------------------------- # SET UP BBDISPLAY #-------------------------------------------------------- THISHOST=`hostname 2>/dev/null` BBDISPLAY="" while [ "$BBDISPLAY" = "" ] do BBDISPLAY="$THISHOST" echo " Big Brother creates HTML pages with the status of your network. You'll need a web server to publish this information. " echo $ECHOOPTION "What machine will be the BBDISPLAY [$BBDISPLAY]: $ECHOTAIL" read ANS if [ "$ANS" = "" ] then echo "---> OK... $BBDISPLAY will be a BBDISPLAY" else BBDISPLAY=$ANS echo "---> OK... $BBDISPLAY will be a BBDISPLAY" fi BBDISPLAY=`echo "$BBDISPLAY" | tr '[A-Z]' '[a-z]'` done if [ "$BBFQDN" = "TRUE" ] then OLDIFS=$IFS IFS="." set $BBDISPLAY IFS=$OLDIFS if [ "$#" -eq 1 ] then echo " ---> !!! FQDN=y while the BBDISPLAY ($BBDISPLAY) is not! " fi fi #-------------------------------------------------------- # SET UP BBPAGER #-------------------------------------------------------- BBPAGER="" while [ "$BBPAGER" = "" ] do BBPAGER=$BBDISPLAY echo " Big Brother sends important messages to a pager server. This machine will at a minimum to be able to send mail. " echo $ECHOOPTION "What machine will be the BBPAGER [$BBPAGER]: $ECHOTAIL" read ANS if [ "$ANS" = "" ] then echo "---> OK... $BBPAGER will be a BBPAGER" else BBPAGER=$ANS echo "---> OK... $BBPAGER will be a BBPAGER" fi BBPAGER=`echo "$BBPAGER" | tr '[A-Z]' '[a-z]'` done if [ "$BBFQDN" = "TRUE" ] then OLDIFS=$IFS IFS="." set $BBPAGER IFS=$OLDIFS if [ "$#" -eq 1 ] then echo " ---> !!! FQDN=y while the BBPAGER ($BBPAGER) is not! " fi fi echo " Some questions regarding the current host ($THISHOST) will be asked. " DOWEB="y" while [ "$DOWEB" != "TRUE" -a "$DOWEB" != "FALSE" ] do echo $ECHOOPTION " Is this host a BBDISPLAY host (y/n): [$DOWEB] $ECHOTAIL" read ANS if [ "$ANS" = "" ] then ANS=$DOWEB fi if [ "$ANS" = 'y' -o "$ANS" = 'Y' ] then DOWEB=TRUE elif [ "$ANS" = 'n' -o "$ANS" = 'N' ] then DOWEB=FALSE fi done DOPAGE="y" while [ "$DOPAGE" != "TRUE" -a "$DOPAGE" != "FALSE" ] do echo $ECHOOPTION " Is this host a BBPAGER host (y/n): [$DOPAGE] $ECHOTAIL" read ANS if [ "$ANS" = "" ] then ANS=$DOPAGE fi if [ "$ANS" = 'y' -o "$ANS" = 'Y' ] then DOPAGE=TRUE elif [ "$ANS" = 'n' -o "$ANS" = 'N' ] then DOPAGE=FALSE fi done DEFAULTPAGE="" if [ "$DOPAGE" = "TRUE" ] then while [ "$DEFAULTPAGE" = "" ] do DEFAULTPAGE="root@localhost" echo $ECHOOPTION " Enter the default recipient: [$DEFAULTPAGE] $ECHOTAIL" read ANS if [ "$ANS" != "" ] then DEFAULTPAGE=$ANS fi done fi #-------------------------------------------------------- # SET URL OF BB #-------------------------------------------------------- BBWEB="" if [ "$DOWEB" = "TRUE" ] then while [ "$BBWEB" = "" ] do echo " Since Big Brother produces results to be displayed on web pages, we need to know where to view these results. " echo $ECHOOPTION "Enter the base URL for BB [/bb]: $ECHOTAIL" read ANS if test "$ANS" != "" then BBWEB="$ANS" else BBWEB="/bb" fi if [ "$BBWEB" = "/" ] then rc=1 else echo "$BBWEB" | grep ".*/$" >/dev/null 2>&1 rc=$? fi if [ "$rc" -eq 0 ] then echo " The base URL <$BBWEB> is invalid, it should not end with a '/' " BBWEB="" else BBWEB=`echo $BBWEB | sed 's/[ ]//g'` case "$BBWEB" in /* ) BBWEBHOST="http://$BBDISPLAY" ;; # It's clean http* ) BBWEBURL="$BBWEB" case $BBWEB in http://* ) BBWEB=`echo "$BBWEBURL" | sed 's!^http://[^/]*/!/!g'` BBWEBHOST=`echo "$BBWEBURL" | sed "s!$BBWEB!!g"` ;; https://* ) BBWEB=`echo "$BBWEBURL" | sed 's!^https://[^/]*/!/!g'` BBWEBHOST=`echo "$BBWEBURL" | sed "s!$BBWEB!!g"` ;; * ) echo " The base URL <$BBWEB> is invalid, it should begin with a '/',http:// or https:// " BBWEB="" continue ;; esac ;; * ) echo " The base URL <$BBWEB> is invalid, it should begin with a '/',http:// or https:// " BBWEB="" continue ;; esac echo "---> OK... Big Brother will live under ${BBWEBHOST}${BBWEB}" fi done #-------------------------------------------------------- # SET LOCATION OF CGI DIRECTORIES #-------------------------------------------------------- CGIBIN="" while [ "$CGIBIN" = "" ] do echo " Big Brother also uses CGI scripts to create dynamic output. What directory do these scripts live in? " echo $ECHOOPTION "Enter CGI directory [/home/www/httpd/cgi-bin]: $ECHOTAIL" read ANS if test "$ANS" != "" then CGIBIN="$ANS" else CGIBIN="/home/www/httpd/cgi-bin" fi if [ ! -d "$CGIBIN" ] then echo "***---> $CGIBIN doesn't exist..." CGIBIN="" elif [ ! -w "$CGIBIN" ] then echo "***---> $CGIBIN isn't writable..." CGIBIN="" else WEB="OK" echo "---> OK... CGI scripts will live at $CGIBIN" fi done #-------------------------------------------------------- # SET CGI SCRIPTS URL LOCATION #-------------------------------------------------------- CGIBINURL="" while [ "$CGIBINURL" = "" ] do CGIBINURL="/cgi-bin" echo $ECHOOPTION "Enter the base URL of the CGI scripts [$CGIBINURL]: $ECHOTAIL" read ANS if test "$ANS" != "" then CGIBINURL="$ANS" fi echo "---> OK... The base URL location of CGI scripts is in $CGIBINURL" done fi # "$DOWEB" = TRUE cd $BBHOME #-------------------------------------------------------- # NOW COPY STUFF ACROSS #-------------------------------------------------------- echo " -------------------------------------------------------- " echo "--> UPDATING Makefile" cp install/Makefile.${MACHINE} src/Makefile # Insert OS specific -D option # Not yet implemented BBOSTYPE=`echo $MACHINE | tr '[a-z]' '[A-Z]'` cat src/Makefile | sed "s/&BBOSTYPE/$BBOSTYPE/g" > tmp/Makefile.$$ mv tmp/Makefile.$$ src/Makefile echo "--> UPDATING runbb.sh" cat runbb.sh.DIST | sed "s:&BBHOME:$BBHOME:g" > runbb.sh chmod 755 runbb.sh echo "--> UPDATING bbsys.local" cp install/bbsys.${MACHINE} etc/bbsys.local if [ "$MACHINE" = "suse" -o "$MACHINE" = "redhat" ] then echo "--> UPDATING bbsys.local for RedHat/SuSE requiring -w3 option in PINGPAR1" cat etc/bbsys.local | sed "s/&WOPTION/${WOPTION}/" > tmp/bbsys.local.suse mv tmp/bbsys.local.suse etc/bbsys.local fi echo "--> CHECKING COMMAND PATHNAMES" $BBHOME/etc/bbchkcmds.sh echo "--> UPDATING bbdef.sh" # Insert OS specific in an env variable cat etc/bbdef.sh.DIST | sed "s/&BBOSTYPE/$MACHINE/g" > tmp/bbdef.sh # Insert FQDN specific into bbdef.sh cat tmp/bbdef.sh | sed "s/&BBFQDN/$BBFQDN/g" > tmp/bbdef.sh.$$ # Insert if BB is prevented to run a root cat tmp/bbdef.sh.$$ | sed "s/&STOPROOT/$STOPROOT/g" > tmp/bbdef.sh # Insert BB's user ID into bbdef.sh cat tmp/bbdef.sh | sed "s/&BBUSER/$BBUSER/g" > tmp/bbdef.sh.$$ mv tmp/bbdef.sh.$$ etc/bbdef.sh rm -f tmp/bbdef.sh tmp/bbdef.sh.$$ # Insert BBHOME into bbmv & bbrm scripts cat bin/bbrm.DIST | sed "s!&&BBHOME!$BBHOME!g" > bin/bbrm cat bin/bbmv.DIST | sed "s!&&BBHOME!$BBHOME!g" > bin/bbmv cat bin/bbprune.DIST | sed "s!&&BBHOME!$BBHOME!g" > bin/bbprune chmod 755 bin/bbrm bin/bbmv bin/bbprune # Check the availability of certain include files # Namely, stdlib.c, string.h and unistd.h cp src/bb.h.DIST src/bb.h for file in stdlib.h string.h unistd.h do if [ ! -f /usr/include/${file} ] then direc="#undef" else direc="#define" fi FILE=`echo ${file} | tr "[a-z]/." "[A-Z]__" 2>/dev/null` cat src/bb.h | sed "s/&_HAVE_${FILE}_/${direc} _HAVE_${FILE}_/g" > tmp/bb.h mv tmp/bb.h src/bb.h done if [ "$DOWEB" = "TRUE" ] then # Insert WEB specific into bbdef.sh echo "--> UPDATING URL location" # OOps must do BBWEBHOST before BBWEB # Thanks to helge.jacobsen@mch.sbs.de # FULL URL of BBDISPLAY cat etc/bbdef.sh | sed "s!&BBWEBHOST!$BBWEBHOST!g" > tmp/bbdef.sh.$$ # Base URL location cat tmp/bbdef.sh.$$ | sed "s!&BBWEB!$BBWEB!g" > tmp/bbdef.sh # Base URL location of CGI scripts cat tmp/bbdef.sh | sed "s!&CGIBINURL!$CGIBINURL!g" > tmp/bbdef.sh.$$ mv tmp/bbdef.sh.$$ etc/bbdef.sh rm -f tmp/bbdef.sh cat www/help/bb-ack.html.DIST | sed "s!&CGIBINURL!$CGIBINURL!g" > tmp/bb-ack.html.$$ mv tmp/bb-ack.html.$$ www/help/bb-ack.html cat www/help/bb-rep.html.DIST | sed "s!&CGIBINURL!$CGIBINURL!g" > tmp/bb-rep.html.$$ mv tmp/bb-rep.html.$$ www/help/bb-rep.html fi if test "$DOWEB" = "TRUE" then echo "--> INSTALLING CGI scripts" # setup BB's CGI scripts for script in bb-hist.sh bb-histlog.sh bb-ack.sh bb-hostsvc.sh bb-rep.sh bb-replog.sh do # Does the script already exists ? RC="Y" if [ -f "$CGIBIN/${script}" ] then RC="" while [ "$RC" != "Y" -a "$RC" != "N" ] do echo $ECHOOPTION "Overwrite the current version of $CGIBIN/${script} (y/n)?: $ECHOTAIL" read RC RC=`echo "$RC" | tr '[a-z]' '[A-Z]'` done fi if [ "$RC" = "Y" ] then if [ ! -f "$CGIBIN/${script}" -o -w "$CGIBIN/${script}" ] then cat web/${script}.DIST | sed "s!&&BBHOME!$BBHOME!1" > tmp/${script}.$$ mv tmp/${script}.$$ $CGIBIN/${script} chmod 755 $CGIBIN/${script} else echo "Can't create <$CGIBIN/${script}>: permission denied" echo " Either fix the permissions and rerun this script" echo " or create it manually (update BBHOME/BBWEB in the script)" fi fi done WEBUSER="" while [ "$WEBUSER" = "" ] do echo " BB needs to set the group name of the www/rep directory to the group name of the web server by using its user name " echo $ECHOOPTION "Enter web server user id [nobody]: $ECHOTAIL" read ANS if test "$ANS" != "" then WEBUSER="$ANS" else WEBUSER=nobody fi # Validate web server ID touch $BBHOME/tmp/bbconfig.$$ chown $WEBUSER $BBHOME/tmp/bbconfig.$$ if [ "$?" -ne 0 ] then echo "Invalid user id: $WEBUSER" WEBUSER="" else userline=`id $WEBUSER 2>/dev/null` if [ "$userline" = "" ] then # If "id" fails then try thru /etc/passwd userline=`grep "^$WEBUSER:" /etc/passwd 2>/dev/null` if [ "$userline" = "" ] then echo "Invalid user id: $WEBUSER" WEBUSER="" else OLDIFS=$IFS IFS=':' set -f set $userline 2>/dev/null set +f IFS=$OLDIFS groupid=$4 groupline=`grep ":$4:" /etc/group 2>/dev/null` if [ "$groupline" != "" ] then OLDIFS=$IFS IFS=':' set -f set $groupline 2>/dev/null set +f IFS=$OLDIFS TMPWEBGROUP=$1 else echo "Group name for $WEBUSER could not be determined, using nobody" echo " You will manually have to change the group name of the www/rep directory " TMPWEBGROUP=nobody fi fi else set $userline 2>/dev/null shift idline=`echo $1 | sed 's/=/ /' | sed 's/(/ /' | sed 's/)/ /'` set $idline 2>/dev/null TMPWEBGROUP=$3 if [ "$TMPWEBGROUP" = "" ] then echo "Group name for $WEBUSER could not be determined, using nobody" echo " You will manually have to change the group name of the www/rep directory " TMPWEBGROUP=nobody fi fi fi rm $BBHOME/tmp/bbconfig.$$ done WEBGROUP="" while [ "$WEBGROUP" = "" ] do echo " You may override the group name determined by the previous step. " echo $ECHOOPTION "Enter group name [$TMPWEBGROUP]: $ECHOTAIL" read ANS if test "$ANS" != "" then WEBGROUP="$ANS" else WEBGROUP="$TMPWEBGROUP" fi touch $BBHOME/tmp/bbconfig.$$ chgrp $WEBGROUP $BBHOME/tmp/bbconfig.$$ if [ "$?" -ne 0 ] then groupline=`grep "^$WEBGROUP:" /etc/group` if [ "$?" -ne 0 ] then echo "Invalid group name: $WEBGROUP" WEBGROUP="" fi fi rm $BBHOME/tmp/bbconfig.$$ done # Reset permissions of www/rep directory where availability reports are saved echo " --> SETTING WRITE PERMISSION FOR OWNER AND GROUP FOR www/rep" chmod 775 www/rep echo "--> CHANGING THE GROUP ID OF www/rep" chgrp $WEBGROUP www/rep if [ "$?" -ne 0 ] then echo " The group name of the www/rep directory could not be changed to the group name ($WEBGROUP) of the web server. Please set manually or otherwise the availability reporting will fail. " fi fi if [ "$DOPAGE" = "TRUE" ] then echo "--> UPDATING pager scripts" case ${MACHINE} in solaris ) # Force the use of /usr/xpg4/bin if it's available if [ -d /usr/xpg4/bin ] then cat etc/bbchkwarnrules.sh.DIST | sed 's/\/bin\/sh/\/usr\/xpg4\/bin\/sh/1' > tmp/bbchkwarnrules.sh.$$ mv tmp/bbchkwarnrules.sh.$$ etc/bbchkwarnrules.sh else echo " *** It is stronly suggested that you get the xpg4 package *** and install it on this server and rerun this script *** before continuing any further " fi ;; *) cp etc/bbchkwarnrules.sh.DIST etc/bbchkwarnrules.sh ;; esac chmod 755 etc/bbchkwarnrules.sh # Insert the default recipient cat etc/bbwarnrules.cfg.DIST | sed "s/&DEFAULTPAGE/$DEFAULTPAGE/g" > etc/bbwarnrules.cfg fi echo " -------------------------------------------------------- " echo "--> Done. Now do" echo " cd ../src" echo " make" echo " make install" echo " cd ../.." echo " chown -R $BBUSER bbvar bb" echo " where bb is the new version's directory name" echo " su - $BBUSER" echo " to continue installation using that user ID" if [ "$MACHINE" = "redhat" ] then echo "" echo "Note to RedHat 6.1 users, ping is broken, please use ping from" echo "http://bb4.com/netkit-base-0.10-29.i386.rpm.gz" fi exit 0 ./bb/bb19c/install/bbsys.openbsd0100644002342100007640000000063507616533073014414 0ustar bbbb#!/bin/sh # # bbsys.freebsd # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -axww" # FREEBSD, LINUX, SUNOS DF="/bin/df" # SUNOS, LINUX, FREEBSD MSGFILE="/var/log/messages" # BSD STYLE MACHINES NSLOOKUP="/usr/sbin/nslookup" # NEW IN 1.06c EXPR="/bin/expr" # NEW IN 1.2 LOCKPREFIX="/var/spool/lock/LCK.." # THANKS Glen DIG="/usr/sbin/dig" ./bb/bb19c/install/Makefile.openbsd0100644002342100007640000000457007616533073015011 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc #LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS # LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # SOLARIS # CFLAGS=-DBZERO -O # FREEBSD NEEDS SPECIAL ZOMBIE HANDLING CFLAGS=-DZOMBIE -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -O all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h {CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/README0100644002342100007640000001037307616533073012576 0ustar bbbb---------------------------------------------------- Configuration information for Big Brother's Scripts ---------------------------------------------------- 0. Start by reading the README in the root directory of BB 1. Decide where your Big Brother Servers will be. You'll need a machine running a Web server to display the results of the Big Brother test. This machine is internally known to Big Brother as BBDISPLAY. If you have a modem and kermit available somewhere on your network then Big Brother can act as a pager server. This machine is internally known to Big Brother as BBPAGER. This can be the same machine as BBDISPLAY. 2. Configuring for your OS type In install/ use the bbconfig to copy the appropriate OS specific files. 3. Configure the bb-hosts file. The bb-hosts file controls where Big Brother looks for things and the actions that are taken. The format is identical to the standard /etc/hosts file, except with additional directives for Big Brother. Lines are of the format: # IP-ADDR: XXX.XXX.XXX.XXX HOSTNAME: host.domain.com if FQDN="TRUE" host if FQDN="" Directives the Big Brother knows about are: BBDISPLAY Machine with Web Server to display results BBPAGER Machine to act as the pager server BBNET Indicates the host that checks the ip network services http:// Test http connections for this server & path https:// Test https connections for this server & path https test requires lynx Note that you can specify multiple URLs by joining the URLs with '|': http://www_path|http://www_path1 or by specifying them individually: http://www_path http://www_path1 ftp Test machine for ftp server smtp Test machine for smtp server pop3 Test machine for pop3 server telnet ssh nntp Check /etc/services for proper service name especially pop3 (sometimes referred as pop-3) (!ftp checks that ftp is NOT running) dns noping Don't do ping test for this host dialup If host is down then display clear button imap This is a sample bb-hosts file: # # BIG BROTHER HOSTS FILE # 192.168.110.102 bobo # BBDISPLAY BBPAGER ftp smtp pop3 192.168.110.95 admin # http://admin/ 192.168.110.108 mynet # BBNET bobo is the display/pager server. mynet is the host that runs the bin/bb-network.sh (ip network services) it will check the ftp/smtp/pop3 services on bobo, then the http service on admin It is best to have the master bb-hosts file identical on all hosts. 4. Configure the bbdef.sh file bbdef.sh is where you configure how Big Brother reacts to a variety of situations that may arise. You can establish levels for warnings, panics, and whether or not Big Brother attempts to page the administrator. Configure the bbinc.sh file Set the FQDN flag to true if you are using fully qualified domain names. You shouldn't have to configure the bbsys.sh file. The local OS discrepencies should have been taken care of in the bbsys.os file which is copied to bbsys.local during the initial setup. If you do need to change a value do so in the bbsys.local and notify bbconfig@bb4.com of your change as it may be needed for other similar installs. We try to keep up with most particularities of each OS but sometimes some settings go through the cracks. 6. Configure the notification feature (BBWARN) edit bbwarnsetup.cfg & bbwarnrules.cfg These configs file have the information required to how to set them up. 7. Copy over to client programs In install/ use the bbclient script to create a tarball of BB. Use bbclient for same OS/HW platforms. You must reconfigure and recompile BB for each OS/HW platform. 8. Read the different documentation files: http://yourwebserver/bb/help/bb-help.html $BBHOME/README $BBHOME/LICENSE $BBHOME/README.INSTALL $BBHOME/README.CHANGES $BBHOME/install/README (this file but you're reading it ;-)) $BBHOME/install/README.SMS $BBHOME/install/STRUCTURE $BBHOME/etc/security.DIST $BBHOME/etc/bb-dftab.DIST $BBHOME/etc/bb-proctab.DIST $BBHOME/etc/bb-cputab.DIST $BBHOME/etc/bb-msgstab.DIST $BBHOME/etc/bb-bbexttab.DIST $BBHOME/src/README $BBHOME/www/help/bb-help.html (Best place for info) ./bb/bb19c/install/README.SMS0100644002342100007640000000571007616533073013236 0ustar bbbb SMS README ---------- Last updated: 1997-01-11 by jaclu@ibk.se 1.0 Introduction ---------------- This file describes the usage of a kermit script that sends SMS messages. I use it as a mail -> SMS gateway, and also from the "Big Brother" network monitor. If you get this with the BB packet, the kermit script can be found in BBHOME/etc/sms.scr 2.0 Disclaimer -------------- My operator uses NOKIA server software, hopefully you can use this also on Motorola servers, without to much hazzle. 3.0 Terms --------- SMS Short Message Service SMSC Short Message Service Center CIMD Computer Interface to Message Distribution 4.0 Syntax ---------- kermit sms.scr device file number [number [number [...]]] device is modem device like /dev/cua0 file should contain the message, only first line of file will be sent, and it MUST be terminated with LF, otherwise the kermit script won't be able to extract the message. SMS messages can only be 160 chars, and since nobody would wan't a lengthly message on a 8 character display, I haven't botherd to handle message splitting. If message is to long, it is truncated. One ore more SMS phonenumbers can be specified, the message will be sent to each one of them. 5.0 Configuration --------------- I have done this the easy way, that is I start CIMD with faked checksums, if anybody manages to generate correct checksums, please mail me. 5.1 Log in to SMSC ------------------ You have to set two variables in sms.scr: \%b phonenumber to you operators SMSC \%c login to access CIMD For Europolitan (Swedish operator) you can use: \%b 46708222902 \%c cimd3 # (use faked checksums) This starts the CIMD server, and from now we must ACK all responses. Don't forget to include your modem prefix to \%b!! I don't use the "prefix" token from BB, since I also use this script as a mail->SMS gateway. If you are going to use this, you must anyhow configure this script, so I hope you don't mind. 5.2 Start a CIMD session ------------------------ The first step in a CIMD session is to identify yourself You have to set two variables in sms.scr: \%d CIMD account \%e CIMD password Unfourtunately, I cant give you theese values ;) Now you have configured your script and can start to use it! 5.3 Send to all recipients -------------------------- BB calls the script one time for each recipient, that's a bit of a waste, but it would just be to much work to get around. If you call it manually or from sendmail, you can use multiple recipients. 6.0 More info ------------- The (english) spec of NOKIAS CIMD implementation can be found on: http://www.europolitan.se/europolitan/fick/tjanst/cimdspec.htm If you happen to know swedish, you can read more on Europolitans implementation on: http://www.europolitan.se/europolitan/fick/tjanst/faqcimd.htm 7.0 Feedback ------------ Please let me know if you use this with a non NOKIA server, or if you fix real checksums! Jacob Lundqvist (SMS:+46-708-555 456) ./bb/bb19c/install/bbsys.caldera0100644002342100007640000000051607616533073014353 0ustar bbbb#!/bin/sh # # bbsys.caldera # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps ax" # LINUX DF="/bin/df -k" MSGFILE="/var/log/messages" # Caldera stuff lives in here. MAIL="/bin/mail -s"; export MAIL PING="/bin/ping "; export PING TOUCH="/usr/bin/touch "; export TOUCH SED="/bin/sed "; export SED ./bb/bb19c/install/Makefile.caldera0100644002342100007640000000474607616533073014757 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) CFLAGS=-DSIGSETJMP -O -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -DTIMEH # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/Makefile.sinix0100644002342100007640000000460707616533073014512 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc LIBS = -lnsl -lsocket -s # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # CFLAGS=-DBZERO -O # FREEBSD NEEDS SPECIAL ZOMBIE HANDLING # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DGETTIMEOFDAY IF YOUR OS SUPPORTS gettimeofday() # CFLAGS=-DBZERO -DSIGSETJMP -DZOMBIE -D&BBOSTYPE -DREGEXEC -O LDFLAGS=-s all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/.helloworld0100644002342100007640000000000007616533073014054 0ustar bbbb./bb/bb19c/install/Makefile.bsdi40100644002342100007640000000455207616533074014365 0ustar bbbbSHELL = /bin/sh MAKE = make CC = gcc # LIBS= #LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # SUNOS 4.1.4, HPUX 10.0, and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # CFLAGS=-DBZERO # BSDI NEEDS SPECIAL ZOMBIE HANDLING CFLAGS=-DZOMBIE -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -O all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/bbsys.bsdi40100644002342100007640000000117707616533074013772 0ustar bbbb# Well I did `bbconfig freebsd` then `cd ../src ; make` then I changed the # bbdef to have the following paths: NSLOOKUP="/usr/bin/nslookup" # SMM NEW IN 1.06C PING="/bin/ping" # CONNECTIVITY TEST LS="/bin/ls" PS="/bin/ps -ax" FIND="/usr/bin/find" TOUCH="/usr/bin/touch" CAT="/bin/cat" GREP="/bin/grep" EGREP="/bin/egrep" SORT="/usr/bin/sort" UNIQ="/usr/bin/uniq" DATE="/bin/date" TAIL="/usr/bin/tail" SED="/usr/bin/sed" UPTIME="/usr/bin/uptime" WC="/usr/bin/wc -l" WHO="/usr/bin/who" RM="/bin/rm" MSGFILE="/var/log/messages" # BSD STYLE MACHINES EXPR="/bin/expr" LOCKPREFIX="/var/run/LCK.." ./bb/bb19c/install/Makefile.mandrake0100644002342100007640000000474607616533074015147 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) CFLAGS=-DSIGSETJMP -O -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -DTIMEH all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o utils.o bbpage.o bbsend.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/bbsys.sinix0100644002342100007640000000064007616533074014111 0ustar bbbb#!/bin/sh # # bbsys.SINIX # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # Thanks to Richard Bothe # PS="/bin/ps -ef" DF="/bin/df -k" MSGFILE="/etc/log/messages" NSLOOKUP="/usr/sbin/nslookup" UPTIME="/usr/ucb/uptime" PING="/usr/bin/ping" PINGPAR1="-s" PINGPAR2="56 1" MAIL="/usr/bin/mailx -s" DFUSE="/dev" DFEXCLUDE="/dev/fd" # PATTERN FOR LINES TO EXCLUDE ./bb/bb19c/install/bbsys.unixware70100644002342100007640000000220007616533074014702 0ustar bbbb#!/usr/bin/sh # # bbsys.local.unixware version 7 # From Jim Whitby (jwhitby@ix.netcom.com) # New address jim@tps.tpsdata.com # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -ef" # Unixware DF="/usr/bin/df -k" # Unixware #If you are *not* using syslogd, this is the default file name # MSGFILE="/var/adm/log/osmlog # using osm #If you are using syslogd, change the file name to suit your site MSGFILE="/var/adm/log/messages" # using syslogd PING="/usr/sbin/ping" # CONNECTIVITY TEST LS="/usr/bin/ls" CAT="/usr/bin/cat" DATE="/usr/bin/date" TAIL="/usr/bin/tail" SED="/usr/bin/sed" WC="/usr/bin/wc -l" WHO="/usr/bin/who" RM="/usr/bin/rm" # PING PARAMETERS # Added by Gunnar Helliesen to accomodate different # styles of ping commands. # # From Jim Whitby jim@tps.tpsdata.com # # The leading switches are -sni3 # ( no name lookup and wait 3 seconds for a reply ). PINGPAR1="-sni3 " # The trailing switches are 56 1 ( 56 byte packets and ping only once ). PINGPAR2=" 56 1" NSLOOKUP="/usr/sbin/nslookup" ./bb/bb19c/install/Makefile.unixware70100644002342100007640000000426007616533074015305 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # Unixware 7 FLAGS REQUIRED FOR PORTING LIBS = -lgen -lnsl -lsocket # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) CFLAGS = -O -DBZERO -D&BBOSTYPE -DREGEXEC all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/install/bbsys.suse0100644002342100007640000000072407616533074013741 0ustar bbbb# # bbsys.suse (Linux) # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # edited by Jon Hittner jhittner@vindigo.com for suse # tested on suse 7.0 PING="/bin/ping" PINGPAR1="&WOPTION -n -c1" # ADDED BY ROB. DON'T RESOLVE NAME # IF -n NOT THERE THAN NEW NETKIT (RH7) PING MAY FAIL .... Same problem seems to affect SuSE # &WOPTION is replaced by -w3 for versions >= 7.3 PS="/bin/ps axww" # Needed that also thanks to compa@compa.demon.nl ./bb/bb19c/install/bbsys.mandrake0100644002342100007640000000047207616533074014544 0ustar bbbb#!/bin/sh # # bbsys.linux # # BIG BROTHER # OPERATING SYSTEM DEPENDENT THINGS THAT ARE NEEDED # PS="/bin/ps ax" # LINUX DF="/bin/df -k" MSGFILE="/var/log/messages" TOUCH="/bin/touch" # SPECIAL TO LINUX MAIL="/bin/mail -s" PING="/bin/ping" GREP="/bin/grep" SORT="/bin/sort" SED="/bin/sed" EGREP="/bin/egrep" ./bb/bb19c/install/bbsys.darwin0100644002342100007640000000130407616533074014241 0ustar bbbb#!/bin/sh # # bbsys.freebsd # # BIG BROTHER # OVERRIDE SETTINGS IN bbsys.sh FOR VARIOUS OPERATING SYSTEMS # PS="/bin/ps -axww" # DF="/bin/df" # MSGFILE="/var/log/system.log" # NSLOOKUP="/usr/sbin/nslookup" # NEW IN 1.06c EXPR="/bin/expr" # NEW IN 1.2 LOCKPREFIX="/var/spool/lpd/LCK.." # THANKS Glen TOP="/usr/bin/top" TOPARGS="-l1 30" # # *** PLEASE DO NOT EDIT BY HAND... # *** AUTOMATIC PATHNAME CORRECTIONS # *** ADDED BY bbchkcmds.sh # *** ON: Mon Sep 17 10:57:25 WET 2001 FOR Darwin ariane 1.3.7 Darwin Kernel Version 1.3.7: Sat Jun 9 11:12:48 PDT 2001; root:xnu/xnu-124.13.obj~1/RELEASE_PPC Power Macintosh powerpc # NSLOOKUP="/usr/bin/nslookup"; export NSLOOKUP ./bb/bb19c/install/Makefile.suse0100644002342100007640000000474607616533074014344 0ustar bbbbSHELL = /bin/sh MAKE = make CC = cc # LIBS = -ll -lnsl -lsocket # SOLARIS NEEDS THIS LIBS= # MISC COMPILER DIRECTIVES # -DENABLE_DISABLE - INCLUDE CODE TO TEMPORARELY DISABLE NOTIFICATIONS ON A HOST # -DDATAMSG - TO ALLOW data MESSAGES # -DNOTESMSG - TO ALLOW notes MESSAGES # -DBZERO - IF YOU DON'T HAVE bzero() # -DZOMBIE - IF zombie PROCESSES ARE GENERATED # -DGETTIMEOFDAY - TO GET DURATION STATISTICS # -DREGEXEC - IF YOUR COMPILER SUPPORTS regexec(),regcomp() # -DREGEX - IF YOUR COMPILER SUPPORTS regex(),regcmp() # -DRE_EXEC - IF YOUR COMPILER SUPPORTS re_exec(),re_comp() # -DTIMEH - IF YOUR OS HAS time.h INSTEAD OF sys/time.h # -DSIGSETJMP - IF YOUR OS SUPPORTS sigsetjmp() AND # DOES NOT HANDLE SIGNALS PROPERLY # WITH setjmp() # -DDONTCLEANSTRING - IF YOU DON'T WANT TO REMOVE THE CHARACTERS "`$;|&\" # FROM INCOMING MESSAGES # -DNOTAMP - IF YOU WISH TO KEEP INCOMING '&' IN MESSAGES # WHILE REMOVING "`$;|\" # (useful with bbmrtg.sh and LARRD - see http://www.deadcat.net) # FLAGS REQUIRED FOR PORTING # HPUX 10.0, irix and LINUX NEED NOTHING DEFINED # EXCEPT MAYBE THE OPTIMIZER # CFLAGS=-O # SOME OS DON'T HAVE bzero() (-DBZERO) # CFLAGS=-DBZERO -O # SOME OS NEEDS SPECIAL ZOMBIE HANDLING (-DZOMBIE) # CFLAGS=-DZOMBIE -O # SOME OS NEEDS SIGSETJMP HANDLING (-DSIGSETJMP) CFLAGS=-DSIGSETJMP -O -D&BBOSTYPE -DGETTIMEOFDAY -DREGEXEC -DTIMEH all: bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun bb: bb.o bbsend.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bb.o bbsend.o utils.o ${LIBS} bbd: dohostsvc.o utils.o bbd.o bbpage.o bbsend.o bb.h ${CC} ${CFLAGS} -o $@ bbd.o dohostsvc.o bbpage.o bbsend.o utils.o ${LIBS} bbnet: bbnet.o utils.o bb.h ${CC} ${CFLAGS} -o $@ bbnet.o utils.o ${LIBS} touchtime: touchtime.o bb.h ${CC} ${CFLAGS} -o $@ touchtime.o ${LIBS} dumphostsvc: dohostsvc.o utils.o dumphostsvc.o bb.h ${CC} ${CFLAGS} -o $@ dumphostsvc.o dohostsvc.o utils.o ${LIBS} getipaddr: utils.o getipaddr.o bb.h ${CC} ${CFLAGS} -o $@ getipaddr.o utils.o ${LIBS} bbstat: bbstat.o bb.h ${CC} ${CFLAGS} -o $@ bbstat.o ${LIBS} bbrun: utils.o bbrun.o bb.h ${CC} ${CFLAGS} -o $@ bbrun.o utils.o ${LIBS} install: rm -f *.o mv bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ../bin clean: rm -f *.o bb bbd bbnet touchtime dumphostsvc getipaddr bbstat bbrun ./bb/bb19c/web/0040755002342100007640000000000007616533075011026 5ustar bbbb./bb/bb19c/web/mkbb.cols0100755002342100007640000000205607616533074012625 0ustar bbbb#!/bin/sh # mkbb.cols # SCRIPT TO DETERMINE COLUMNS TO DISPLAY # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # if [ "$#" -eq 1 ] then BBHOSTLINE="$1" fi if [ ! "$BBTMP" ] # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # IF WE'RE CALLED WITH AN ARGUMENT WE'RE IN COMPRESSED MODE... # THIS ARGUMENT IS "0" WHEN CALLED FROM mkbb2.sh... # if [ "$BBHOSTLINE" ] # COMPRESSED MODE then if [ "$BBHOSTLINE" != "0" ] # CALLED FROM mkbb2.sh ? then BBARGS=`$BBHOME/web/mkbb.comp $BBHOSTLINE 2>/dev/null` fi else BBARGS=" " fi # # THANKS TO: Bill Petersen # if [ "$BBHOSTLINE" = "0" ] # CALLED FROM mkbb2.sh then $GREP -v "^summary" $BBTMP/BB | $SED 's/.*\.//'|$SORT|$UNIQ else # NORMAL COMPRESSED DISPLAY if [ "$BBARGS" ] # HANDLE "NOTHING" ELEGANTLY then cd $BBLOGS $LS $BBARGS| $GREP "\." | $GREP -v "^dialup"|$GREP -v "^summary"|$SED 's/.*\.//'|$SORT | $UNIQ fi fi ./bb/bb19c/web/mkbb.sh0100755002342100007640000007336207616533074012307 0ustar bbbb#!/bin/sh # mkbb.sh # SHELL SCRIPT TO MAKE THE NEW DISPLAY # Sean MacGuire # Version 1.9b # May 01st, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi OLDIFS=$IFS # # IF WE'RE CALLED WITH AN ARGUMENT, WE'RE IN A SUBPAGE # THE ARGUMENT IS THE BACKGROUND COLOR OF THIS PAGE # THE USEABLE PORTION OF THE etc/bb-hosts FILE NOW # LIVES IN $BBTMP # if test "$#" -ge "1" then if [ \( "$#" -eq 1 \) -o \( "$2" != "page" -a "$2" != "subpage" \) ] then echo "mkbb.sh: Called with missing or invalid arguments" echo "usage: mkbb.sh " exit 0 fi BBBKG=$1 # Subpage type: page or subpage BBSUBPAGE=$2 export BBSUBPAGE BBHOSTS="$BBTMP/bb-hosts.${BBPAGENAME}.${PARPID}" export BBHOSTS else BBSUBPAGE="" case "$BBTMP" in $BBREP ) MKBBTYPE="REPORT" ;; * ) MKBBTYPE="STATIC" ;; esac export MKBBTYPE PARPID="$$" export PARPID ALLCOLS=`${BBHOME}/web/mkbb.cols` # GET OUR COLUMN HEADINGS export ALLCOLS set $ALLCOLS >/dev/null 2>&1 TOTCOL=`$EXPR $# + 1` REALTOTCOL="$#" export REALTOTCOL export TOTCOL fi COLMNS="$ALLCOLS" # THANKS Rob! BBDATE=`${DATE}` # SET THE DATE BBSKIP2="." TOP="NOTDONE" # # FIND OUT IF WE HAVE ANY OLD DATA FILES LYING AROUND... # touchtime is a C program that creates a file 30 minutes old # if test "$BBSUBPAGE" = "" -a "$MKBBTYPE" != "REPORT" then # NEW WAY - FIND ANY FILES OLDER THAN RIGHT NOW. # THE EXPIRATION TIME IS BUILT INTO THE FILE NOW... $BBHOME/bin/touchtime 0 ${BBLOGS}/.later # MAKE THE TOUCH FILE sleep 1 # THIS ENSURES THAT ANY NEW STATUS LOG IN THE PROCESS # OF BEING CREATED WON'T GENERATE A PURPLE BECAUSE # ITS CHANGE TIME HASN'T BEEN SET YET BY bbd # THANKS TO John Horne # GET RID OF EXPIRED ACKS $FIND $BBACKS/. -name "ack.*" -type f ! -newer ${BBLOGS}/.later -exec $RM -f {} \; >/dev/null 2>&1 # NOW FIND THE EXPIRED STATUS $FIND $BBLOGS/. -name "*.*" -type f ! -name "\.*" ! -newer ${BBLOGS}/.later -print | $GREP -v .later | $GREP -v .bkg > $BBTMP/OLD.$$ # # SMM DEFEND AGAINST MASSIVE PURPLE EXPLOSION # FIRST PASS ON BBSTARTUP IS FREE! # if test -f "$BBLOGS/.bbstartup" then ${RM} -f $BBLOGS/.bbstartup > $BBTMP/OLD.$$ fi for file in `${CAT} $BBTMP/OLD.$$` do set -f # disable globber set `$HEAD -1 $file` >/dev/null 2>&1 set +f # reenable globber COLOR=$1 # # SMM NEW FOR 1.08b - EVEN PURPLE SENDS MESSAGES VIA bbd # IF bbd IS DOWN, THOUGH, REVERT TO THE OLD WAY OF DOING # THINGS... THIS WAY THE HISTORY FILE WILL HANDLE PURPLE TOO... # set `echo $file | $SED "s/\//\ /g"` while test "$#" -gt 1 # THE basename COMMAND, IN SHELL... do shift; done FNAME=$1 # # SMM - SUPPORT FOR DIALUPS THAT SEND LOCAL DATA ACROSS # DIALUPS SHOULD *NEVER* GO PURPLE. # set `echo $FNAME | $SED "s/\./\ /g"` PURPLEBOX=`echo $1 | $SED "s/,/\./g"` HOSTLINE=`$GREP $PURPLEBOX $BBHOME/etc/bb-hosts` if test "$HOSTLINE" then echo "$HOSTLINE" | $GREP dialup > /dev/null if test "$?" != "0" # NOT A dialup LINE then ${CAT} $file | $SED "s/^${COLOR}/purple/"|$SED "/^Status unchanged/d" | $SED "/${STATUNCHMSG}/d" | $SED "/^Encrypted status message/d" | $SED "/^Status message received from/d" | $SED "/${RECVFROMMSG}/d" >$BBTMP/NEW.$$ else ${CAT} $file | $SED "s/^${COLOR}/clear/"| $SED "/^Status unchanged/d" | $SED "/${STATUNCHMSG}/d" | $SED "/^Encrypted status message/d" | $SED "/^Status message received from/d" | $SED "/${RECVFROMMSG}/d" >$BBTMP/NEW.$$ fi else ${CAT} $file | $SED "s/^${COLOR}/purple/"|$SED "/^Status unchanged/d" | $SED "/${STATUNCHMSG}/d" | $SED "/^Encrypted status message/d" | $SED "/^Status message received from/d" | $SED "/${RECVFROMMSG}/d" >$BBTMP/NEW.$$ fi if [ "$COLOR" != "purple" ] then if test "$HOSTLINE" = "" then echo " $PURPLEBOX $HOSTLINE This entry is no longer listed in $BBHOME/etc/bb-hosts. To remove this purple message, please delete the log files for this host located in \$BBLOGS, \$BBHIST and \$BBHISTLOGS if this host is no longer monitored " >> $BBTMP/NEW.$$ fi fi # Only send to current BBDISPLAY # MACHINEADDR is either the IP address or the host name # if the IP in bb-hosts is 0.0.0.0 then it is the host name $BB $MACHINEADDR "status+0 $FNAME `${CAT} $BBTMP/NEW.$$`" if test $? != 0 # BAD THINGS IN BB LAND... then $MV $BBTMP/NEW.$$ $file # THE OLD WAY... else $RM $BBTMP/NEW.$$ fi done $RM -f $BBTMP/OLD.$$ # # RAC: NEW IN 1.09b # IF BBDISPLAY SENDS A SUMMARY MESSAGE TO ITSELF, REMOVE IT # BEFORE THE BACKGROUND COLOR IS CHECKED # $GREP "^summary" ${BBHOSTS} | \ while read line do #set -f set $line #set +f # CHECK AGAINST NAME OR IP ADDRR (BECAUSE BBDISP MIGHT = 0.0.0.0) if [ "$3" = "$BBDISP" -o "$3" = "$MACHINE" -o "$3" = "$MACHINEADDR" ] then $RM -f $BBLOGS/summary.$2 fi done # DETERMINE BKG COLOR BBBKG=`${BBHOME}/web/mkbb.bkg 2>/dev/null` # SET THE BACKGROUND COLOR IN ${BBLOGS}/.bkg elif [ "$BBSUBPAGE" = "" ] then case "$MKBBTYPE" in REPORT ) # DETERMINE BKG COLOR BBBKG=`${BBHOME}/web/mkbb.bkg 2>/dev/null` # SET THE BACKGROUND COLOR IN ${BBTMP}/.bkg ;; esac fi # # Thanks to "Alistair K. Birch" # who reminded me that Explorer needs Height and Width tags! # # SMM 1.10 - REMOVED THE PRAGMA BECAUSE IT BREAKS MORE # THAN IT FIXES. IT FORCES NETSCAPE 4.5 TO RE-GET EVERY # LITTLE GIF ON THE PAGE (UGH)... THANKS TO: # Henrik Olsen # # # # Allow "page" and "subpage" to have their own headers and footers # if [ "$BBSUBPAGE" = "page" ] then prename="$BBPAGENAME" DISPPAGENAME="$BBPAGENAME" elif [ "$BBSUBPAGE" = "subpage" ] then prename="${TOPBBPAGENAME}_${BBPAGENAME}" DISPPAGENAME="$TOPBBPAGENAME" DISPSUBPAGENAME="$BBPAGENAME" else prename="bb" DISPPAGENAME="" DISPSUBPAGENAME="" fi if [ "$MKBBTYPE" != "REPORT" ] then headfile="$BBHOME/web/${prename}_header" if [ ! -r "$headfile" -o ! -s "$headfile" ] then if [ "$BBSUBPAGE" = "subpage" ] then # If "subpage" and not found, reset to _header headfile="$BBHOME/web/${TOPBBPAGENAME}_header" if [ ! -r "$headfile" -o ! -s "$headfile" ] then #if that's not found then reset to bb_header headfile="$BBHOME/web/bb_header" fi else # If anything else and not found, reset to bb_header headfile="$BBHOME/web/bb_header" fi fi if [ -r "$headfile" -a -s "$headfile" ] then $SED -e "s/&BBRELDATE/$BBRELDATE/g" \ -e "s/&BBREL/$BBREL/g" \ -e "s/&BBDATE/$BBDATE/g" \ -e "s!&BBSKIN!$BBSKIN!g" \ -e "s!&PAGENAME!$DISPPAGENAME!g" \ -e "s!&SUBPAGENAME!$DISPSUBPAGENAME!g" \ -e "s!&BBWEB!$BBWEB!g" \ -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s/&BBBACKGROUND/$BBBKG/g" $headfile echo "
" else # Print proper error message, thanks to Mark Deiss echo "

$headfile is either missing or invalid, please create this file with your custom header

" fi else headfile="$BBHOME/web/${prename}rep_header" if [ ! -r "$headfile" -o ! -s "$headfile" ] then if [ "$BBSUBPAGE" = "subpage" ] then # If "subpage" and not found, reset to rep_header headfile="$BBHOME/web/${TOPBBPAGENAME}rep_header" if [ ! -r "$headfile" -o ! -s "$headfile" ] then #if that's not found then reset to bbrep_header headfile="$BBHOME/web/bbrep_header" fi else # If anything else and not found, reset to bbrep_header headfile="$BBHOME/web/bbrep_header" fi fi # WE'RE IN REPORTING if [ -r "$headfile" -a -s "$headfile" ] then $SED -e "s/&BBRELDATE/$BBRELDATE/g" \ -e "s/&BBREL/$BBREL/g" \ -e "s/&BBDATE/$RANGE/g" \ -e "s!&PAGENAME!$DISPPAGENAME!g" \ -e "s!&SUBPAGENAME!$DISPSUBPAGENAME!g" \ -e "s!&BBWEB!$BBWEB!g" \ -e "s!&BBSKIN!$BBSKIN!g" \ -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s/&BBBACKGROUND/$BBBKG/g" $headfile echo "
" else # Print proper error message, thanks to Mark Deiss echo "

$headfile is either missing or invalid, please create this file with your custom header

" fi fi echo "     " TAGLINES="";export TAGLINES $TOUCH $BBTMP/BBEMPTYPAGE.$$ # # FOR EACH HOST WE CARE ABOUT... # # echo "**** BBHOSTS IS $BBHOSTS" while read line do TAGLINES="${TAGLINES}." case "${TAGLINES}" in "$BBSKIP2" ) : ;; * ) continue ;; esac #if test "$TAGLINES" != "$BBSKIP2" #then # continue #fi # Also update BBSKIP2, we're doing another line # in may also be updated in the page case statement BBSKIP2="${BBSKIP2}." # FIX THIS LINE SOONER OR LATER - THE > /dev/null BREAKS ON # DEC ULTRIX. GREAT EH? STILL VALID ??? set bogus $line >/dev/null 2>&1 shift # # Handle the different directives of the bb-hosts file # case "$1" in [0-9]* ) # BETTER BE AN IP ADDR :) $RM -f $BBTMP/BBEMPTYPAGE.$$ # At least one host is in current page # # SMM 1.06a # WE MAY NOT HAVE A group DIRECTIVE THAT CREATED # THE TABLE. HANDLE IT HERE. # case "$TOP" in NOTDONE ) OUT="" for column in $COLMNS do OUT="${OUT}" done TOP="DONE" echo "${OUT}" ;; esac ;; page | subpage ) # # SMM 1.10 SUPPORT FOR MULTIPLE DISPLAY PAGES # FORMAT page NAME # # THE ONLY WAY OUT OF A SUBPAGE IS EOF # THE mkbb.page SCRIPT ENSURES THIS. PAGETYPE="$1" export PAGETYPE if [ \( "$BBSUBPAGE" = "" -a "$PAGETYPE" = "page" \) -o \( "$BBSUBPAGE" = "page" -a "$PAGETYPE" = "subpage" \) ] then OUT="" BBPAGENAME=`echo "$2" | $SED -e 's/^.*\/\([^\/]*$\)/\1/g' -e 's/\.\.//g'` export BBPAGENAME if [ "$PAGETYPE" = "page" ] then TOPBBPAGENAME="$BBPAGENAME" export TOPBBPAGENAME fi shift;shift; BBHOSTLINE=`$EXPR "$TAGLINES" : ".*"` BK=`$BBHOME/web/mkbb.page $BBHOSTLINE` # 2>/dev/null` if test "$NAME" != "" # CLOSE OFF TABLE then OUT="${OUT}
" if [ -f "$BBHOME/www/help/${column}.html" ] then OUT="${OUT} " elif [ -f "$BBHOME/www/notes/${column}.html" ] then OUT="${OUT} " else OUT="${OUT} " fi OUT="${OUT} $column


" NAME="" fi # # IF THIS IS OUR FIRST PAGE OR SUBPAGE, MAKE THE TABLE # if [ \( "$PAGETYPE" = "page" -a "$FIRSTPG" = "" \) -o \( "$PAGETYPE" = "subpage" -a "$FIRSTSUBPG" = "" \) ] then $RM -f $BBTMP/BBEMPTYPAGE.$$ # At least one entry is in current page if [ "$PAGETYPE" = "page" ] then FIRSTPG="DONE" export FIRSTPG MKBBLOCALVAL="$MKBBLOCAL" else FIRSTSUBPG="DONE" export FIRSTSUBPG MKBBLOCALVAL="$MKBBSUBLOCAL" fi OUT="${OUT} " fi if [ "$PAGETYPE" = "page" ] then BBPAGEDIR="$TOPBBPAGENAME" else # IT'S A SUBPAGE BBPAGEDIR="$TOPBBPAGENAME/$BBPAGENAME" fi if [ "$MKBBTYPE" = "STATIC" ] then if [ ! -d "$BBHOME/www/$BBPAGEDIR" ] then mkdir "$BBHOME/www/$BBPAGEDIR" fi PGNAME="$BBPAGEDIR/$BBPAGENAME" BBWEBLOC="$BBWEB" else if [ ! -d "$BBREP/$BBPAGEDIR" ] then mkdir "$BBREP/$BBPAGEDIR" fi # ALWAYS RESET THE PERMS ON DIRECTORY BECAUSE AFTER AN UPGRADE # THE PERMS WILL NEED TO BE RESET IF DIRECTORY ALREADY EXISTS chmod g+w "$BBREP/$BBPAGEDIR" PGNAME="$BBPAGEDIR/$BBPAGENAME-$$" BBWEBLOC="$BBREPURL" fi OUT="${OUT}" OLDTAGLINES=$TAGLINES unset TAGLINES echo "${OUT}" $BBHOME/web/mkbb.sh $BK $PAGETYPE > $BBTMP/$BBPAGENAME.$$ if [ "$MKBBTYPE" = "STATIC" ] then $MV $BBTMP/$BBPAGENAME.$$ $BBHOME/www/$BBPAGEDIR/$BBPAGENAME.html else $MV $BBTMP/$BBPAGENAME.$$ $BBTMP/$BBPAGEDIR/$BBPAGENAME-$$.html fi TAGLINES=$OLDTAGLINES BBSKIP2="${TAGLINES}`$CAT $BBTMP/BBSKIP2.${BBPAGENAME}.${PARPID}`" $RM -f $BBTMP/bb-hosts.${BBPAGENAME}.${PARPID} $RM -f $BBTMP/BBSKIP2.${BBPAGENAME}.${PARPID} BBPAGENAME="" continue fi ;; group-compress | group-only | group ) # # SMM 1.06a SUPPORT FOR GROUPING THINGS TOGETHER # IF THE LINE STARTS WITH THE WORD group THEN # A NEW TABLE IS CREATED WITH THE REST OF THE LINE # AS THE CENTERED LABEL, i.e. # group Web and Mail Servers # # SMM 1.08 SUPPORT FOR COMPRESSED GROUPINGS # IF THERE IS ONLY ONE COLUMN IN THE GROUP, DISPLAY THEM # ACROSS THE SCREEN, OTHERWISE JUST ELIMINATE UNNEEDED COLUMNS # # RAC 1.4f SUPPORT FOR LIMITING COLUMNS # IF A LINE STARTS WITH THE WORD group THEN # ONLY THE COLUMNS APPEARING IN THE DIRECTIVES # WILL BE SHOWN. THIS DIRECTIVE IS VALID UNTIL # THE NEXT group/group-compress/group-only/page DIRECTIVE # case $1 in group-compress ) # COMPRESS COLUMNS BBHOSTLINE=`$EXPR "$TAGLINES" : ".*"` COLMNS=`${BBHOME}/web/mkbb.cols $BBHOSTLINE` shift # GET RID OF group-compress OLDARGS=$* set bogus $COLMNS >/dev/null 2>&1 # bogus IS THERE TO COUNT THE HOSTNAME COLUMN TOTCOLS="$#" shift XCOLS="$#" # REAL NUMBER OF COLS set bogus $OLDARGS shift ;; group-only ) # ONLY DISPLAY REQUESTED COLUMNS # bogus IS THERE TO COUNT FOR THE HOSTNAME COLUMN columns="bogus|$2" shift;shift # GET RID OF group-only + columns OLDARGS=$* IFS='|' set $columns >/dev/null 2>&1 IFS=$OLDIFS TOTCOLS="$#" shift # REMOVE THE bogus column XCOLS="$#" # REAL NUMBER OF COLS COLMNS="$*" # RESET THE TITLE set bogus $OLDARGS shift ;; * ) # DISPLAY ALL COLUMNS COLMNS="$ALLCOLS" TOTCOLS="$TOTCOL" XCOLS="$REALTOTCOL" # REAL NUMBER OF COLS shift; # GET RID OF group ;; esac OUT="" if test "$NAME" != "" # CLOSE OFF TABLE then OUT="${OUT}
$MKBBLOCALVAL

$*
\"$BK\"


" fi OUT="${OUT} " for column in $COLMNS # REDISPLAY HEADERS do OUT="${OUT}" done TOP="DONE" echo "${OUT} " continue; ;; * ) continue ;; esac # # NEW FOR 1.04 - SUPPORT FOR FQDN's # NOT CENTERED... # OUT="" FNAME="$2" IFS='.' set $FNAME IFS=$OLDIFS NAME=$1 case "$FQDN" in TRUE ) OUT="${OUT} " elif test -f "${BBNOTES}/${FNAME}.htm" then OUT="${OUT} ${DISPFONT}$FNAME" elif test -d "${BBNOTES}/${FNAME}" then OUT="${OUT} ${DISPFONT}$FNAME" elif test -f "${BBNOTES}/${FNAME}" then OUT="${OUT} ${DISPFONT}$FNAME" elif test -f "${BBNOTES}/${FNAME}.shtml" then OUT="${OUT} $FNAME" elif test -f "${BBNOTES}/${FNAME}.php3" then OUT="${OUT} ${DISPFONT}$FNAME" else # just in case we had red.html but the hostname was really redhat # and no matching files were found. OUT="${OUT} ${DISPFONT}$FNAME" fi else OUT="${OUT} ${DISPFONT}$FNAME" fi # # FOR EACH OF THE THINGS WE MONITOR... # case "$MKBBTYPE" in DYNAMIC|STATIC ) for column in $COLMNS do if [ -f "${BBLOGS}/${NAME}.${column}" ] then ACKNAME="${BBACKS}/ack.${FNAME}.${column}" if [ -f "${ACKNAME}" ] then ACKED="TRUE" else ACKED="FALSE" fi set -f set `$HEAD -1 ${BBLOGS}/${NAME}.${column}` >/dev/null 2>&1 set +f if [ "$ACKED" = "TRUE" ] && [ "$1" = "red" -o "$1" = "yellow" -o "$1" = "purple" ] then DOTCOLOR="$1-ack" ALTTAG=":acked" else DOTCOLOR="$1" ALTTAG="" fi #if [ "$BBLOGSTATUS" = "DYNAMIC" ] #then case "$BBLOGSTATUS" in DYNAMIC ) OUT="${OUT} " ;; * ) #else if [ "$BBLOGSTATUS" = "STATIC" -a -d "$BBHOME/www/html" ] then OUT="${OUT} " else OUT="${OUT} " fi #fi ;; esac else OUT="${OUT} " fi done ;; REPORT ) # WE'RE IN REPORTING MODE for column in $COLMNS do # # SMM USE A TEMP FILE INSTEAD # REP=`$GREP "^${NAME}.${column}[ ]*" $REPDATA` if test "$REP" then set -f set $REP >/dev/null 2>&1 set +f shift # GET RID OF NAME... COLOR="$1" PCT="$2" shift;shift; OUT="${OUT} " else # PERCENT=`echo $PCT | $AWK '{ print $1 * .1}'` PERCENT=$PCT OUT="${OUT} $PERCENT" fi else OUT="${OUT} " fi done ;; esac echo "${OUT} " done < $BBHOSTS echo "
$*
" if [ -f "$BBHOME/www/help/${column}.html" ] then OUT="${OUT} " elif [ -f "$BBHOME/www/notes/${column}.html" ] then OUT="${OUT} " else OUT="${OUT} " fi OUT="${OUT} $column

" shift for arg in $* do NAME="$NAME,$arg" done ;; * ) OUT="${OUT}
" FNAME=$NAME ;; esac DISPFONT="" # # PUT A LINK IN FOR SYSTEM NOTES IF WE HAVE ANY # THIS IS A GOOD PLACE TO PUT INVENTORY INFO # SMM NEW IN 1.05: SUPPORT FOR .html and .htm EXTENSIONS # DON'T ASK FOR UPPERCASE EXTENSIONS. EVER. # # Thanks to Luke Moses who # made us remember to add .shtml/.php3 # Added check for directory with host name OUT="${OUT} " NOTESFILES=`echo ${BBNOTES}/${FNAME}*` if [ "$NOTESFILES" != "${BBNOTES}/${FNAME}*" ] then if test -f "${BBNOTES}/${FNAME}.html" then OUT="${OUT} ${DISPFONT}$FNAME \"${column}:$1$ALTTAG\" \"${column}:$1$ALTTAG\" \"${column}:$1$ALTTAG\"-" if test "$PCT" = "100.00" # WAS 1000 then OUT="${OUT} \"100%-


" # END OF TABLE # Content of variable is empty if a least one host # is defined in the page if [ -f $BBTMP/BBEMPTYPAGE.$$ ] then echo $MKBBEMPTYPAGE $RM -f $BBTMP/BBEMPTYPAGE.$$ fi # # CLOSE OFF TABLE # if test "$FIRSTPG" != "" then : #echo "" # not required any, well, I think ;) fi # # SMM NEW IN 1.05 - SUPPORT FOR DISPLAY OF SUMMARY INFORMATION # if test "$BBSUBPAGE" = "" -a "$MKBBTYPE" != "REPORT" then # # SMM: NEW IN 1.05 - SUPPORT FOR SENDING SUMMARY INFORMATION UPSTREAM # bb-hosts LINES OF THE FORMAT: # # summary row.column IP-ADDRESS-OF-PARENT http://bb4.com/ # summary quebec.montreal 123.123.123.123 http://bb4.com/bb/ $GREP "^summary" ${BBHOSTS} | \ while read line do #set -f set $line #set +f BBNAME=$2 BBSUMMARY=$3 BBHTTP=$4 # echo "DOING $BBNAME $BBHTTP" # # IF BBHTTP ENDS IN .html, THEN ASSUME IT'S A LOCAL PAGE # AND GET BBBKG FROM HERE (LOCALLY). # unset PGBKG LOCALPG=`echo "$BBHTTP" | $GREP "\.html"` if test "$LOCALPG" then # echo "LOCALPG IS $LOCALPG" #set `echo $LOCALPG | $SED 's!\/!\ !g'` # Get the structure below the top level of BB set bogus `echo $LOCALPG | $SED "s!${BBWEB}/! !g"` shift # remove bogus shift # Remove the http:// heading #while test "$#" -gt "1" #do # shift; # SKIP TO THE LAST ARG... #done # THE ONLY TIME THIS IS INVALID IS FOR OURSELF # SINCE WE HAVEN'T CREATED bb.html/index.html YET! # THIS MEANS IT WOULD TAKE AN EXTRA ITERATION # FOR THE bb.html AKA index.html TO BE SUMMARIZED # CORRECTLY... if test "$1" != "bb.html" && test "$1" != "index.html" then PGBKG=`$GREP TITLE $BBHOME/www/$1 | $HEAD -1` if test "$PGBKG" then set $PGBKG PGBKG=`echo $1 | $SED 's///g'` fi fi fi if test "$PGBKG" then $BB $BBSUMMARY "summary summary.${BBNAME} $PGBKG $BBHTTP $BBDATE" else $BB $BBSUMMARY "summary summary.${BBNAME} $BBBKG $BBHTTP $BBDATE" fi done echo "<A NAME=\"summaries-blk\">" cd ${BBLOGS} sumfiles=`$LS summary* 2> /dev/null| $SORT` cd ${BBHOME} if [ -n "$sumfiles" ] then # echo "**** $sumfiles ****" for line in $sumfiles do if test "$BBSUMHDR" != "TRUE" then BBSUMHDR="TRUE" echo "<TABLE SUMMARY=\"Summary Block\" BORDER=0><TR><TD> <CENTER><FONT $MKBBTITLE> $MKBBREMOTE </FONT></CENTER></TD></TR><TR><TD> <HR WIDTH=100%></TD></TR> <TR><TD><TABLE SUMMARY=\"Summary Lines\" BORDER=0>" fi IFS='.' set $line >/dev/null 2>&1 IFS=$OLDIFS ROW=$2 COL=$3 # # SMM 1.4 - 13 Jan 00 # IF THE SUMMARY FILE ISN'T IN summary.row.col # FORMAT THEN JUST IGNORE IT. # if test ! -f "${BBLOGS}/summary.${ROW}.${COL}" then continue; fi # # HANDLE THE ROW DISPLAY # if test "$ROW" != "$LASTROW" # WE HAVE A NEW ROW... then if test "$LASTROW" != "" then echo "</TR>" fi # # SMM: NEW IN 1.06a # SUPPORT FOR NOTES IN THE SUMMARY LINES # VIA: David Fordyce <fordyce@ite1.dseg.ti.com> # echo "<A NAME=\"${ROW}\">" echo "<TR><TD>" DISPFONT="<FONT $MKBBROWFONT>" NOTESFILES=`echo ${BBNOTES}/${ROW}* 2>/dev/null` if [ "$NOTESFILES" != "${BBNOTES}/${ROW}*" ] then if test -f "${BBNOTES}/${ROW}.html" then echo "<A HREF=$BBWEB/notes/${ROW}.html>${DISPFONT}$ROW</FONT></A></TD>" elif test -f "${BBNOTES}/${ROW}.htm" then echo "<A HREF=$BBWEB/notes/${ROW}.htm>${DISPFONT}$ROW</FONT></A></TD>" elif test -d "${BBNOTES}/${ROW}" then echo "<A HREF=$BBWEB/notes/$ROW>${DISPFONT}$ROW</FONT></A></TD>" elif test -f "${BBNOTES}/${ROW}" then echo "<A HREF=$BBWEB/notes/$ROW>${DISPFONT}$ROW</FONT></A></TD>" elif test -f "${BBNOTES}/${ROW}.shtml" then echo "<A HREF=$BBWEB/notes/${ROW}.shtml>${DISPFONT}$ROW</FONT></A></TD>" elif test -f "${BBNOTES}/${ROW}.php3" then echo "<A HREF=$BBWEB/notes/${ROW}.php3>${DISPFONT}$ROW</FONT></A></TD>" else # just in case we had red.html but the hostname was really redhat # and no matching files were found. echo "${DISPFONT}$ROW</FONT></TD>" fi else echo "${DISPFONT}$ROW</FONT></TD>" fi LASTROW="$ROW" fi # # HANDLE THE COLUMN DISPLAY # echo "<TD WIDTH=45 ALIGN=CENTER>$COL<BR>" # COLUMN TITLE #set -f set `$CAT ${BBLOGS}/summary.${ROW}.${COL}` >/dev/null 2>&1 #set +f echo "<A HREF=$2><IMG SRC=\"$BBSKIN/$1.gif\" ALT=\"$1\" HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A></TD>" done echo "</TR></TABLE> </TD></TR></TABLE>" fi # # SMM NEW IN 1.05 - SUPPORT FOR MONITORING MODEM BANKS # echo "<A NAME=\"dialups-blk\">" echo "<P><TABLE SUMMARY=\"Dialup Block\" BORDER=0>" $GREP "^dialup" ${BBHOSTS} | \ while read line do #set -f set $line #set +f FNAME=$2 # # PUT IN A LINK... # # Make a new row OUT="<TR><TD><A NAME=\"${FNAME}\">" DISPFONT="<FONT $MKBBROWFONT>" NOTESFILES=`echo ${BBNOTES}/${FNAME}* 2>/dev/null` if [ "$NOTESFILES" != "${BBNOTES}/${FNAME}*" ] then if test -f "${BBNOTES}/${FNAME}.html" then OUT="${OUT} <A HREF=$BBWEB/notes/${FNAME}.html>${DISPFONT}$FNAME</FONT></A></TD>" elif test -f "${BBNOTES}/${FNAME}.htm" then OUT="${OUT} <A HREF=$BBWEB/notes/${FNAME}.htm>${DISPFONT}$FNAME</FONT></A></TD>" elif test -d "${BBNOTES}/${FNAME}" then OUT="${OUT} <A HREF=$BBWEB/notes/$FNAME>${DISPFONT}$FNAME</FONT></A></TD>" elif test -f "${BBNOTES}/${FNAME}" then OUT="${OUT} <A HREF=$BBWEB/notes/$FNAME>${DISPFONT}$FNAME</FONT></A></TD>" elif test -f "${BBNOTES}/${FNAME}.shtml" then OUT="${OUT} <A HREF=$BBWEB/notes/${FNAME}.shtml>$FNAME</FONT></A></TD>" elif test -f "${BBNOTES}/${FNAME}.php3" then OUT="${OUT} <A HREF=$BBWEB/notes/${FNAME}.php3>${DISPFONT}$FNAME</FONT></A></TD>" else # just in case we had red.html but the hostname was really redhat # and no matching files were found. OUT="${OUT} ${DISPFONT}$FNAME</FONT></TD>" fi else OUT="${OUT} ${DISPFONT}$FNAME</FONT></TD>" fi if [ -f "$BBLOGS/dialup.${FNAME}" ] then set -f set `$CAT $BBLOGS/dialup.${FNAME}` >/dev/null 2>&1 set +f while test "$1" != "DATA" -a "$#" != 0 do shift; done if [ "$#" != 0 ] then shift; # GO PAST THE DATA LINE fi # # NOW MAKE NICE PICTURES # while test "$1" != "Status" -a "$#" != 0 # SMM 1.08b - STOP AT Status do if [ "$BBLOGSTATUS" = "DYNAMIC" ] then OUT="${OUT} <TD ALIGN=CENTER><A HREF=\"$CGIBINURL/bb-hostsvc.sh?HOSTSVC=dialup.${FNAME}\"> <IMG SRC=\"$BBSKIN/$1.gif\" ALT=$1 HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A> </TD>" else if [ -d "$BBHOME/www/html" -a "$BBLOGSTATUS" = "STATIC" ] then OUT="${OUT} <TD ALIGN=CENTER><A HREF=\"$BBWEB/html/dialup.${FNAME}.html\"> <IMG SRC=\"$BBSKIN/$1.gif\" ALT=$1 HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A> </TD>" else OUT="${OUT} <TD ALIGN=CENTER><A HREF=\"$BBWEB/logs/dialup.${FNAME}\"> <IMG SRC=\"$BBSKIN/$1.gif\" ALT=$1 HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A> </TD>" fi fi shift; done OUT="${OUT} </TR>" fi echo "${OUT}" done echo "</TABLE>" fi # # EXECUTE LOCAL SCRIPTS FROM HERE... # SCRIPTS SHOULD LIVE IN $BBHOME/ext/mkbb DIRECTORY # BBMKBBEXT CONTAINS THE FILENAMES TO EXECUTE # BBMKBBEXT=`echo "$BBMKBBEXT" | $SED 's!\.\./!\./!g'` for file in $BBMKBBEXT do if [ -x "$BBHOME/ext/mkbb/$file" ] then $BBHOME/ext/mkbb/$file else echo "<BR><B>mkbb.sh: $BBHOME/ext/mkbb/$file can't be executed</B><BR>" fi done echo " </CENTER> " # # SMM NEW IN 1.04 - STANDARD FOOTER # # prename was set in _footer handling # if [ "$MKBBTYPE" != "REPORT" ] then footfile="$BBHOME/web/${prename}_footer" if [ ! -r "$footfile" -o ! -s "$footfile" ] then if [ "$BBSUBPAGE" = "subpage" ] then # If "subpage" and not found, reset to <page>_footer footfile="$BBHOME/web/${TOPBBPAGENAME}_footer" if [ ! -r "$footfile" -o ! -s "$footfile" ] then #if that's not found then reset to bb_footer footfile="$BBHOME/web/bb_footer" fi else # If anything else and not found, reset to bb_footer footfile="$BBHOME/web/bb_footer" fi fi if [ -r "$footfile" -a -s "$footfile" ] then $SED -e "s/&BBRELDATE/$BBRELDATE/g" \ -e "s/&BBREL/$BBREL/g" \ -e "s/&BBDATE/$BBDATE/g" \ -e "s!&BBSKIN!$BBSKIN!g" \ -e "s!&PAGENAME!$DISPPAGENAME!g" \ -e "s!&SUBPAGENAME!$DISPSUBPAGENAME!g" \ -e "s!&BBWEB!$BBWEB!g" \ -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s/&BBBACKGROUND/$BBBKG/g" $footfile else # Print proper error message, thanks to Mark Deiss <mcd@crexm.acs-gsg.com> echo "<HR size=4><BR> $footfile was not found, please create this file with your custom footer<BR><HR size=4> </BODY></HTML> " fi else footfile="$BBHOME/web/${prename}rep_footer" if [ ! -r "$footfile" -o ! -s "$footfile" ] then if [ "$BBSUBPAGE" = "subpage" ] then # If "subpage" and not found, reset to <page>rep_footer footfile="$BBHOME/web/${TOPBBPAGENAME}rep__footer" if [ ! -r "$footfile" -o ! -s "$footfile" ] then #if that's not found then reset to bbrep_footer footfile="$BBHOME/web/bbrep_footer" fi else # If anything else and not found, reset to bbrep_footer footfile="$BBHOME/web/bbrep_footer" fi fi if [ -r "$footfile" -a -s "$footfile" ] then $SED -e "s/&BBRELDATE/$BBRELDATE/g" \ -e "s/&BBREL/$BBREL/g" \ -e "s/&BBREPWARN/$BBREPWARN/g" \ -e "s/&BBDATE/$BBDATE/g" \ -e "s!&BBSKIN!$BBSKIN!g" \ -e "s!&PAGENAME!$DISPPAGENAME!g" \ -e "s!&SUBPAGENAME!$DISPSUBPAGENAME!g" \ -e "s!&BBWEB!$BBWEB!g" \ -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s/&BBBACKGROUND/$BBBKG/g" $footfile else # Print proper error message, thanks to Mark Deiss <mcd@crexm.acs-gsg.com> echo "<HR size=4><BR> $footfile was not found, please create this file with your custom footer<BR><HR size=4> </BODY></HTML> " fi fi exit 0 ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������./bb/bb19c/web/mkbb2.sh�����������������������������������������������������������������������������0100755�0023421�0000764�00000022205�07616533074�012357� 0����������������������������������������������������������������������������������������������������ustar �bb������������������������������bb���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # mkbb2.sh # SCRIPT TO MAKE THE BIG BROTHER SUMMARY WEB PAGE # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi OLDIFS=$IFS BBDATE=`${DATE}` # SET THE DATE BBBKG=`${BBHOME}/web/mkbb.bkg 2>/dev/null` # SET THE BACKGROUND COLOR if [ -r "$BBHOME/web/bb2_header" -a -s "$BBHOME/web/bb2_header" ] then $SED -e "s/&BBRELDATE/$BBRELDATE/g" \ -e "s/&BBREL/$BBREL/g" \ -e "s/&BBDATE/$BBDATE/g" \ -e "s!&BBSKIN!$BBSKIN!g" \ -e "s!&BBWEB!$BBWEB!g" \ -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s/&BBBACKGROUND/$BBBKG/g" $BBHOME/web/bb2_header echo " <CENTER> " else # Print proper error message, thanks to Mark Deiss <mcd@crexm.acs-gsg.com> echo "<HTML><BODY> <HR size=4> <BR>$BBHOME/web/bb2_header is either missing or invalid, please create this file with your custom header<BR> <HR size=4> " fi echo " <A NAME=begindata> </A> <A NAME=\"hosts-blk\"> </A> " if test -s $BBTMP/BB then # # SMM - NEW FOR 1.08 # DISPLAY ONLY NON-GREEN COLUMNS # COLMNS=`${BBHOME}/web/mkbb.cols 0` # GET OUR COLUMN HEADINGS if test "$COLMNS" # ONLY DO THIS IF WE HAVE TO then echo "<TABLE SUMMARY=\"Error Block\" BORDER=0><TR><TD COLSPAN=2 ALIGN=CENTER></TD>" COLNUM='.' for col in $COLMNS do echo "<TD ALIGN=CENTER WIDTH=45>" if [ -f "$BBHOME/www/help/${col}.html" ] then echo "<A HREF=\"$BBWEB/help/${col}.html\">" else echo "<A HREF=\"$BBWEB/help/bb-help.html#${col}\">" fi echo "<FONT $MKBBCOLFONT><B>$col</B></FONT></A></TD>" COLNUM="${COLNUM}." done COLNUM=`$EXPR "$COLNUM" : ".*"` echo "</TR> <TR><TD></TD><TD></TD><TD COLSPAN=$COLNUM><HR></TD></TR>" # # FOR EACH UNIQUE HOST WE CARE ABOUT # EXCEPT THE SUMMARY FILES... # $GREP -v "summary" $BBTMP/BB | $SORT | while read line do IFS='/' set $line IFS=$OLDIFS shift `$EXPR $# - 1` # GET TO LAST ARG IFS='.' set $1 IFS=$OLDIFS case "$NAME" in $1 ) continue; # ALREADY DEALT WITH THIS ;; * ) NAME=$1 # IT'S A NEW ONE... ;; esac case "$FQDN" in TRUE ) IFS=',' set $NAME IFS=$OLDIFS FNAME=$1 shift for arg in $* do FNAME="$FNAME.$arg" shift done echo "<TR><TD COLSPAN=2 NOWRAP>" ;; * ) FNAME=$NAME echo "<TR><TD COLSPAN=2 ALIGN=CENTER NOWRAP>" esac echo "<A NAME=\"${FNAME}\">" echo "<FONT $MKBBROWFONT>" # # ADD HOOK FOR CUSTOM FILES HERE # # Thanks to Luke Moses <Luke_Moses@adc.com> who # made us remember to add .shtml/.php3 NOTESFILES=`echo ${BBNOTES}/${FNAME}* 2>/dev/null` if [ "$NOTESFILES" != "${BBNOTES}/${FNAME}*" ] then if test -f "${BBNOTES}/${FNAME}.html" then echo "<A HREF=$BBWEB/notes/${FNAME}.html>$FNAME</A></FONT></TD>" elif test -f "${BBNOTES}/${FNAME}.htm" then echo "<A HREF=$BBWEB/notes/${FNAME}.htm>$FNAME</A></FONT></TD>" elif test -d "${BBNOTES}/${FNAME}" then echo "<A HREF=$BBWEB/notes/$FNAME>$FNAME</A></FONT></TD>" elif test -f "${BBNOTES}/${FNAME}" then echo "<A HREF=$BBWEB/notes/$FNAME>$FNAME</A></FONT></TD>" elif test -f "${BBNOTES}/${FNAME}.shtml" then echo "<A HREF=$BBWEB/notes/${FNAME}.shtml>$FNAME</A></FONT></TD>" elif test -f "${BBNOTES}/${FNAME}.php3" then echo "<A HREF=$BBWEB/notes/${FNAME}.php3>$FNAME</A></FONT></TD>" else # just in case we had red.html but the hostname was really redhat # and no matching files were found. echo "$FNAME</FONT></TD>" fi else echo "$FNAME</FONT></TD>" fi # # FOR EACH OF THE THINGS WE MONITOR... # for col in $COLMNS do #FILE=`echo ${BBLOGS}/$NAME.$col* 2>/dev/null` #set $FILE set bogus ${BBLOGS}/$NAME.$col* >/dev/null 2>&1 shift FILE="$1" case "$FILE" in ${BBLOGS}/$NAME.$col ) ACKNAME="${BBACKS}/ack.${FNAME}.${col}" if [ -f "${ACKNAME}" ] then ACKED="TRUE" else ACKED="FALSE" fi set -f set `${HEAD} -1 ${BBLOGS}/$NAME.$col` >/dev/null 2>&1 set +f if [ "$ACKED" = "TRUE" ] && [ "$1" = "red" -o "$1" = "yellow" -o "$1" = "purple" ] then DOTCOLOR="$1-ack" ALTTAG=":acked" else DOTCOLOR="$1" ALTTAG="" fi case "$BBLOGSTATUS" in DYNAMIC ) echo "<TD ALIGN=CENTER> <A HREF=\"$CGIBINURL/bb-hostsvc.sh?HOSTSVC=${NAME}.${col}\"> <IMG SRC=\"$BBSKIN/$DOTCOLOR.gif\" ALT=\"${col}:$1$ALTAG\" HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A></TD>" ;; * ) if [ -d "$BBHOME/www/html" -a "$BBLOGSTATUS" = "STATIC" ] then echo "<TD ALIGN=CENTER> <A HREF=\"$BBWEB/html/${FNAME}.${col}.html\"> <IMG SRC=\"$BBSKIN/$DOTCOLOR.gif\" ALT=\"${col}:$1$ALTTAG\" HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A></TD>" else echo "<TD ALIGN=CENTER> <A HREF=\"$BBWEB/logs/$NAME.${col}\"> <IMG SRC=\"$BBSKIN/$DOTCOLOR.gif\" ALT=\"${col}:$1$ALTTAG\" HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A></TD>" fi ;; esac ;; * ) echo "<TD ALIGN=CENTER>-</TD>" ;; esac done echo "</TR>" done # # Ruediger Schuetz (Ruediger.Schuetz@Munich.Netsurf.DE) # Fixed bad table ending.... # echo "</TABLE>" fi # # NOW HANDLE SUMMARY INFO # cd ${BBLOGS} sumfiles=`$LS summary* 2> /dev/null| $SORT` cd ${BBHOME} echo "<A NAME=\"summaries-blk\">" if [ -n "$sumfiles" ] then echo "<BR><BR>" # echo "**** $sumfiles ****" for line in $sumfiles do if test "$BBSUMHDR" != "TRUE" then BBSUMHDR="TRUE" echo "<TABLE SUMMARY=\"Summary Block\" BORDER=0> <TR><TD><TABLE SUMMARY=\"Summary Lines\" BORDER=0>" fi set -f set `echo $line | $SED "s/\./ /g"` >/dev/null 2>&1 set +f ROW=$2 COL=$3 # # SMM 1.4 - 13 Jan 00 # IF THE SUMMARY FILE ISN'T IN summary.row.col # FORMAT THEN JUST IGNORE IT. # if test ! -f "${BBLOGS}/summary.${ROW}.${COL}" then continue; fi # # HANDLE THE ROW DISPLAY # if test "$ROW" != "$LASTROW" # WE HAVE A NEW ROW... then if test "$LASTROW" != "" then echo "</TR>" fi # # SMM: NEW IN 1.06a # SUPPORT FOR NOTES IN THE SUMMARY LINES # VIA: David Fordyce <fordyce@ite1.dseg.ti.com> # echo "<TR><TD> <FONT $MKBBROWFONT>" NOTESFILES=`echo ${BBNOTES}/${ROW}* 2>/dev/null` if [ "$NOTESFILES" != "${BBNOTES}/${ROW}*" ] then if test -f "${BBNOTES}/${ROW}.html" then echo "<A HREF=$BBWEB/notes/${ROW}.html>$ROW</A></FONT></TD>" elif test -f "${BBNOTES}/${ROW}.htm" then echo "<A HREF=$BBWEB/notes/${ROW}.htm>$ROW</A></FONT></TD>" elif test -d "${BBNOTES}/${ROW}" then echo "<A HREF=$BBWEB/notes/$ROW>$ROW</A></FONT></TD>" elif test -f "${BBNOTES}/${ROW}" then echo "<A HREF=$BBWEB/notes/$ROW>$ROW</A></FONT></TD>" elif test -f "${BBNOTES}/${FNAME}.shtml" then echo "<A HREF=$BBWEB/notes/${ROW}.shtml>$ROW</A></FONT></TD>" elif test -f "${BBNOTES}/${ROW}.php3" then echo "<A HREF=$BBWEB/notes/${ROW}.php3>$ROW</A></FONT></TD>" else # just in case we had red.html but the hostname was really redhat # and no matching files were found. echo "$ROW</FONT></TD>" fi else echo "$ROW</FONT></TD>" fi LASTROW="$ROW" fi # # HANDLE THE COLUMN DISPLAY # echo "<TD WIDTH=45 ALIGN=CENTER>$COL<BR>" # COLUMN TITLE set -f set `${CAT} ${BBLOGS}/summary.${ROW}.${COL}` >/dev/null 2>&1 set +f echo "<A HREF=$2><IMG SRC=\"$BBSKIN/$1.gif\" ALT=\"$1\" HEIGHT=\"$DOTHEIGHT\" WIDTH=\"$DOTWIDTH\" BORDER=0></A></TD>" done echo "</TR></TABLE> </TD></TR></TABLE>" fi else echo "<FONT SIZE=+2 FACE=\"Arial, Helvetica\"><BR><BR><I>All Monitored Systems OK</I></FONT><BR><BR>" fi # # EXECUTE LOCAL SCRIPTS FROM HERE... # SCRIPTS SHOULD LIVE IN $BBHOME/ext/mkbb DIRECTORY # BBMKBB2EXT CONTAINS THE FILENAMES TO EXECUTE # BBMKBB2EXT=`echo "$BBMKBB2EXT" | $SED 's!\.\./!\./!g'` for file in $BBMKBB2EXT do if [ -x "$BBHOME/ext/mkbb/$file" ] then $BBHOME/ext/mkbb/$file else echo "<BR><B>mkbb2.sh: $BBHOME/ext/mkbb/$file can't be executed</B><BR>" fi done echo " </CENTER> " # # SMM NEW IN 1.04 - STANDARD FOOTER # if [ -r "$BBHOME/web/bb2_footer" -a -s "$BBHOME/web/bb2_footer" ] then $SED -e "s/&BBRELDATE/$BBRELDATE/g" \ -e "s/&BBREL/$BBREL/g" \ -e "s/&BBDATE/$BBDATE/g" \ -e "s!&BBSKIN!$BBSKIN!g" \ -e "s!&BBWEB!$BBWEB!g" \ -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s/&BBBACKGROUND/$BBBKG/g" $BBHOME/web/bb2_footer else # Print proper error message, thanks to Mark Deiss <mcd@crexm.acs-gsg.com> echo "<HR size=4><BR> $BBHOME/web/bb2_footer was not found, please create this file with your custom footer<BR><HR size=4> </BODY></HTML>" fi exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������./bb/bb19c/web/mkbb.comp����������������������������������������������������������������������������0100755�0023421�0000764�00000002315�07616533074�012621� 0����������������������������������������������������������������������������������������������������ustar �bb������������������������������bb���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # mkbb.comp # SCRIPT TO DETERMINE COLUMNS TO DISPLAY IN COMPRESSED FORMAT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # WE NEED AT LEAST ON ARGUMENT.... # if [ "$#" = 1 ] then BBHOSTLINE="$1" else exit fi if [ ! "$BBTMP" ] # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi OLDIFS=$IFS $SED 1,${BBHOSTLINE}d ${BBHOSTS} > $BBTMP/mkbb.comp.$$ # Make read use this file exec < $BBTMP/mkbb.comp.$$ while read line do set bogus $line >/dev/null 2>&1 shift case "$1" in [0-9]* ) IFS='.' set -f set $2 >/dev/null 2>&1 set +f IFS=$OLDIFS ANAME=$1 if test "$FQDN" = "TRUE" then shift for arg in $* do ANAME="$ANAME,$arg" done fi echofiles=`echo ${BBLOGS}/${ANAME}.* 2>/dev/null` if [ "$echofiles" != "${BBLOGS}/${ANAME}.*" ] then BBARGS="$BBARGS ${ANAME}.*" # ADD A LINE fi ;; group | group-compress | group-only ) break ;; page | subpage ) break ;; esac done $RM -f $BBTMP/mkbb.comp.$$ if [ "$BBARGS" ] then echo $BBARGS fi exit 0 �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������./bb/bb19c/web/bb-histlog.sh.DIST�������������������������������������������������������������������0100755�0023421�0000764�00000005415�07616533074�014162� 0����������������������������������������������������������������������������������������������������ustar �bb������������������������������bb���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # BIG BROTHER WEB BASED HISTORY STATUS LOG DISPLAY SCRIPT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Bits also from Nick Metrowsky <nmetro@colorado.edu>, thanks Nick ! # # BBHOME IS THE ROOT DIRECTORY OF BIG BROTHER!!! # YOU MUST SET THE NEXT LINE TO WHERE BB LIVES BBHOME="&&BBHOME" export BBHOME if [ "$BBHOME" = "" -o ! -d "$BBHOME" ] then echo "Content-type: text/html <HTML><BODY> <H1>ERROR!<BR>BBHOME IS NOT SET IN bb-histlog.sh</H1></BODY> </HTML>" exit 1 fi . $BBHOME/etc/bbdef.sh # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then HISTFILE="HISTFILE_NOT_DEFINED" set -f QUERY_STRING=`echo "$QUERY_STRING" | $SED 's/[^A-Za-z0-9_,.&=:%-]//g' | $SED 's/[&=][.][.]*//g' | $SED 's/\.\.//g'` set `echo "$QUERY_STRING" | $SED 's/[&=]/\ /g' | $SED 's/%2[Cc]/,/g'` >/dev/null 2>&1 while [ "$#" -ne 0 ] do case $1 in TIMEBUF ) TIMEBUF=`echo "$2" | $SED 's/\.\.//g' | $SED 's/[^A-Za-z0-9_:-]//g'` shiftnum=2 ;; HOST ) HOST=`echo "$2" | $SED 's/\.\.//g' | $SED 's/[^A-Za-z0-9._-]//g'` shiftnum=2 ;; SERVICE ) SERVICE=`echo "$2" | $SED 's/[^A-Za-z0-9_-]//g'` shiftnum=2 ;; *) shiftnum=1 ;; esac if [ "$#" -lt "$shiftnum" ] then shift else shift $shiftnum fi done if [ "$HOST" = "" -o "$SERVICE" = "" -o "$TIMEBUF" = "" ] then echo "Content-type: text/html <HTML><BODY> <H1>ERROR!<BR>bb-histlog.sh called with invalid arguments</H1>" echo "</BODY></HTML>" exit 1 fi fi # Take the basename only !!! # Make sure nobody's playing games OLDIFS=$IFS IFS='/' set $HOST HOST=$1 set $SERVICE SERVICE=$1 IFS=$OLDIFS HOSTDOTS=$HOST HOSTCOMMAS=`echo "$HOST" | $SED 's/\./,/g'` HOST=`echo "$HOST" | $SED 's/\./_/g'` FNAME="$TIMEBUF" LOGTIME=`echo "$TIMEBUF" | $SED 's/_/ /g'` export LOGTIME FILENM=${HOSTCOMMAS}.${SERVICE} TMPFILE=$BBREP/$FILENM $RM -f $TMPFILE >/dev/null 2>&1 # If we can't touch the file, something's fishy $TOUCH $TMPFILE >/dev/null 2>&1 if [ ! -f $TMPFILE -o ! -w $TMPFILE ] then echo "Content-type: text/html <HTML><BODY> <H1><BLINK><BR>bb-histlog.sh lacks permissions to write into the Report directory (BBHOME/www/rep)<BLINK></H1>" echo "</BODY></HTML>" exit 1 fi $RM -f $TMPFILE if [ "$BBHISTLOGS/$HOST/$SERVICE" = "$BBHISTLOGS//" -o ! -d "$BBHISTLOGS/$HOST/$SERVICE" -o ! -r "$BBHISTLOGS/$HOST/$SERVICE/$FNAME" ] then echo "red `date` <BR><CENTER>Historical status log not available</CENTER>" > $TMPFILE else $CP -p "$BBHISTLOGS/$HOST/$SERVICE/$FNAME" $TMPFILE fi cd $BBREP echo "Content-type: text/html " $BBHOME/bin/dumphostsvc $FILENM histlog $RM -f $TMPFILE exit 0 ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������./bb/bb19c/web/hostsvc_footer�����������������������������������������������������������������������0100644�0023421�0000764�00000003566�07616533074�014026� 0����������������������������������������������������������������������������������������������������ustar �bb������������������������������bb���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!-- Footer for host status pages, you can find it in $BBHOME/web/hostsvc_footer --> <CENTER><BR><BR><HR WIDTH="80%"> <TABLE SUMMARY="Footer" WIDTH="80%" BORDER=0><TR> <TD ALIGN="center" WIDTH="13%"> <FONT FACE="Arial, Helvetica" COLOR="silver"> <A HREF="&BBWEB/help/bb-help.html#green"> <IMG SRC="&BBSKIN/green.gif" WIDTH="16" HEIGHT="16" BORDER="0" ALIGN="middle" ALT="green"></A>ok</FONT></TD> <TD ALIGN="center" WIDTH="13%"> <FONT FACE="Arial, Helvetica" COLOR="silver"> <A HREF="&BBWEB/help/bb-help.html#yellow"> <IMG SRC="&BBSKIN/yellow.gif" WIDTH="16" HEIGHT="16" BORDER="0" ALIGN="middle" ALT="yellow"></A>attention</FONT></TD> <TD ALIGN="center" WIDTH="13%"> <FONT FACE="Arial, Helvetica" COLOR="silver"> <A HREF="&BBWEB/help/bb-help.html#red"> <IMG SRC="&BBSKIN/red.gif" WIDTH="16" HEIGHT="16" BORDER="0" ALIGN="middle" ALT="red"></A>trouble</FONT></TD> <TD ALIGN="center" WIDTH="13%"> <FONT FACE="Arial, Helvetica" COLOR="silver"> <A HREF="&BBWEB/help/bb-help.html#purple" > <IMG SRC="&BBSKIN/purple.gif" WIDTH="16" HEIGHT="16" BORDER="0" ALIGN="middle" ALT="purple"></A>no report</FONT></TD> <TD ALIGN="center" WIDTH="13%"> <FONT FACE="Arial, Helvetica" COLOR="silver"> <A HREF="&BBWEB/help/bb-help.html#clear"> <IMG SRC="&BBSKIN/clear.gif" WIDTH="16" HEIGHT="16" BORDER="0" ALIGN="middle" ALT="clear"></A>unavailable</FONT></TD> <TD ALIGN="center" WIDTH="13%"> <FONT FACE="Arial, Helvetica" COLOR="silver"> <A HREF="&BBWEB/help/bb-help.html#blue"> <IMG SRC="&BBSKIN/blue.gif" WIDTH="16" HEIGHT="16" BORDER="0" ALIGN="middle" ALT="blue"></A>offline</FONT></TD> </TR></TABLE> <HR WIDTH="80%"> </CENTER> <BR><BR> <CENTER> <H6><I> <!-- The license agreement requires a link back to the BB main site --> <FONT FACE="Arial, Helvetica" COLOR="silver"> <A HREF="http://bb4.com"> <IMG SRC="&BBSKIN/bblogo.gif" BORDER=0 ALIGN=RIGHT></A><BR> </FONT></I></H6></CENTER> </BODY></HTML> ������������������������������������������������������������������������������������������������������������������������������������������./bb/bb19c/web/mkbb.page����������������������������������������������������������������������������0100755�0023421�0000764�00000006515�07616533074�012605� 0����������������������������������������������������������������������������������������������������ustar �bb������������������������������bb���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # mkbb.page # SUBPAGE SCRIPT # RETURNS BACKGROUND COLOR AND CREATES A TEMPORARY PAGE HOST FILE # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # WE NEED AT LEAST ON ARGUMENT.... # if [ "$#" -eq 1 ] then BBHOSTLINE="$1" else exit fi if [ ! "$BBTMP" ] # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi OLDIFS=$IFS TMPHOSTS=$BBTMP/bb-hosts.${BBPAGENAME}.${PARPID} $RM -f $TMPHOSTS # GET RID OF THIS... $TOUCH $TMPHOSTS if [ "$BBREP" = "$BBTMP" ] then $RM -f ${REPDATA}.$$ fi $SED 1,${BBHOSTLINE}d ${BBHOSTS} > $BBTMP/mkbb.page.1.$$ LINETAGS="" BBFILES="" GROUPONLY="NONE" # WE DONT RESTRICT COLUMNS exec < $BBTMP/mkbb.page.1.$$ while read line do linestate="read" LINETAGS="${LINETAGS}." set bogus $line >/dev/null 2>&1 shift case "$1" in [0-9]* ) # SMM SANITY CHECK echo $line >> $TMPHOSTS IFS='.' set -f set $2 >/dev/null 2>&1 set +f IFS=$OLDIFS ANAME=$1 if test "$FQDN" = "TRUE" then shift for arg in $* do ANAME="$ANAME,$arg" done fi # # HANDLE COLORS IN HERE # # WE SHOULD CHECK ONLY IN SPECIFIC LOGS # WHEN group-only IS SPECIFIED case "$GROUPONLY" in NONE ) case "$BBTMP" in $BBREP ) $GREP "^${ANAME}\.[^ ]*[ ]" $REPDATA >>${REPDATA}.$$ ;; * ) BBFILES="${BBFILES} ${ANAME}.*" ;; esac ;; * ) # BUILD THE LIST OF LOG FILES FOR THAT HOST hostlogs="" for group in $GROUPONLY do if [ -f "$BBLOGS/${ANAME}.$group" ] then case "$BBTMP" in $BBREP ) $GREP "^${ANAME}.${group}[ ]" $REPDATA >>${REPDATA}.$$ ;; * ) BBFILES="$BBFILES ${ANAME}.$group" ;; esac fi done ;; esac ;; group-compress | group-only | group ) echo $line >> $TMPHOSTS case "$1" in group-only ) case "$#" in 1 | 0 ) GROUPONLY="NONE" ;; * ) IFS='|' set $2 > /dev/null IFS=$OLDIFS GROUPONLY="$*" ;; esac ;; * ) GROUPONLY="NONE" ;; esac ;; subpage ) if [ "$PAGETYPE" = "subpage" ] then break fi echo $line >> $TMPHOSTS ;; page ) # Stop here, a new page begins break ;; esac linestate="" done # If we're at end of file, insert a tag so the last line is not repeated if [ "$linestate" != "read" ] then LINETAGS="${LINETAGS}." fi BBBKG="green" COLORS="red purple yellow" if [ "$BBFILES" != "" -o "$BBREP" = "$BBTMP" ] then cd $BBLOGS # SMM BUG... IF THERE ARE NO LOGFILES FOR A GIVEN LINE # IN THE bb-hosts FILE, THEN THE FILENAME IS JUST LISTED # AS somehost,bb4,com.* - AND THE '*' SCREWS UP THE grep BBFILES=`$LS $BBFILES 2>/dev/null` # SMM TEST for COLOR in $COLORS do case "$BBREP" in $BBTMP ) $GREP "${COLOR}[ ]" ${REPDATA}.$$ >/dev/null 2>&1 ;; * ) $GREP "^${COLOR} " $BBFILES >/dev/null 2>&1 ;; esac case "$?" in 0 ) BBBKG="$COLOR" # SET THE COLOR break ;; esac done fi # # MAKE SURE THE LAST GROUP GETS HANDLED OK... # if test "$BBBKG" then echo $BBBKG fi # Reset the file position echo "$LINETAGS" > $BBTMP/BBSKIP2.${BBPAGENAME}.${PARPID} $RM -f $BBTMP/mkbb.page.1.$$ if [ "$BBREP" = "$BBTMP" ] then $RM -f ${REPDATA}.$$ fi exit 0 # LEAVE, NOW! �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������./bb/bb19c/web/hostsvc_header�����������������������������������������������������������������������0100644�0023421�0000764�00000004105�07616533074�013746� 0����������������������������������������������������������������������������������������������������ustar �bb������������������������������bb���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!--BASE HREF="&BBWEB"--> <HTML> <HEAD> <!-- Big Brother - &BBREL (&BBRELDATE) (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. From: http://bb4.com/ Contact: info@bb4.com --> <TITLE>&BBCOLOR : Big Brother - &BBSVC status for &BBHOST (&BBIP) @ &BBDATE
Get Big Brother
Contact Condensed view Report Help
Last Update
&BBDATE

./bb/bb19c/web/hist_header0100644002342100007640000000400307616533074013221 0ustar bbbb Big Brother Statistical Status: &BBHOST (&BBIP) - &BBSVC
Get Big Brother
Contact Condensed view Report Help
history
&BBDATE

./bb/bb19c/web/histlog_header0100644002342100007640000000424307616533074013731 0ustar bbbb Big Brother Historical Status: &BBHOST - &BBSVC @ &BBDATE
Get Big Brother
Contact Condensed view Report Help
*** THIS IS A HISTORICAL LOG *** historical log
&LOGTIME

./bb/bb19c/web/hist_footer0100644002342100007640000000357107616533074013300 0ustar bbbb



greenok yellowattention redtrouble purpleno report clearunavailable blueoffline



BB Logo
./bb/bb19c/web/histlog_footer0100644002342100007640000000357207616533074014003 0ustar bbbb



greenok yellowattention redtrouble purpleno report clearunavailable blueoffline




./bb/bb19c/web/bb-ack.sh.DIST0100755002342100007640000001446207616533074013251 0ustar bbbb#!/bin/sh # # BIG BROTHER WEB BASED MANUAL NOTIFICATION ACKNOWLEDGEMENT SCRIPT # Sean MacGuire # Version 1.9c # May 15th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # ************* NOTICE!!! ************ # BBHOME MUST BE SET CORRECTLY FOR THIS TO WORK BBHOME="&&BBHOME" export BBHOME if [ "$BBHOME" = "" -o ! -d "$BBHOME" ] then echo "Content-type: text/html

ERROR!
BBHOME IS INVALID IN bb-ack.sh

" exit 1 fi # Save the arguments for later use ARG1="$1" ARG2="$2" ARG3="$3" . $BBHOME/etc/bbdef.sh # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then set -f QUERY_STRING=`echo "$QUERY_STRING" | $SED 's/[^A-Za-z0-9_,+.&=:%-]//g' | $SED 's/[&=][.][.]*//g' | $SED 's/\.\.//g'` set `echo "$QUERY_STRING" | $SED "s/[&=]/\ /g"` >/dev/null 2>&1 while [ "$#" -ne 0 ] do case $1 in ACTION ) ACTION=`echo "$2" | $SED 's/[^A-Za-z]//g'` shiftnum=2 ;; NUMBER ) NUMBER=`echo "$2" | $SED 's/[^0-9]//g'` if test "$NUMBER" != "DELAY" then shiftnum=2 else NUMBER="" shiftnum=1 fi ;; DELAY ) DELAY=`echo "$2" | $SED 's/[^0-9]//g'` if test "$DELAY" = "" then DELAY=60 # DUMB DEFAULT fi shiftnum=1 ;; MESSAGE ) # MESSAGE MIGHT BE NULL case "$2" in ACTION | SUB | NUMBER | DELAY ) MESSAGE="" shiftnum=1 ;; * ) # I don't think the 1st SED is even required anymore MESSAGE=`echo "$2" | $SED 's/[${}\\]//g' | $SED 's/+/ /g'` shiftnum=2 ;; esac ;; *) shiftnum=1 ;; esac if [ "$#" -lt "$shiftnum" ] then shift else shift $shiftnum fi done if [ "$ACTION" = "" ] then echo "Content-type: text/html

ERROR!
bb-ack.sh called with invalid arguments

" echo "" exit 1 fi if [ "$ACTION" = "Ack" -o "$ACTION" = "Page" ] then echo "Content-type: text/html Big Brother - Contact
\"Big
\"View\" \"Help\"
contact
\"Ack\"




" elif [ "$ACTION" = WapAck ] then # Change from 1 echo to 3 has it seems to fix Douwe.Dijkstra@I-Pay.com # WAP problem ... Don't know why, and he doesn't know why either ... echo "Content-type: text/vnd.wap.wml" echo " " echo "

Overall
Summary

" fi else if [ "$#" -lt 2 -o "$#" -gt 3 ] then echo "usage: bb-ack.sh [message]" exit 1 fi NUMBER=`echo "$ARG1" | $SED 's/[^0-9]//g'` DELAY=`echo "$ARG2" | $SED 's/[^0-9]//g'` MESSAGE="$ARG3" ACTION="Ack" fi if [ "$ACTION" = "Ack" -o "$ACTION" = "WapAck" ] then if [ "$NUMBER" != "" ] then CHKNUM=`$EXPR "$NUMBER" + 0 2>/dev/null` else CHKNUM="" fi if [ "$NUMBER" != "$CHKNUM" -o "$CHKNUM" = "" ] then if [ "$ACTION" = "WapAck" ] then echo "Invalid
security code

Try again." echo "

" else # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then echo "Invalid security code

Try again." echo "" else echo "usage: bb-ack.sh [message]" fi fi exit 1 fi if [ "$DELAY" != "" ] then CHKDELAY=`$EXPR "$DELAY" + 0 2>/dev/null` else CHKDELAY="" fi if [ "$DELAY" != "$CHKDELAY" -o "$CHKDELAY" = "" ] then if [ "$ACTION" = "WapAck" ] then echo "Invalid delay

Try again." echo "

" else # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then echo "Invalid delay
" echo "" else echo "usage: bb-ack.sh [message]" fi fi exit 1 fi if [ "$QUERY_STRING" != "" ] then if [ "$ACTION" = "WapAck" ] then BREAK="
" else BREAK="
" fi else BREAK="" fi # ack_event must go to all BBPAGERS... RAC # hack because of the BBDISP/BBDISPLAYS BBPAGE/BBPAGERS crap in bb.c OLDBBDISPLAYS=$BBDISPLAYS BBDISPLAYS=$BBPAGERS $BB $BBPAGE "ack ack_event ${NUMBER} ${DELAY} ${MESSAGE}" BBDISPLAYS=$OLDBBDISPLAYS echo "Acknowledgement Sent. ${BREAK}${BREAK}Notification event ${NUMBER} ${BREAK} ${BREAK}${DELAY} minutes delay" elif [ "$ACTION" = "Page" ] then if test "$MESSAGE" = "" then echo "Empty message.

No page sent" else # Don't change the notify-admin.pagehelp name or suffer the consequences ! # ack_event must go to all BBPAGERS... RAC # hack because of the BBDISP/BBDISPLAYS BBPAGE/BBPAGERS crap in bb.c OLDBBDISPLAYS=$BBDISPLAYS BBDISPLAYS=$BBPAGERS $BB $BBPAGE "page notify-admin.pagehelp ${MESSAGE} User has requested your help. Call ${MESSAGE}" BBDISPLAYS=$OLDBBDISPLAYS echo "Page sent.

You will be contacted shortly!" fi else if [ "$QUERY_STRING" != "" ] then echo "Invalid ACTION type" fi fi if [ "$QUERY_STRING" != "" ] then if [ "$ACTION" = "WapAck" ] then echo "

" else echo "" fi fi exit 0 ./bb/bb19c/web/bb_header0100644002342100007640000000404307616533074012641 0ustar bbbb &BBBACKGROUND : Big Brother - Status @ &BBDATE
Get Big Brother
Contact Condensed view Report Help
Last Update
&BBDATE

./bb/bb19c/web/bb2_header0100644002342100007640000000405507616533074012726 0ustar bbbb &BBBACKGROUND : Big Brother - Status @ &BBDATE
Get Big Brother
Contact Full view Report Help
Last Update
&BBDATE

./bb/bb19c/web/bb_footer0100644002342100007640000000356507616533074012717 0ustar bbbb



greenok yellowattention redtrouble purpleno report clearunavailable blueoffline



BB Logo
./bb/bb19c/web/bb2_footer0100644002342100007640000000356607616533074013002 0ustar bbbb



greenok yellowattention redtrouble purpleno report clearunavailable blueoffline



BB Logo
./bb/bb19c/web/mkbb.bkg0100755002342100007640000000434207616533074012430 0ustar bbbb#!/bin/sh # mkbb.bkg # SHELL SCRIPT TO DETERMINE THE BACKGROUND COLOR OF THE BIG BROTHER PAGE # BIG BROTHER CLIENT PROGRAM # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi $RM -f $BBTMP/BB.$$ # # NOW ESTABLISH THE BACKGROUND COLOR... # IF THERE'S ANY EMERGENCY FILES, THEN WE'RE RED # THEN IF YELLOW # THEN IF PURPLE # BKG="green" if [ "$BBREP" != "$BBTMP" ] then thisdir=`pwd` cd $BBLOGS $LS * >/dev/null 2>$BBTMP/mkbb.bkg.$$ for COLOR in yellow purple red do rcode=1 case "$SUMMARY_SET_BKG" in TRUE ) # It now check for ^colorX where X is either a space or tab # Thanks to Thomas Eckert # If there's too many files (argg too long error), then split the work if [ -s $BBTMP/mkbb.bkg.$$ ] then set -f for expr in "[a-i]*" "[j-r]*" "[s-z]*" "[A-I]*" "[J-R]*" "[S-Z]*" "[0-9]*" "[^A-Za-z0-9]*" do set +f $GREP -l "^${COLOR}[ ]" $expr >> $BBTMP/BB.$$ 2>/dev/null if [ "$?" -eq 0 ] then rcode="$?" fi done set +f else $GREP -l "^${COLOR}[ ]" * >> $BBTMP/BB.$$ rcode="$?" fi ;; * ) # If there's too many files (argg too long error), then split the work if [ -s $BBTMP/mkbb.bkg.$$ ] then set -f for expr in "[a-i]*" "[j-r]*" "[s-z]*" "[A-I]*" "[J-R]*" "[S-Z]*" "[0-9]*" "[^A-Za-z0-9]*" do set +f $GREP -l "^${COLOR}[ ]" $expr | $GREP -v "summary." >> $BBTMP/BB.$$ 2>/dev/null if [ "$?" -eq 0 ] then rcode="$?" fi done set +f rcode="$?" else $GREP -l "^${COLOR}[ ]" * | $GREP -v "summary." >> $BBTMP/BB.$$ rcode="$?" fi ;; esac case "$rcode" in 0 ) BKG="$COLOR" # SET THE COLOR ;; esac done cd $thisdir echo $BKG echo $BKG > $BBLOGS/.bkg # SAVE THE COLOR HERE $UNIQ $BBTMP/BB.$$ > $BBTMP/BB $RM -f $BBTMP/BB.$$ $BBTMP/mkbb.bkg.$$ else for COLOR in yellow red do $GREP "${COLOR}[ ]" $REPDATA > /dev/null case "$?" in 0 ) BKG="$COLOR" # SET THE COLOR ;; esac done # PRINT OUT THE COLOR echo $BKG fi ./bb/bb19c/web/bb-hostsvc.sh.DIST0100755002342100007640000000472707616533074014207 0ustar bbbb#!/bin/sh # # BIG BROTHER WEB BASED STATUS LOG DISPLAY SCRIPT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # BBHOME IS THE ROOT DIRECTORY OF BIG BROTHER!!! # YOU MUST SET THE NEXT LINE TO WHERE BB LIVES BBHOME="&&BBHOME" export BBHOME if [ "$BBHOME" = "" -o ! -d "$BBHOME" ] then echo "Content-type: text/html

ERROR!
BBHOME IS NOT SET IN bb-hostsvc.sh

" exit 1 fi . $BBHOME/etc/bbdef.sh # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then HISTFILE="STATUS_NOT_DEFINED" set -f QUERY_STRING=`echo "$QUERY_STRING" | $SED 's/[^A-Za-z0-9_,.&=:%-]//g' | $SED 's/[&=][.][.]*//g' | $SED 's/\.\.//g'` set `echo "$QUERY_STRING" | $SED 's/[&=]/\ /g' | $SED 's/%2[Cc]/,/g'` >/dev/null 2>&1 while [ "$#" -ne 0 ] do case $1 in HOSTSVC ) HOSTSVC=`echo "$2" | $SED 's/[^A-Za-z0-9_,.-]//g'` shiftnum=2 ;; *) shiftnum=1 ;; esac if [ "$#" -lt "$shiftnum" ] then shift else shift $shiftnum fi done if [ "$HOSTSVC" = "" ] then echo "Content-type: text/html

ERROR!
bb-hostsvc.sh called with invalid arguments

" echo "" exit 1 fi # Thanks to Eric Hines # and Safety # Make sure that no one tries to peek at other files # except those in logs/ OLDIFS=$IFS IFS='/' set $HOSTSVC IFS=$OLDIFS lastarg="\${$#}" HOSTSVC=`eval "echo $lastarg"` if [ "$HOSTSVC" = "" -o ! -r "$BBLOGS/$HOSTSVC" ] then echo "Content-type: text/html

ERROR!
bb-hostsvc.sh called with invalid arguments

" echo "" exit 1 fi # Extract host name and service OLDIFS=$IFS IFS='.' set $HOSTSVC HOST=$1 SERVICE=$2 IFS=$OLDIFS # Convert hostname (xxx,yyy,com) to (xxx.yyy.com) HOSTDOTS=`echo $HOST | $SED 's/,/\./g'` # get the color of the status from the status file set `$CAT "$BBLOGS/$HOSTSVC" | $HEAD -1` >/dev/null 2>&1 BKG="$1" echo "Content-type: text/html " cd $BBLOGS $BBHOME/bin/dumphostsvc $HOSTSVC hostsvc exit 0 else echo "Content-type: text/html

ERROR!
bb-hostsvc.sh called with invalid arguments

" echo "" exit 1 fi ./bb/bb19c/web/bb-rep.sh.DIST0100755002342100007640000001110507616533074013270 0ustar bbbb#!/bin/sh # bb-rep.sh # SHELL SCRIPT TO MAKE A REPORT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # BBHOME IS THE ROOT DIRECTORY OF BIG BROTHER!!! # YOU MUST SET THE NEXT LINE TO WHERE BB LIVES BBHOME="&&BBHOME" export BBHOME if [ "$BBHOME" = "" -o ! -d "$BBHOME" ] then echo "Content-type: text/html

ERROR!
BBHOME IS NOT SET IN bb-rep.sh

" exit 1 fi . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS if [ ! -w "$BBREP" ] then echo "Content-type: text/html

ERROR!
Your web server lacks the permissions to write into the BBREP directory
Please change the group id of the BBREP directory to your web server's group id.
Also make sure that the directory is group writable.

" exit 1 fi REPDATA="/tmp/REP.$$"; export REPDATA # WHERE ALL STATS ARE WRITTEN... # Is someone playing funny with us ? $RM -f $REPDATA $TOUCH $REPDATA if [ ! -f $REPDATA -o ! -w $REPDATA ] then echo "Content-type: text/html

ERROR!
bb-rep.sh is being tampered with

" echo "" exit 1 fi $RM -f $REPDATA # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then set -f QUERY_STRING=`echo "$QUERY_STRING" | $SED 's/[^A-Za-z0-9&=%-]//g' | $SED 's/[&=][.][.]*//g' | $SED 's/\.\.//g'` set `echo "$QUERY_STRING" | $SED "s/[&=]/\ /g"` >/dev/null 2>&1 while [ "$#" -ne 0 ] do case $1 in start-mon) STMON="$2" STMON=`echo "$STMON" | $SED 's/[^a-zA-Z]//g'` ;; start-day) STDAY="$2" STDAY=`echo "$STDAY" | $SED 's/[^0-9]//g'` ;; start-yr) STYR="$2" STYR=`echo "$STYR" | $SED 's/[^0-9]//g'` ;; end-mon) ENDMON="$2" ENDMON=`echo "$ENDMON" | $SED 's/[^a-zA-Z]//g'` ;; end-day) ENDDAY="$2" ENDDAY=`echo "$ENDDAY" | $SED 's/[^0-9]//g'` ;; end-yr) ENDYR="$2" ENDYR=`echo "$ENDYR" | $SED 's/[^0-9]//g'` ;; style) STYLE="$2"; STYLE=`echo "$STYLE" | $SED 's/[^a-zA-Z0-9 ]//g'` export STYLE ;; esac shift; done if [ "$STMON" = "" -o "$STDAY" = "" -o "$STYR" = "" -o "$ENDMON" = "" -o "$ENDDAY" = "" -o "$ENDYR" = "" -o "$STYLE" = "" ] then echo "Content-type: text/html

ERROR!
bb-rep.sh called with invalid arguments

" echo "" exit 1 fi else echo "Content-type: text/html

ERROR!
bb-rep.sh called with invalid arguments

" echo "" exit 1 fi START="$STMON $STDAY $STYR" END="$ENDMON $ENDDAY $ENDYR" NOW=`$BBHOME/bin/touchtime -e` THESTART=`$BBHOME/bin/touchtime -x "$START"` THEEND=`$BBHOME/bin/touchtime -x "$END"` if test "$THEEND" -gt "$NOW" then END=`date "+%b %d %Y"` THEEND=`$BBHOME/bin/touchtime -x "$END"` fi if test "$THESTART" -gt "$THEEND" then echo "START: $THESTART END: $THEEND" START="$END" fi if [ "$START" = "$END" ] then RANGE="$START" else RANGE="$START - $END" fi export RANGE echo "Content-type: multipart/mixed;boundary=bbrep$$ --bbrep$$ Content-type: text/html " # RESET THE tmp DIRECTORY to www/rep # THIS WAY WE CAN RUN mkbb.sh FOR BOTH STATUS AND REPORTING BBTMP=$BBREP export BBTMP bkgcolor="blue" ORIGBBWEB=$BBWEB #BBWEB=`echo $BBWEB | $SED 's/\//\\\\\//g'` #export BBWEB $CAT $BBHOME/web/bbrep_header | $SED "s/&BBRELDATE/$BBRELDATE/g" | $SED "s/&BBREL/$BBREL/g" |\ $SED "s/&BBDATE/$RANGE/g" | $SED "s/&BBBACKGROUND/$bkgcolor/g" |\ $SED "s!&BBWEB!$BBWEB!g" | $SED "s!&CGIBINURL!$CGIBINURL!g" |\ $SED "s!&CGIBINURL!$CGIBINURL!g" |\ $SED "s!&BBSKIN!$BBSKIN!g" echo "




Generating report for the period: $RANGE ($STYLE)

" # # NOW CLEAN UP ALL THE LEFTOVERS LATER THAN "now" # # echo "Tidying up...

"

$BBHOME/bin/touchtime $BBREP/.later

$FIND $BBREP/. -type f ! -newer ${BBREP}/.later -exec $RM -f {} \;

#
# GATHER THE STATS
#
echo "

Gathering statistics...

"
$BBHOME/web/bb-report.sh "$START" "$END"

#
# GENERATE THE REPORT...
#
echo "

Generating report...

" $RM -f $BBREP/rep-$$.html $BBHOME/web/mkbb.sh > $BBREP/rep-$$.html $RM -f $REPDATA echo "Done...

" # # NOW GO OFF THERE... # echo "--bbrep$$ Content-type: text/html --bbrep$$--" ./bb/bb19c/web/mkrep.bkg0100755002342100007640000000203507616533074012630 0ustar bbbb#!/bin/sh # mkrep.bkg # SHELL SCRIPT TO DETERMINE THE BACKGROUND COLOR A # BIG BROTHER REPORT PAGE # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # NOW ESTABLISH THE BACKGROUND COLOR... # IF THERE'S ANY EMERGENCY FILES, THEN WE'RE RED # THEN IF YELLOW # THEN IF PURPLE # BKG="green" for COLOR in yellow red do $GREP "${COLOR}[ ]" $REPDATA > /dev/null if test "$?" = "0" then BKG="$COLOR" # SET THE COLOR fi done # IF NO RED/YELLOW THEN CHECK IF ANY GREEN # IF NO GREEN THEN IT'S CLEAR #if [ "$BKG" = "green" ] #then # $GREP "green[ ]" $REPDATA > /dev/null # if test "$?" -ne 0 # then # # DOUBLE CHECK THAT AT LEAST THERE'S ONE CLEAR # # REPDATA MAY HAVE NO ENTRIES AT ALL ... # $GREP "clear[ ]" $REPDATA > /dev/null # if test "$?" -eq 0 # then # BKG="clear" # SET THE COLOR # fi # fi #fi echo $BKG ./bb/bb19c/web/mkrep.page0100755002342100007640000000525107616533074013004 0ustar bbbb#!/bin/sh # mkrep.page # SUBPAGE SCRIPT FOR REPORTS # RETURNS BACKGROUND COLOR AND CREATES A TEMPORARY PAGE HOST FILE # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # WE NEED AT LEAST ON ARGUMENT.... # if test "$#" = 1 then BBHOSTLINE="$1" else exit fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi $RM -f $BBREP/bb-hosts # GET RID OF THIS... COLORS="yellow red" BBBKG="green" GROUPONLY="" # WE DONT RESTRICT COLUMNS cat $BBHOSTS | $SED 1,${BBHOSTLINE}d > $BBREP/mkrep.page.1.$$ LINETAGS="" # Use this file as input exec < $BBREP/mkrep.page.1.$$ while read line do LINETAGS="${LINETAGS}." set -f set bogus $line set +f shift if [ "$#" -gt 0 -a "$1" != "#" ] then case $1 in page* ) break ;; [0-9]* ) # IP Address entry must have at least a host name also if [ "$#" -ge 2 ] then # SMM SANITY CHECK echo $line >> $BBREP/bb-hosts OLDIFS=$IFS IFS='.' set $2 >/dev/null 2>&1 IFS=$OLDIFS MACHINE=$1 if test "$FQDN" = "TRUE" then shift for arg in $* do MACHINE="$MACHINE,$arg" done else MACHINE=$1 fi # # HANDLE COLORS IN HERE # for COLOR in $COLORS do # WE SHOULD CHECK ONLY IN SPECIFIC LOGS # WHEN group-only IS SPECIFIED if [ "$GROUPONLY" = "" ] then # FIND ALL LINES WITH THE HOST + CURRENT COLOR $GREP "${MACHINE}\..* ${COLOR} " $REPDATA > /dev/null RC=$? else # BUILD THE LIST OF LOG FILES FOR THAT HOST hostlogs="" for group in $GROUPONLY do $GREP "${MACHINE}\.$group ${COLOR} " $REPDATA > /dev/null RC=$? if [ "$RC" -eq 0 ] then break fi done fi if test "$RC" = "0" then BBBKG="$COLOR" # SET THE COLOR case "$BBBKG" in yellow ) COLORS="red" ;; red ) COLORS="" ;; esac fi done fi ;; group | group-compress | group-only ) # SAVE IT IF IT'S A GROUP LINE... echo $line >> $BBREP/bb-hosts if [ "$1" = "group-only" ] then set $line > /dev/null if [ "$#" -lt 2 ] then GROUPONLY="" else OLDIFS=$IFS IFS='|' set $2 > /dev/null IFS=$OLDIFS GROUPONLY="$*" fi else GROUPONLY="" fi ;; esac fi done $RM -f $BBREP/mkrep.page.1.$$ if test "$BBBKG" then echo $BBBKG fi echo "$LINETAGS" > $BBREP/BBREPSKIP2 exit 0 ./bb/bb19c/web/bb-replog.sh.DIST0100755002342100007640000003721107616533074014000 0ustar bbbb#!/bin/sh # # BIG BROTHER WEB BASED REPORT DISPLAY SCRIPT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # BBHOME IS THE ROOT DIRECTORY OF BIG BROTHER!!! # YOU MUST SET THE NEXT LINE TO WHERE BB LIVES BBHOME="&&BBHOME" export BBHOME if [ "$BBHOME" = "" -o ! -d "$BBHOME" ] then echo "Content-type: text/html

ERROR!
BBHOME IS NOT SET IN bb-replog.sh

" exit 1 fi . $BBHOME/etc/bbdef.sh # Is someone playing games with us... OFFFILE=/tmp/OFF.$$ NONGRFILE=/tmp/NONGR.$$ TMPFILE="/tmp/BBREPLOG.$$" $RM -f $OFFFILE $RM -f $NONGRFILE $RM -f $TMPFILE $TOUCH $OFFFILE $TOUCH $NONGRFILE $TOUCH $TMPFILE if [ ! -f $OFFFILE -o ! -f $NONGRFILE -o ! -f $TMPFILE -o ! -w $OFFFILE -o ! -w $NONGRFILE -o ! -w $TMPFILE ] then echo "Content-type: text/html

ERROR!
bb-replog.sh is being tampered with

" exit 1 fi $RM -f $OFFFILE $RM -f $NONGRFILE $RM -f $TMPFILE # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then HOSTSVC="HOSTFILE_NOT_DEFINED" RED=0 YEL=0 GRE=0 PUR=0 CLE=0 BLU=0 REDCNT=0 YELCNT=0 GRECNT=0 PURCNT=0 CLECNT=0 BLUCNT=0 COLOR=clear FSTATE=OK set -f QUERY_STRING=`echo "$QUERY_STRING" | $SED 's/[^A-Za-z0-9_,.&=%-]//g' | $SED 's/[&=][.][.]*//g' | $SED 's/\.\.//g'` set `echo "$QUERY_STRING" | $SED 's/[&=]/\ /g' | $SED 's/%2[Cc]/,/g'` >/dev/null 2>&1 while [ "$#" -ne 0 ] do case $1 in HOSTSVC ) HOSTSVC=`echo "$2" | $SED 's/[^A-Za-z0-9_,.-]//g'` shiftnum=2 ;; PCT ) PCT=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; ST ) ST=`echo "$2" | $SED 's/[^0-9]//g'` shiftnum=2 ;; END ) END=`echo "$2" | $SED 's/[^0-9]//g'` shiftnum=2 ;; REDCNT ) REDCNT=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; YELCNT ) YELCNT=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; GRECNT ) GRECNT=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; PURCNT ) PURCNT=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; BLUCNT ) BLUCNT=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; CLECNT ) CLECNT=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; RED ) RED=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; YEL ) YEL=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; GRE ) GRE=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; PUR ) PUR=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; BLU ) BLU=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; CLE ) CLE=`echo "$2" | $SED 's/[^0-9.]//g'` shiftnum=2 ;; COLOR ) COLOR=`echo "$2" | $SED 's/[^a-z]//g'` shiftnum=2 ;; STYLE ) STYLE="$2" # SMM shiftnum=2 ;; FSTATE ) FSTATE="$2" # RAC - Is hist file valid ? shiftnum=2 ;; *) shiftnum=1 ;; esac if [ "$#" -lt "$shiftnum" ] then shift else shift $shiftnum fi done if [ "$HOSTSVC" = "" -o "$HOSTSVC" = "HOSTFILE_NOT_DEFINED" -o "$COLOR" = "" -o "$STYLE" = "" ] then echo "Content-type: text/html

ERROR!
bb-replog.sh called with invalid arguments

" echo "" exit 1 fi # Take the basename only !!! # OLDIFS=$IFS IFS='/' set $HOSTSVC IFS=$OLDIFS lastarg="\${$#}" HOSTSVC=`eval "echo $lastarg"` HOSTSVC=`echo "$HOSTSVC" | $SED 's/[^A-Za-z0-9.,_-]//g'` HOSTSVC=`echo "$HOSTSVC" | $SED 's/\,/\./g'` OLDIFS=$IFS IFS='.' set $HOSTSVC IFS=$OLDIFS HOSTDOTS="$1" export HOSTDOTS HOSTCOMMAS="$1" export HOSTCOMMAS shift while [ "$#" -gt 1 ] do HOSTDOTS=${HOSTDOTS}.$1 HOSTCOMMAS=${HOSTCOMMAS},$1 shift done FQDNNAME="$HOSTDOTS" SERVICE=$1 export SERVICE HOSTSVC=${HOSTCOMMAS}.${SERVICE} # # Create text based report # repname=avail-${HOSTDOTS}-${SERVICE}-$$.txt repfile=${BBREP}/${repname} $RM -f ${repfile} >/dev/null 2>&1 $TOUCH ${repfile} >/dev/null 2>&1 if [ "$?" -ne 0 ] then echo "Content-type: text/html

ERROR!
bb-replog.sh called with invalid arguments

" echo "" exit 1 fi $RM -f ${repfile} >/dev/null 2>&1 BBIP=`$BBHOME/bin/getipaddr -f $FQDNNAME` BBIPNAME=`$BBHOME/bin/getipaddr $FQDNNAME` bkgcolor="$COLOR" STARTDATE=`$BBHOME/bin/touchtime -c $ST | $AWK '{print $2 " " $3 " " $5}'` STARTDATETIME=`$BBHOME/bin/touchtime -c $ST | $AWK '{print $1 " " $2 " " $3 " 00:00:00 " $5}'` ENDDATE=`$BBHOME/bin/touchtime -c $END | $AWK '{print $2 " " $3 " " $5}'` ENDDATETIME=`$BBHOME/bin/touchtime -c $END | $AWK '{print $1 " " $2 " " $3 " 00:00:00 " $5}'` if [ "$STARTDATE" = "$ENDDATE" ] then RANGE="$STARTDATE" else RANGE="$STARTDATE - $ENDDATE" fi # THE RANGE WILL APPEAR AS DEFINED BY THE USER # BUT THE ACTUAL END TIME FOR CALCULATION CANNOT BE GREATER # THAN NOW timenow=`$BBHOME/bin/touchtime -e` if [ "$timenow" -lt "$END" ] then END=$timenow fi OFFLINE=0 NONGR=0 echo "Content-type: text/html " $CAT $BBHOME/web/replog_header | $SED "s/&BBRELDATE/$BBRELDATE/g" | $SED "s/&BBREL/$BBREL/g" |\ $SED "s/&BBDATE/$RANGE/g" | $SED "s!&BBBACKGROUND!$BBSKIN\/bkg-$bkgcolor.gif!g" |\ $SED "s/&BBHOST/$HOSTDOTS/g" | $SED "s/&BBSVC/$SERVICE/g" |\ $SED "s!&BBWEB!$BBWEB!g" | $SED "s!&BBIPNAME!$BBIPNAME!g" | $SED "s!&BBIP!$BBIP!g" |\ $SED "s!&CGIBINURL!$CGIBINURL!g" |\ $SED "s!&BBSKIN!$BBSKIN!g" if [ -f "$BBHIST/$HOSTSVC" ] then echo "

$HOSTDOTS - $SERVICE

" echo "" echo "" echo "" echo " " if [ "$FSTATE" = "NOTOK" ] then echo "" fi echo "
Overall Availability: $PCT%
\"green\" \"yellow\" \"red\" \"purple\" \"clear\" \"blue\"
${GRE}% ${YEL}% ${RED}% ${PUR}% ${CLE}% ${BLU}%
Event count ${YELCNT} ${REDCNT} ${PURCNT} ${CLECNT} ${BLUCNT}
[Total may not equal 100%]
[History file contains invalid entries]
" echo "Availability Report ${RANGE} ${HOSTDOTS} - ${SERVICE} Availability: ${PCT}% Red Yellow Green Purple Clear Blue ${RED}% ${YEL}% ${GRE}% ${PUR}% ${CLE}% ${BLU}% Events ${REDCNT} ${YELCNT} ${GRECNT} ${PURCNT} ${CLECNT} ${BLUCNT} Event logs for the given period Event Start Event End Status Duration (Seconds) Cause " >> ${repfile} echo "

" $RM -f $TMPFILE $SORT -r -n -k 7 "$BBHIST/$HOSTSVC" > $TMPFILE if [ "$?" -ne 0 ] then echo "Your SORT command does not seem to support the \"-r -n -k 7\"
" echo "option. It probably wants \"-r -n +7\" as the option to SORT
" echo "On AIX, use \"-k7nr\"
" echo "please fix it in the bb-replog.sh script" fi $CAT $TMPFILE | $GREP -v green | $AWK '$7 < '$END' && $7 + $8 >= '$ST' { print $0 }' | \ while read line do set $line > /dev/null arg1=$1 arg2=$2 arg3=$3 arg4=$4 arg5=$5 color=$6 eventtime=$7 eventlen=$8 numargs=$# # SMM FOR DORADO... case "$STYLE" in crit) if test "$color" != "red" then continue fi ;; nongr) if test "$color" = "green" then continue fi ;; esac if test "$BG" = "000000" then BG="000033" else BG="000000" fi hostname=`echo $HOSTDOTS | $SED 's/\./_/g'` histlogname=$BBHISTLOGS/$hostname/$SERVICE/${arg1}_${arg2}_${arg3}_${arg4}_${arg5} # Can't put the SED that removes the &rec/&ellow here because the return code wil be 0 causelines="" if [ -r "$histlogname" ] then causelines=`$GREP '^&' $histlogname` if [ "$?" -ne 0 ] then causelines=`$HEAD -1 $histlogname` if [ "$?" -ne 0 ] then causelines="" else set $causelines >/dev/null shift 7 causelines=$* fi else causelines=`$GREP '^&' $histlogname | $GREP -v green | $SED 's/^&[a-z]*//g' | $SED 'a\\
'` fi fi # Make sure there's an 8th argument # if not the length of time is now - start time of event if [ "$numargs" -lt 8 ] then lapsetime=`$EXPR $END - $eventtime` else lapsetime=$eventlen fi # If event started before actual start time # The length is calculated from START if [ "$eventtime" -lt "$ST" ] then lapsetime=`$EXPR $eventtime + $lapsetime - $ST` begintime=$ST else begintime=$eventtime fi # Does the event log ends after END ? # THe lenght is calculated 'til END finishtime=`$EXPR $begintime + $lapsetime` if [ "$finishtime" -gt "$END" ] then lapsetime=`$EXPR $END - $begintime` fi STARTEVENT=`$BBHOME/bin/touchtime -c $begintime` endtime=`$EXPR $begintime + $lapsetime` ENDEVENT=`$BBHOME/bin/touchtime -c $endtime` echo "" # # Update text based report # cause=`echo $causelines | $SED 's/<.*>//g'` echo "$STARTEVENT $ENDEVENT $color $downstr $lapsetime $cause" >> ${repfile} done $RM -f $TMPFILE # SMM UGLY # I CAN'T SEEM TO ADD UP THE OFFLINE TIME AND KEEP IT ACROSS # THE do/done LOOP. UGH. AND ANY EFFORT TO WRITE TO A TEMP # FILE SCREWS UP THE DISPLAY. DON'T ASK ME. REALLY. day=86400 hour=3600 min=60 for style in crit nongr do OFFMSG="" DURMSG="" OFFLINE="0" if [ "$style" = "crit" ] then if test -f $OFFFILE then OFFLINE=`cat $OFFFILE` $RM -f $OFFFILE fi OFFMSG="Time Critical/Offline:" else if [ "$STYLE" != "nongr" ] then continue fi if test -f $NONGRFILE then OFFLINE=`cat $NONGRFILE` $RM -f $NONGRFILE fi OFFMSG="Time Non-Critical:" fi numsecs=$OFFLINE DAYS=`$EXPR $numsecs / 86400` if [ "$DAYS" -gt 0 ] then DURMSG="$DAYS days" numsecs=`$EXPR $numsecs % 86400` fi HOURS=`$EXPR $numsecs / 3600` if [ "$HOURS" -gt 0 -o "$DAYS" -gt 0 ] then DURMSG="$DURMSG $HOURS hours" numsecs=`$EXPR $numsecs % 3600` fi MINS=`$EXPR $numsecs / 60` if [ "$MINS" -gt 0 -o "$HOURS" -gt 0 -o "$DAYS" -gt 0 ] then DURMSG="$DURMSG $MINS mins" numsecs=`$EXPR $numsecs % 60` fi SECS=$numsecs if [ "$SECS" -gt 0 -o "$MINS" -gt 0 -o "$HOURS" -gt 0 -o "$DAYS" -gt 0 ] then DURMSG="$DURMSG $SECS secs" else DURMSG="$DURMSG none" fi echo "" echo "" # # Update text based report # echo " $OFFMSG $DURMSG ($OFFLINE secs)" >> ${repfile} done echo "
Event logs for the given period
Event Start Event End Status Duration Cause
$STARTEVENT$ENDEVENT" HOSTDIR=`echo $HOSTDOTS | $SED 's/\./_/g'` echo "" if test "$color" = "red" then OFFLINE=`$EXPR $OFFLINE + $lapsetime` $RM -f $OFFFILE echo "$OFFLINE" > $OFFFILE # UGH - IN CASE OFFIINE IS DITCHED AFTER WHILE IS DONE else NONGR=`$EXPR $NONGR + $lapsetime` $RM -f $NONGRFILE echo "$NONGR" > $NONGRFILE # UGH - IN CASE OFFIINE IS DITCHED AFTER WHILE IS DONE fi duration=$lapsetime days=0 if [ "$duration" != "" -a "$duration" -ge 86400 ] then days=`$EXPR "$duration" / 86400 2>/dev/null` duration=`$EXPR "$duration" % 86400` fi hours=0 if [ "$duration" != "" -a "$duration" -ge 3600 ] then hours=`$EXPR "$duration" / 3600 2>/dev/null` duration=`$EXPR "$duration" % 3600` fi mins=0 if [ "$duration" != "" -a "$duration" -ge 60 ] then mins=`$EXPR "$duration" / 60 2>/dev/null` duration=`$EXPR "$duration" % 60` fi if [ "$duration" != "" ] then secs=$duration if [ "$days" -eq 0 ] then downstr="`echo $hours $mins $secs | $AWK '{printf \"%0d:%02d:%02d\",$1,$2,$3}'`" elif [ "$days" -eq 1 ] then downstr="`echo $hours $mins $secs | $AWK '{printf \"1 day %02d:%02d:%02d\",$1,$2,$3,$4}'`" else downstr="`echo $days $hours $mins $secs | $AWK '{printf \"%d days %02d:%02d:%02d\",$1,$2,$3,$4}'`" fi fi echo "\"$color\"$downstr$causelines
$OFFMSG$DURMSG


" echo "

Click here for text-based availability report


" # # EXECUTE LOCAL SCRIPTS FROM HERE... # SCRIPTS SHOULD LIVE IN $BBHOME/ext/rep DIRECTORY # BBREPEXT CONTAINS THE FILENAMES TO EXECUTE # BBREPEXT=`echo "$BBREPEXT" | $SED 's!\.\./!\./!g'` for file in $BBREPEXT do if [ -x "$BBHOME/ext/rep/$file" ] then $BBHOME/ext/rep/$file else echo "
bb-replog.sh: $BBHOME/ext/rep/$file can't be executed
" fi done echo "
" $CAT $BBHOME/web/replog_footer | $SED "s/&BBRELDATE/$BBRELDATE/g" | $SED "s/&BBREL/$BBREL/g" |\ $SED "s/&BBDATE/$RANGE/g" | $SED "s!&BBBACKGROUND!$BBSKIN\/bkg-$bkgcolor.gif!g" |\ $SED "s/&BBHOST/$HOSTDOTS/g" | $SED "s/&BBSVC/$SERVICE/g" |\ $SED "s!&BBWEB!$BBWEB!g" | $SED "s!&BBIPNAME!$BBIPNAME!g" | $SED "s!&BBIP!$BBIP!g" |\ $SED "s!&CGIBINURL!$CGIBINURL!g" |\ $SED "s!&BBSKIN!$BBSKIN!g" else echo "

Error reading data file

" echo "" fi rc=0 else echo "Content-type: text/html

ERROR!
bb-replog.sh called with invalid arguments

" echo "" rc=1 fi $RM -f $OFFFILE $RM -f $NONGRFILE $RM -f $TMPFILE exit $rc ./bb/bb19c/web/bbrep_footer0100644002342100007640000000270407616533074013420 0ustar bbbb



green100% available yellow&BBREPWARN% and above redless than &BBREPWARN% clearNo stats for period



BB Logo
./bb/bb19c/web/replog_footer0100644002342100007640000000355307616533074013621 0ustar bbbb



greenok yellowattention redtrouble purpleno report clearunavailable blueoffline




./bb/bb19c/web/bbrep_header0100644002342100007640000000370507616533074013354 0ustar bbbb Big Brother Report: Availability Report
Get Big Brother
Contact Condensed view Report Help
availability report
&BBDATE

./bb/bb19c/web/replog_header0100644002342100007640000000373307616533074013553 0ustar bbbb Big Brother availabilty report: &BBHOST (&BBIP) - &BBSVC
Get Big Brother
Contact Condensed view Report Help
availability report
&BBDATE

./bb/bb19c/web/mkbbwml.sh0100755002342100007640000004365407616533074013030 0ustar bbbb#!/bin/sh # mkbbwml.sh # SHELL SCRIPT TO MAKE THE WML DISPLAY # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # Instructions # # 1) add in your web server's mime.types file: # # mime.types:text/vnd.wap.wml wml # # then stop/start your web server # # 2) create a $BBHOME/www/wml directory # make sure BB has permissions to read/write in it # # 3) insert in bin/bb-display.sh right after the creation of bb2.html: # # $BBHOME/web/mkbbwml.sh # # It'll create .wml files in www/wml # There should be an bb.wml and a bb2.wml file # # Bugs and comments should be sent to robert@bb4.com if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi BBWMLDIR=$BBHOME/www/wml INDEXWML=$BBWMLDIR/index.wml ACKWML=$BBWMLDIR/ack.wml if [ ! -d "$BBWMLDIR" ] then mkdir "$BBWMLDIR" fi OLDIFS=$IFS # # IF WE'RE CALLED WITH AN ARGUMENT, WE'RE IN A SUBPAGE # THE ARGUMENT IS THE BACKGROUND COLOR OF THIS PAGE # THE USEABLE PORTION OF THE etc/bb-hosts FILE NOW # LIVES IN $BBTMP # if test "$#" -gt "1" then if [ \( "$#" -eq 1 \) -o \( "$2" != "page" -a "$2" != "subpage" \) ] then echo "mkbb.sh: Called with missing or invalid arguments" echo "usage: mkbb.sh " exit 0 fi BBBKG=$1 # Subpage type: page or subpage BBSUBPAGE=$2; export BBSUBPAGE BBHOSTS="$BBTMP/bb-hosts.${BBPAGENAME}.${PARPID}"; export BBHOSTS else BBPAGENAME="bb";export BBPAGENAME PARPID="$$" export PARPID thisdir=`pwd` cd $BBWMLDIR $RM -f ./timenow $BBHOME/bin/touchtime -60 ./timenow $FIND . -name "*.wml" ! -name ack.wml ! -newer ./timenow -exec $RM -f {} \; $RM -f ./timenow $FIND $BBWMLDIR/. -name "*.ok" -exec $RM -f {} \; cd $thisdir BBDATE=`${DATE}` # SET THE DATE set $BBDATE >/dev/null 2>&1 shift BBDATE="$1 $2 $3 $5";export BBDATE BBCNT=1;export BBCNT BB2CNT=1;export BB2CNT BB2WML=$BBWMLDIR/bb2.wml;export BB2WML echo "$BB2WML" > $BBTMP/bb2wml.lastname $RM -f $BBTMP/bb2wml.fnames $TOUCH $BBTMP/bb2wml.fnames fi BBWML=$BBWMLDIR/$BBPAGENAME.wml echo "$BBWML" > $BBTMP/bbwml.$BBPAGENAME.lastname BBSKIP2="." if test "$BBSUBPAGE" = "" then BBBKG=`$CAT ${BBLOGS}/.bkg` # GET THE BACKGROUND COLOR fi # WML header echo " " > $BBWML if test "$BBSUBPAGE" = "" then echo "

" >> $BBWML echo "Summary
" >> $BBWML echo "Ack
$BBDATE

" >> $BBWML echo "

" >> $BBWML echo "Overall Status
$BBBKG

" >> $BBWML echo " " > $BB2WML echo "

" >> $BB2WML echo "Overall
" >> $BB2WML echo "Ack
$BBDATE

" >> $BB2WML echo "

" >> $BB2WML echo "Summary Status
$BBBKG

" >> $BB2WML else echo "

" >> $BBWML echo "Overall
" >> $BBWML echo "Ack
$BBDATE

" >> $BBWML echo "

" >> $BBWML echo "Subpage Status
$BBBKG

" >> $BBWML fi TAGLINES="";export TAGLINES $CAT $BBHOSTS | while read line do TAGLINES="${TAGLINES}." if [ "$TAGLINES" != "$BBSKIP2" ] then continue fi # Also update BBSKIP2, we're doing another line # in may also be updated in the page case statement BBSKIP2="${BBSKIP2}." # # FIX THIS LINE SOONER OR LATER - THE > /dev/null BREAKS ON # DEC ULTRIX. GREAT EH? # set -f set bogus $line > /dev/null # SMM 1.06a ENV DISPLAY BUG! shift set +f # Only check for lines that aren't empty or comments if [ "$#" -eq 0 -o "$1" = "#" ] then # Don't do empty lines or comments continue #else # For a lower level instance, Don't print our own host #if [ "$BBGROUP" != "" ] #then # for item in $* # do # DONTDO="FALSE" # case $item # in # BBDISPLAY ) # DONTDO="TRUE" # break # ;; # BBPAGER ) # DONTDO="TRUE" # break # ;; # BBNET ) # DONTDO="TRUE" # break # ;; # esac # done # if [ "$DONTDO" = "TRUE" ] # then # continue # fi #fi fi case $1 in [0-9]* ) # # SMM 1.06a # WE MAY NOT HAVE A group DIRECTIVE THAT CREATED # THE TABLE. HANDLE IT HERE. # if test "$TOP" = "" # TOP LINE NOT DONE then TOP="DONE" fi ;; group | group-compress | group-only ) # # SMM 1.06a SUPPORT FOR GROUPING THINGS TOGETHER # IF THE LINE STARTS WITH THE WORD group THEN # A NEW TABLE IS CREATED WITH THE REST OF THE LINE # AS THE CENTERED LABEL, i.e. # group Web and Mail Servers # # SMM 1.08 SUPPORT FOR COMPRESSED GROUPINGS # IF THERE IS ONLY ONE COLUMN IN THE GROUP, DISPLAY THEM # ACROSS THE SCREEN, OTHERWISE JUST ELIMINATE UNNEEDED COLUMNS # # RAC 1.4f SUPPORT FOR LIMITING COLUMNS # IF A LINE STARTS WITH THE WORD group THEN # ONLY THE COLUMNS APPEARING IN THE DIRECTIVES # WILL BE SHOWN. THIS DIRECTIVE IS VALID UNTIL # THE NEXT group/group-compress/group-only/page DIRECTIVE # case $1 in group-compress ) shift # GET RID OF group-compress ;; group-only ) shift;shift # GET RID OF group-only + columns ;; * ) shift; # GET RID OF group ;; esac if test "$NAME" != "" # CLOSE OFF TABLE then echo "
" >> $BBWML fi TITLE=`echo $* | $SED 's/<[^<]*>/ /g'` #TITLE=`echo $* | $SED -e :a -e 's/<[^<]*>/ /g;/$TITLE
" >> $BBWML TOP="DONE" # SMM FOR TOP LINE DISP continue ;; # # SMM 1.10 SUPPORT FOR MULTIPLE DISPLAY PAGES # FORMAT page NAME # page | subpage ) # THE ONLY WAY OUT OF A SUBPAGE IS EOF # THE mkbb.page SCRIPT ENSURES THIS. PAGETYPE="$1" export PAGETYPE if [ \( "$BBSUBPAGE" = "" -a "$PAGETYPE" = "page" \) -o \( "$BBSUBPAGE" = "page" -a "$PAGETYPE" = "subpage" \) ] then BBPAGENAME=`echo "$2" | $SED -e 's/^.*\/\([^\/]*$\)/\1/g' -e 's/\.\.//g'` if [ "$PAGETYPE" = "page" ] then TOPBBPAGENAME="$BBPAGENAME" export TOPBBPAGENAME else BBPAGENAME="${TOPBBPAGENAME}--${BBPAGENAME}" fi export BBPAGENAME shift;shift; BBHOSTLINE=`$EXPR "$TAGLINES" : ".*"` BK=`$BBHOME/web/mkbb.page $BBHOSTLINE 2>/dev/null` if test "$NAME" != "" # CLOSE OFF TABLE then echo "
" >> $BBWML NAME="" fi # # IF THIS IS OUR FIRST PAGE OR SUBPAGE, MAKE THE TABLE # if [ \( "$PAGETYPE" = "page" -a "$FIRSTPG" = "" \) -o \( "$PAGETYPE" = "subpage" -a "$FIRSTSUBPG" = "" \) ] then if [ "$PAGETYPE" = "page" ] then FIRSTPG="DONE" export FIRSTPG MKBBLOCALVAL="$MKBBLOCAL" else FIRSTSUBPG="DONE" export FIRSTSUBPG MKBBLOCALVAL="$MKBBSUBLOCAL" fi TITLE=`echo $MKBBLOCALVAL | $SED 's/<[^<]*>/ /g'` #TITLE=`echo $MKBBLOCALVAL | $SED -e :a -e 's/<[^<]*>/ /g;/$TITLE

" >> $BBWML fi TITLE=`echo $* | $SED 's/<[^<]*>/ /g'` #TITLE=`echo $* | $SED -e :a -e 's/<[^<]*>/ /g;/$COLOR $TITLE
" >> $BBWML OLDTAGLINES=$TAGLINES unset TAGLINES $BBHOME/web/mkbbwml.sh $BK $PAGETYPE TAGLINES=$OLDTAGLINES BBSKIP2="${TAGLINES}`$CAT $BBTMP/BBSKIP2.${BBPAGENAME}.${PARPID}`" $RM -f $BBTMP/bb-hosts.${BBPAGENAME}.${PARPID} $RM -f $BBTMP/BBSKIP2.${BBPAGENAME}.${PARPID} BBPAGENAME="" continue fi ;; * ) continue ;; esac # # NEW FOR 1.04 - SUPPORT FOR FQDN's # NOT CENTERED... # FNAME=$2 IFS='.' set -f set $2 >/dev/null 2>&1 set +f IFS=$OLDIFS if test "$FQDN" = "TRUE" then NAME=$1 shift for arg in $* do NAME="$NAME,$arg" done else NAME=$1 fi BBWMLHOST=$BBWMLDIR/$FNAME.wml DOWMLHOST=FALSE if [ ! -f "${BBWMLHOST}.ok" ] then DOWMLHOST=TRUE $TOUCH ${BBWMLHOST}.ok $RM -f ${BBWMLHOST} fi if [ "$DOWMLHOST" = "TRUE" ] then # WML Create Host WML cardset echo "

" > $BBWMLHOST if test "$BBSUBPAGE" = "" then echo "Overall
" >> $BBWMLHOST echo "Ack
$BBDATE

" >> $BBWMLHOST echo "

" >> $BBWMLHOST else echo "$BBPAGENAME
$BBDATE
" >> $BBWMLHOST fi echo "$FNAME

" >> $BBWMLHOST fi WORST="GR" # # FOR EACH OF THE THINGS WE MONITOR... # CURRPWD=`pwd` cd $BBLOGS logfiles="`$LS ${NAME}.* 2>/dev/null`" for log in $logfiles do IFS='.' set -f set $log set +f IFS=$OLDIFS column=$2 set -f set `$HEAD -1 ${BBLOGS}/${NAME}.${column}` >/dev/null 2>&1 set +f case $1 in red ) COLOR=RE;ICON="cross1";; green ) COLOR=GR;ICON="smileyface";; yellow ) COLOR=YE;ICON="sparkle";; purple ) COLOR=PU;ICON="question2";; clear ) COLOR=CL;ICON="plug";; blue ) COLOR=BL;ICON="wrench";; * ) continue ;; esac if [ -f "${BBACKS}/ack.${FNAME}.${column}" ] && [ "$1" = "red" -o "$1" = "yellow" -o "$1" = "purple" ] then ACKED="x" else ACKED="" fi if [ "$DOWMLHOST" = "TRUE" ] then BBWMLLOG=$BBWMLDIR/${FNAME}.${column}.wml echo "${COLOR}${ACKED} ${column}
" >> $BBWMLHOST # WML Create Host log WML cardset echo "

" > $BBWMLLOG echo "Host
" >> $BBWMLLOG echo "Ack
$BBDATE

" >> $BBWMLLOG echo "

" >> $BBWMLLOG echo "$FNAME.${column}

" >> $BBWMLLOG $CAT ${BBLOGS}/${NAME}.${column} | $GREP -v "^[ ]*$" | $HEAD -14 | $GREP -v DOCTYPE | $SED -e 's/http:\/\///g' -e 's/<[tT][rR]>/TRTR/g' -e 's/<[^<]*>/ /g' -e 's/TRTR//g' -e 's//\>/g' -e 's/&red/red<\/b>/g' -e 's/&green/green<\/b>/g' -e 's/&purple/purple<\/b>/g' -e 's/&yellow/yellow<\/b>/g' -e 's/&clear/clear<\/b>/g' -e 's/&blue/blue<\/b>/g' -e 's/\&/\&/g' -e "s/'/\'/g" -e 's/\"/\"/g' -e 'a\
' >> $BBWMLLOG echo "

" >> $BBWMLLOG fi if [ "$COLOR" = "RE" ] then WORST=$COLOR elif [ "$COLOR" = "YE" ] then if [ "$WORST" != "RE" ] then WORST=$COLOR fi elif [ "$COLOR" = "PU" ] then if [ "$WORST" != "RE" -a "$WORST" != "YE" ] then WORST=$COLOR fi fi done if [ "$DOWMLHOST" = "TRUE" ] then # WML footer echo "

" >> $BBWMLHOST fi echo "$WORST $FNAME
" >> $BBWML $CAT $BBTMP/bb2wml.fnames | $GREP "$FNAME" >/dev/null 2>&1 if [ "$?" -ne 0 -a "$WORST" != "GR" ] then echo "$WORST $FNAME
" >> $BB2WML echo "$FNAME" >> $BBTMP/bb2wml.fnames fi # Break bb.wml file over multiple 'cause some phones can't handle # more than 1750 chars set bogus `$WC -c $BBWML` 2>/dev/null shift if [ "$#" -gt 2 ] then if [ "$1" -gt "$2" ] then CHARS=$1 else CHARS=$2 fi if [ "$CHARS" -gt $WMLMAXCHARS ] then # Get the next card number BBCNT=`$EXPR "$BBCNT" + 1` OLDBBPAGENAME=`echo $BBWML | $SED "s!$BBWMLDIR/!!g" 2>/dev/null` # Close off current card # Add WML footer echo "
Next" >> $BBWML echo "

" >> $BBWML BBWML=$BBWMLDIR/${BBPAGENAME}-${BBCNT}.wml;export BBWML echo "$BBWML" > $BBTMP/bbwml.$BBPAGENAME.lastname # WML header echo " " > $BBWML echo "

" >> $BBWML echo "Previous
" >> $BBWML if test "$BBSUBPAGE" = "" then echo "Summary
" >> $BBWML echo "Ack
$BBDATE

" >> $BBWML echo "

" >> $BBWML echo "Overall Status
$BBBKG

" >> $BBWML else echo "Overall
" >> $BBWML echo "Ack
$BBDATE

" >> $BBWML echo "

" >> $BBWML echo "Subpage Status
$BBBKG

" >> $BBWML fi fi fi # Break bb2.wml file over multiple 'cause some phones can't handle # more than 1750 chars set bogus `$WC -c $BB2WML` 2>/dev/null shift if [ "$#" -eq 2 ] then if [ "$1" -gt "$2" ] then CHARS=$1 else CHARS=$2 fi if [ "$CHARS" -gt $WMLMAXCHARS ] then # Open a new card BB2CNT=`$EXPR "$BB2CNT" + 1` OLDBB2PAGENAME=`echo $BB2WML | $SED "s!$BBWMLDIR/!!g" 2>/dev/null` # Close off current card # Add WML footer echo "
Next" >> $BB2WML echo "

" >> $BB2WML BB2WML=$BBWMLDIR/bb2-${BB2CNT}.wml;export BB2WML echo "$BB2WML" > $BBTMP/bb2wml.lastname echo " " > $BB2WML echo "

" >> $BB2WML echo "Previous
" >> $BB2WML echo "Overall
" >> $BB2WML echo "Ack
$BBDATE

" >> $BB2WML echo "

" >> $BB2WML echo "Summary Status
$BBBKG

" >> $BB2WML fi fi done if test "$BBSUBPAGE" = "" then # Deal with multi-file bb2.wml ... if [ -f "$BBTMP/bb2wml.lastname" ] then BBWML=`$CAT $BBTMP/bb2wml.lastname` else # Tag file missing, use default BBWML=$BBWMLDIR/bb2.wml fi if [ "$BBBKG" = "green" ] then echo "All is OK
" >> $BB2WML fi echo "

" >> $BB2WML $RM -f $INDEXWML $LN -s $BBWML $INDEXWML $RM -f $ACKWML case "$CGIBINURL" in http* ) FULLCGIBINURL="$CGIBINURL" ;; * ) FULLCGIBINURL="${BBWEBHOST}${CGIBINURL}" ;; esac echo "

Overall
Summary
$BBDATE
Ack Event

AckID:
Duration:mins
Msg:

Send
Overall
Summary

" > $ACKWML fi # Deal with multi-file bb.wml ... if [ -f "$BBTMP/bbwml.$BBPAGENAME.lastname" ] then BBWML=`$CAT $BBTMP/bbwml.$BBPAGENAME.lastname` else # Tag file missing, use default BBWML=$BBWMLDIR/bb.wml fi # WML footer echo "

" >> $BBWML $RM -f $BBTMP/bbwml.$BBPAGENAME.lastname $BBTMP/bb2wml.lastname # # Remove file containing the list of hosts in bb2.wml # if [ "$BBSUBPAGE" = "" ] then $RM -f $BBTMP/bb2wml.fnames $FIND $BBWMLDIR/. -name "*.ok" -exec $RM -f {} \; fi exit 0 ./bb/bb19c/web/bb-report.sh0100755002342100007640000000320407616533074013254 0ustar bbbb#!/bin/sh # # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # GENERATE A SIMPLE SYSTEM AVAILABILITY REPORT # Format ./report "Apr 1 2000" "Apr 10 2000" # if [ "$BBHOME" = "" -o ! -d "$BBHOME" ] then echo "BBHOME is not set" exit 1 fi ARGS="$#" case "$ARGS" in "2") # echo "2 args: $1 $2" START=`$BBHOME/bin/touchtime -x "$1"` END=`$BBHOME/bin/touchtime -x "$2"` END=`$EXPR $END + 86399` # 23:59:59 PM OF THE END DAY... ;; "1") echo "1 args" # IF WE ONLY USE ONE ARG TO FROM THEN TO NOW echo "ARG1 = $ARG1" START=`$BBHOME/bin/touchtime -x "$1"` END=`$BBHOME/bin/touchtime -e` # NOW (MAY BE OFF BY 1 HR DST) # echo "START=$START END=$END" ;; *) echo "OTHER" START=`$BBHOME/bin/touchtime -x "Jan 1 1990"` END=`$BBHOME/bin/touchtime -e` # NOW (MAY BE OFF BY 1 HR DST) # echo "START=$START END=$END" ;; esac # echo "START=$START END=$END" TOTALTIME=`$EXPR $END - $START` # echo "TOTAL TIME: $TOTALTIME" if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi cd $BBLOGS for file in `$LS | $GREP -v "^summary" | $GREP -v "^dialup"` do BOX=$file echo "Collecting info for $BOX" # STATS=`$BBHOME/bin/bb-stat.sh $BOX $START $END` # # SMM NEW C VERSION OF STATS PROGRAM... # if [ -r "$BBHIST/$BOX" ] then STATS=`$BBHOME/bin/bbstat $BOX $START $END` # TRY PUTTING ALL THE STATS IN A SINGLE FILE INSTEAD... # OF HAVING STAT WRITE A FILE FOR EACH ONE... # echo "$BOX $STATS" echo "$BOX $STATS" >> $REPDATA fi done ./bb/bb19c/web/bb-hist.sh.DIST0100755002342100007640000003712107616533075013460 0ustar bbbb#!/bin/sh # # BIG BROTHER WEB BASED HISTORY DISPLAY SCRIPT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # BBHOME IS THE ROOT DIRECTORY OF BIG BROTHER!!! # YOU MUST SET THE NEXT LINE TO WHERE BB LIVES BBHOME="&&BBHOME" export BBHOME if [ "$BBHOME" = "" -o ! -d "$BBHOME" ] then echo "Content-type: text/html

ERROR!
BBHOME IS NOT SET IN bb-hist.sh

" exit 1 fi . $BBHOME/etc/bbdef.sh # Are we called from a web page ? if [ "$QUERY_STRING" != "" ] then HISTFILE="HISTFILE_NOT_DEFINED" ENTRIES=50 set -f QUERY_STRING=`echo "$QUERY_STRING" | $SED 's/[^A-Za-z0-9_,.&=:%-]//g' | $SED 's/[&=][.][.]*//g' | $SED 's/\.\.//g'` set `echo "$QUERY_STRING" | $SED 's/[&=]/\ /g' | $SED 's/%2[Cc]/,/g'` >/dev/null 2>&1 while [ "$#" -ne 0 ] do case $1 in HISTFILE ) HISTFILE="$2" shiftnum=2 ;; ENTRIES ) if [ "$2" = "all" ] then ENTRIES=all else ENTRIES=`echo "$2" | $SED 's/[^0-9]//g'` fi shiftnum=2 ;; *) shiftnum=1 ;; esac if [ "$#" -lt "$shiftnum" ] then shift else shift $shiftnum fi done if [ "$HISTFILE" = "HISTFILE_NOT_DEFINED" -o "$HISTFILE" = "" -o "$ENTRIES" = "" ] then echo "Content-type: text/html

ERROR!
bb-hist.sh called with invalid arguments

" echo "" exit 1 fi # Take the basename only !!! # OLDIFS=$IFS IFS='/' set $HISTFILE IFS=$OLDIFS lastarg="\$$#" HISTFILE=`eval "echo $lastarg"` HISTFILE=`echo "$HISTFILE" | $SED 's/[^A-Za-z0-9.\,_-]//g'` HOSTFILE=`echo "$HISTFILE" | $SED 's/\,/\./g'` OLDIFS=$IFS IFS='.' set $HOSTFILE IFS=$OLDIFS HOSTDOTS="$1" export HOSTDOTS HOSTCOMMAS="$1" export HOSTCOMMAS shift while [ "$#" -gt 1 ] do HOSTDOTS=${HOSTDOTS}.$1 HOSTCOMMAS=${HOSTCOMMAS},$1 shift done FQDNNAME="$HOSTDOTS" SERVICE=$1 export SERVICE BBIP=`$BBHOME/bin/getipaddr -f $FQDNNAME` BBIPNAME=`$BBHOME/bin/getipaddr $FQDNNAME` if [ -r "$BBLOGS/${HISTFILE}" ] then set `$CAT "$BBLOGS/${HISTFILE}" | $HEAD -1` bkgcolor="$1" else bkgcolor="clear" fi echo "Content-type: text/html " # Is someone playing funny with us ? TMPFILE="/tmp/BBHIST.$$" $RM -f $TMPFILE $TOUCH $TMPFILE if [ ! -f $TMPFILE -o ! -w $TMPFILE ] then echo "

ERROR!
bb-hist.sh is being tampered with

" TMPFILE=/dev/null else $RM -f $TMPFILE fi BBWEB=`echo $BBWEB | $SED 's/\//\\\\\//g'` export BBWEB $CAT $BBHOME/web/hist_header | \ $SED -e "s/&BBRELDATE/$BBRELDATE/g" -e "s/&BBREL/$BBREL/g" \ -e "s/&BBDATE/`$DATE`/g" -e "s!&BBBACKGROUND!$BBSKIN\/bkg-$bkgcolor.gif!g" \ -e "s/&BBHOST/$HOSTDOTS/g" -e "s/&BBSVC/$SERVICE/g" -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s!&BBWEB!$BBWEB!g" -e "s!&BBIPNAME!$BBIPNAME!g" -e "s!&BBIP!$BBIP!g" \ -e "s!&BBSKIN!$BBSKIN!g" if [ -f "$BBHIST/$HISTFILE" ] then nowtick=`$BBHOME/bin/touchtime -e` daytick=`$EXPR $nowtick - 86400` prevcolor="green" prevline="" firstday=TRUE lastline=`$TAIL -1 "$BBHIST/$HISTFILE"` set $lastline >/dev/null lastlinecolor=$6 lastlinetick=$7 echo "

`$BBHOME/bin/touchtime -a -1440` `$BBHOME/bin/touchtime -a`
" starthr=`$DATE +"%H"` if [ "$starthr" -eq 23 ] then starthr=0 else starthr=`$EXPR $starthr + 1` fi #i=0 i="" echo "" minmod=`$EXPR $nowtick % 3600 / 60` quarters=`$EXPR \( $minmod / 15 \) + 1` startquarters=`$EXPR 4 - $quarters` if [ "$startquarters" -gt 0 ] then starthr=`$EXPR $starthr - 1` if [ "$starthr" -eq -1 ] then starthr=23 fi echo "" starthr=`$EXPR \( $starthr + 1 \) % 24` #i=`$EXPR $i + 1` i="." fi if [ "$startquarters" -eq 0 ] then #loops=23 loops="......................." else #loops=24 loops="........................" fi #while [ "$i" -lt $loops ] while [ "$i" != "$loops" ] do echo "" starthr=`$EXPR \( $starthr + 1 \) % 24` #i=`$EXPR $i + 1` i="${i}." done quarters=`$EXPR "$quarters" + 1` echo "
 $starthr$starthr
" greenticks=0 yellowticks=0 redticks=0 purpleticks=0 whiteticks=0 blueticks=0 if [ "$lastlinetick" -lt "$daytick" ] then alldaycolor=$bkgcolor if [ "$alldaycolor" = "clear" ] then alldaycolor=white fi echo "" evalstr="${lastlinecolor}ticks=86400" eval "$evalstr" else $CAT "$BBHIST/$HISTFILE" | \ $AWK 'BEGIN { i=0 } { if( $7 < '$daytick') {line[i] = $0} else { i++; line[i] = $0 } } \ END { for (j=0;j <= i;++j) print line[j] }' | $GREP -v "^$" | \ while read line do set $line >/dev/null if [ "$#" -ge 7 ] then if [ "$6" = "clear" ] then color=white else color=$6 fi if [ "$7" -ge "$daytick" ] then if [ "$firstday" = TRUE ] then headdayticks=`$EXPR $7 - $daytick` firstday=FALSE if [ "$headdayticks" -ne 0 ] then perc=`$EXPR 100 \* $headdayticks / 86400` if [ "$perc" -eq 0 ] then perc=1 fi evalstr="${prevcolor}ticks=\`$EXPR \$${prevcolor}ticks + $headdayticks\`" eval "$evalstr" echo "" fi fi if [ "$#" -gt 7 ] then headdayticks=$8 else headdayticks=`$EXPR $nowtick - $7` fi perc=`$EXPR 100 \* $headdayticks / 86400` if [ "$perc" -eq 0 ] then perc=1 elif [ "$perc" -gt 10 ] then perc=`$EXPR "$perc" - 1` # hack to readjust colored blocks fi evalstr="${color}ticks=\`$EXPR \$${color}ticks + $headdayticks\`" eval "$evalstr" echo "" if [ "$#" -eq 7 ] then if [ "$TMPFILE" != "/dev/null" ] then $RM -f $TMPFILE fi echo "${greenticks} ${yellowticks} ${redticks} ${purpleticks} ${whiteticks} ${blueticks}" > $TMPFILE fi fi prevline="$line" prevcolor=$color fi done #exec <&0 fi echo "
   

$HOSTDOTS - $SERVICE

" echo "" if [ -f "$TMPFILE" ] then evalstr=`$CAT "${TMPFILE}" | $SED 's/[^0-9 ]//g'` if [ "$TMPFILE" != "/dev/null" ] then $RM -f $TMPFILE fi set $evalstr >/dev/null greenticks=$1 yellowticks=$2 redticks=$3 purpleticks=$4 whiteticks=$5 blueticks=$6 fi timespan=86400 if [ "$BBHIST_IGNOREBLUE" = TRUE ] then timespan=`$EXPR 86400 - "$blueticks"` if [ "$?" -ne 0 ] then timespan=86400 fi if [ "$timespan" -lt 0 ] then timespan=0 fi fi if [ "$greenticks" -ne 0 ] then greenperc=`$EXPR $greenticks \* 100 / $timespan` if [ "$greenperc" -eq 0 ] then greenperc=1 fi else greenperc=0 fi if [ "$yellowticks" -ne 0 ] then yellowperc=`$EXPR $yellowticks \* 100 / $timespan` if [ "$yellowperc" -eq 0 ] then yellowperc=1 fi else yellowperc=0 fi if [ "$redticks" -ne 0 ] then redperc=`$EXPR $redticks \* 100 / $timespan` if [ "$redperc" -eq 0 ] then redperc=1 fi else redperc=0 fi if [ "$purpleticks" -ne 0 ] then purpleperc=`$EXPR $purpleticks \* 100 / $timespan` if [ "$purpleperc" -eq 0 ] then purpleperc=1 fi else purpleperc=0 fi if [ "$whiteticks" -ne 0 ] then clearperc=`$EXPR $whiteticks \* 100 / $timespan` if [ "$clearperc" -eq 0 ] then clearperc=1 fi else clearperc=0 fi if [ "$blueticks" -ne 0 ] then blueperc=`$EXPR $blueticks \* 100 / $timespan` if [ "$blueperc" -eq 0 ] then blueperc=1 fi else blueperc=0 fi if [ "$ENTRIES" = "all" ] then entriestitle="All log entries" else entriestitle="Last $ENTRIES log entries" fi echo "
Last 24 Hours
\"green\" \"yellow\" \"red\" \"purple\" \"clear\" \"blue\"
${greenperc}% ${yellowperc}% ${redperc}% ${purpleperc}% ${clearperc}% " if [ "$BBHIST_IGNOREBLUE" = TRUE -a "$blueperc" -gt 0 ] then echo "ignored" else echo "${blueperc}%" fi echo "
[Total may not equal 100%]
" if [ -d $BBHOME/www/hist ] then TEXTLOG=" (Full text log) " else TEXTLOG="" fi echo "

" if [ "$TMPFILE" != "/dev/null" ] then $RM -f $TMPFILE fi $SORT -r -n -k 7 "$BBHIST/$HISTFILE" > $TMPFILE if [ "$?" -ne 0 ] then echo "Your SORT command does not seem to support the \"-r -n -k 7\"
" echo "option. It probably wants \"-r -n +7\" as the option to SORT
" echo "On AIX, use \"-k7nr\"
" echo "please fix it in the bb-hist.sh script" fi if [ "$ENTRIES" = "all" ] then maxentries=999999999 else maxentries="$ENTRIES" fi tablesize=1 $CAT $TMPFILE | \ while read line do if test "$BG" = "000000" then BG="000033" else BG="000000" fi set $line > /dev/null echo "" # The -gt MUST be between integers... both tests in if are done regardless of 1st test :( if [ "$ENTRIES" != "all" -a "$tablesize" -gt "$maxentries" ] then break else tablesize=`$EXPR "$tablesize" + 1` fi done # Only delete if no funnies happening if [ "$TMPFILE" != "/dev/null" ] then $RM -f $TMPFILE fi echo "
$entriestitle$TEXTLOG (Full HTML log)
Date Status Duration
$1 $2 $3 $4 $5" HOSTDIR=`echo $HOSTDOTS | $SED 's/\./_/g'` echo "" duration=$8 days=0 if [ "$duration" = "" ] then timenow=`$BBHOME/bin/touchtime -e` if [ "$7" != "" -a "$timenow" != "" ] then duration=`$EXPR "$timenow" - "$7"` fi fi if [ "$duration" != "" -a "$duration" -ge 86400 ] then days=`$EXPR "$duration" / 86400 2>/dev/null` duration=`$EXPR "$duration" % 86400` fi hours=0 if [ "$duration" != "" -a "$duration" -ge 3600 ] then hours=`$EXPR "$duration" / 3600 2>/dev/null` duration=`$EXPR "$duration" % 3600` fi mins=0 if [ "$duration" != "" -a "$duration" -ge 60 ] then mins=`$EXPR "$duration" / 60 2>/dev/null` duration=`$EXPR "$duration" % 60` fi if [ "$duration" != "" ] then secs=$duration if [ "$days" -eq 0 ] then downstr="`echo $hours $mins $secs | $AWK '{printf \"%0d:%02d:%02d\",$1,$2,$3}'`" elif [ "$days" -eq 1 ] then downstr="`echo $hours $mins $secs | $AWK '{printf \"1 day %02d:%02d:%02d\",$1,$2,$3,$4}'`" else downstr="`echo $days $hours $mins $secs | $AWK '{printf \"%d days %02d:%02d:%02d\",$1,$2,$3,$4}'`" fi fi echo "\"$6\"$downstr


" # # EXECUTE LOCAL SCRIPTS FROM HERE... # SCRIPTS SHOULD LIVE IN $BBHOME/ext/hist DIRECTORY # BBHISTEXT CONTAINS THE FILENAMES TO EXECUTE # BBHISTEXT=`echo "$BBHISTEXT" | $SED 's!\.\./!\./!g'` for file in $BBHISTEXT do if [ -x "$BBHOME/ext/hist/$file" ] then $BBHOME/ext/hist/$file else echo "
bb-hist.sh: $BBHOME/ext/hist/$file can't be executed
" fi done echo "
" $CAT $BBHOME/web/hist_footer | \ $SED -e "s/&BBRELDATE/$BBRELDATE/g" -e "s/&BBREL/$BBREL/g" \ -e "s/&BBDATE/`$DATE`/g" -e "s!&BBBACKGROUND!$BBSKIN\/bkg-$bkgcolor.gif!g" \ -e "s/&BBHOST/$HOSTDOTS/g" -e "s/&BBSVC/$SERVICE/g" \ -e "s!&CGIBINURL!$CGIBINURL!g" \ -e "s!&BBWEB!$BBWEB!g" -e "s!&BBIPNAME!$BBIPNAME!g" -e "s!&BBIP!$BBIP!g" \ -e "s!&BBSKIN!$BBSKIN!g" else echo "

Error reading history file

" echo "" fi exit 0 else echo "Content-type: text/html

ERROR!
bb-hist.sh called with invalid arguments

" echo "" exit 1 fi ./bb/bb19c/tmp/0040755002342100007640000000000007640411710011035 5ustar bbbb./bb/bb19c/tmp/.helloworld0100644002342100007640000000000007616533075013210 0ustar bbbb./bb/bb19c/tmp/.license0100644002342100007640000000000107616533075012460 0ustar bbbb ./bb/bb19c/tmp/BBPID0100664002342100007640000000003007637613651011606 0ustar bbbb26047 26077 26336 26358 ./bb/bb19c/tmp/.expire0100644002342100007640000000000007640411677012331 0ustar bbbb./bb/bb19c/tmp/bb-root.dat0100664002342100007640000000140207636235375013107 0ustar bbbbroot krsh2410 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2407 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2404 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2394 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2393 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2389 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2384 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2383 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2374 theorynis Wed Mar 19 21:49 - 21:49 (00:00) root krsh2373 theorynis Wed Mar 19 21:49 - 21:49 (00:00) ./bb/bb19c/tmp/root0100664002342100007640000000007407640411701011743 0ustar bbbbNo new root logins since rootkrsh2410theorynisWedMar1921:49 ./bb/bb19c/tmp/DFOUT.303760100644002342100007640000000000007616533075012321 0ustar bbbb./bb/bb19c/tmp/_var_log_messages0100664002342100007640000000000607640406743014444 0ustar bbbb12413 ./bb/bb19c/tmp/runbb.sh.197290100644002342100007640000000000007616533075013172 0ustar bbbb./bb/bb19c/tmp/DFOUT.132840100664002342100007640000000000007635712403012315 0ustar bbbb./bb/bb19c/ext/0040755002342100007640000000000007616533075011051 5ustar bbbb./bb/bb19c/ext/hist/0040755002342100007640000000000007616533075012020 5ustar bbbb./bb/bb19c/ext/rep/0040755002342100007640000000000007616533075011637 5ustar bbbb./bb/bb19c/ext/pg/0040755002342100007640000000000007616533075011457 5ustar bbbb./bb/bb19c/ext/pg/ex30100555002342100007640000000312207616533075012075 0ustar bbbb#!/bin/sh # # ex3 # BIG BROTHER EXAMPLE 2 PAGER SCRIPT FOR NON STANDARD RECIPIENT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Usage: ex3 # # The following variables are available thru the environment # # BBALPHAMSG - Default message defined # ACKCODE - Notification associated ack code # BBHOSTNAME - hostname in www.xxx.com format # BBHOSTSVC - host in www.xxx.com.disk format # BBHOSTSVCCOMMAS - host in www,xxx,com.disk format # RCPT - recipient # MACHIP - IP address of host in normalized 12 digits AAABBBCCCDDD # BBSVCNAME - name of service # BBSVCNUM - numeric equivalent of service (from svcerrlist in bbwarnsetup.cfg) # BBNUMERIC - ${MACHIP}${BBSVCNUM} # BBCOLORLEVEL - Color level # DOWNSECSMSG - Default recovery string # DOWNSECS - # of seconds to recovery # RECOVERED - 1 in recovery mode, anything else non-recovery mode # # The RCPT value contains the real recipient value. It was # stripped of its ext-XXX- prefix (where XXX is what you called # your notification script, in this example it would be ext-ex3-) # if [ "$BBTMP" = "" ] then echo "BB environment not set !!!" exit 1 fi # # Send a shortened message to mail recipient # echo " BBALPHAMSG - $BBALPHAMSG ACKCODE - $ACKCODE BBHOSTNAME - $BBHOSTNAME BBHOSTSVC - $BBHOSTSVC BBHOSTSVCCOMMAS - $BBHOSTSVCCOMMAS RCPT - $RCPT MACHIP - $MACHIP BBSVCNAME - $BBSVCNAME BBSVCNUM - $BBSVCNUM BBNUMERIC - $BBNUMERIC BBCOLORLEVEL - $BBCOLORLEVEL DOWNSECSMSG - $DOWNSECSMSG DOWNSECS - $DOWNSECS RECOVERED - $RECOVERED " | $MAIL "BB" "$RCPT" exit 0 ./bb/bb19c/ext/pg/ex20100555002342100007640000000241107616533075012074 0ustar bbbb#!/bin/sh # # ex2 # BIG BROTHER EXAMPLE 2 PAGER SCRIPT FOR NON STANDARD RECIPIENT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Usage: ex2 # # The following variables are available thru the environment # # BBALPHAMSG - Default message defined # ACKCODE - Notification associated ack code # BBHOSTSVC - host in www.xxx.com.disk format # BBHOSTSVCCOMMAS - host in www,xxx,com.disk format # RCPT - recipient # MACHIP - IP address of host in normalized 12 digits AAABBBCCCDDD # BBSVCNAME - name of service # BBSVCNUM - numeric equivalent of service (from svcerrlist in bbwarnsetup.cfg) # BBNUMERIC - ${MACHIP}${BBSVCNUM} # BBCOLORLEVEL - Color level # DOWNSECSVMSG- Default recovery message # DOWNSECS - # of seconds to recovery # RECOVERED - 1 in recovery mode, anything else non-recovery mode # # The RCPT value contains the real recipient value. It was # stripped of its ext-XXX- prefix (where XXX is what you called # your notification script, in this example it would be ext-ex2-) # if [ "$BBTMP" = "" ] then echo "BB environment not set !!!" exit 1 fi # # Send a shortened message to mail recipient # echo "!BB - ${ACKCODE}! $BBHOSTSVC - $BBNUMERIC" | $MAIL "BB" "$RCPT" exit 0 ./bb/bb19c/ext/pg/ex10100555002342100007640000000245007616533075012076 0ustar bbbb#!/bin/sh # # ex1 # BIG BROTHER EXAMPLE 1 PAGER SCRIPT FOR NON STANDARD RECIPIENT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # Usage: ex1 # # The following variables are available thru the environment # # BBALPHAMSG - Default message defined # ACKCODE - Notification associated ack code # BBHOSTSVC - host in www.xxx.com.disk format # BBHOSTSVCCOMMAS - host in www,xxx,com.disk format # RCPT - recipient # MACHIP - IP address of host in normalized 12 digits AAABBBCCCDDD # BBSVCNAME - name of service # BBSVCNUM - numeric equivalent of service (from svcerrlist in bbwarnsetup.cfg) # BBNUMERIC - ${MACHIP}${BBSVCNUM} # BBCOLORLEVEL - Color level # DOWNSECSMSG - Default recovery message # DOWNSECS - # of seconds to recovery # RECOVERED - 1 in recovery mode, anything else non-recovery mode # # The RCPT value contains the real recipient value. It was # stripped of its ext-XXX- prefix (where XXX is what you called # your notification script, in this example it would be ext-ex1-) # if [ "$BBTMP" = "" ] then echo "BB environment not set !!!" exit 1 fi # # Send the equivalent mail message as in the basic notification # echo "${BBALPHAMSG}" | $MAIL "!BB - ${ACKCODE}! $BBHOSTSVC - $BBNUMERIC" "$RCPT" exit 0 ./bb/bb19c/ext/mkbb/0040755002342100007640000000000007616533075011764 5ustar bbbb./bb/bb19c/ext/mkbb/eventlog.sh0100555002342100007640000001032307616533075014140 0ustar bbbb#!/bin/sh # # BIG BROTHER OVERALL EVENT LOGS HISTORY DISPLAY SCRIPT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # Similar to the work of MR NETOPS # (Todd Jimenez ) # but his is nicer... # Thanks Todd for pestering us to include this feature !!! # # This script should be called within mkbb.sh or mkbb2.sh # # SMM 1 March 2001 # SHOW RECENT EVENTS BASED ON # Number of events # Last N hours (max 100 events) # Today (max 100 events) # etc... # For the "old way" comment out LASTMINUTES NUMEVENTS=25 # MAX NUMBER OF EVENTS LASTMINUTES=240 # EVENTS IN THE LAST 4 HOURS if test $LASTMINUTES then TIME=`$BBHOME/bin/touchtime -e -$LASTMINUTES`; export TIME else TIME=0 fi # # SMM - THERE HAS GOT TO BE A BETTER WAY OF DOING THIS, EH ROB? # $TAIL -$NUMEVENTS $BBHIST/allevents | $AWK '$3 > '${TIME}' { print } ' | $AWK '{x[NR] = $0} END { for (i = NR; i > 0; i--) print x[i] }' > $BBHOME/tmp/events.$$ EVENTCOUNT=`$CAT $BBHOME/tmp/events.$$ | $WC` EVENTCOUNT=`echo $EVENTCOUNT` if test "$EVENTCOUNT" -gt "0" then if test $LASTMINUTES then if test "$EVENTCOUNT" = "1" then EVENTSTITLE="1 event received in the last $LASTMINUTES minutes"; elif test "$EVENTCOUNT" = "$NUMEVENTS" then TIMENOW=`$BBHOME/bin/touchtime -e 0`; export TIMENOW set `$TAIL -1 $BBHOME/tmp/events.$$` # DISPLAY HOW LONG IT TOOK TO REACH NUMEVENTS... # NEED TIME OF THE LAST ENTRY (THE EARLIEST ONE) LM=`$EXPR $TIMENOW - $3` LM=`$EXPR $LM / 60` EVENTSTITLE="$NUMEVENTS events received in the last $LM minutes"; else EVENTSTITLE="$EVENTCOUNT events received in the last $LASTMINUTES minutes"; fi else EVENTSTITLE="Last $NUMEVENTS events received"; fi echo "

" $CAT $BBHOME/tmp/events.$$ | while read line do OUT="" case "$BG" in 000000 ) BG="000033" ;; * ) BG="000000" ;; esac OUT="${OUT} " set $line case "$#" in 8 ) ;; * ) OUT="${OUT} " continue ;; esac HOST=$1 HOSTDIR=$HOST SERVICE=$2 ATDATE=`$BBHOME/bin/touchtime -c $3` FROMDATE=`$BBHOME/bin/touchtime -c $4` color=$7 bgcolor=$6 argnum=0 for color in $6 $7 do case "$color" in re ) color=red ;; pu ) color=purple ;; ye ) color=yellow ;; gr ) color=green ;; bl ) color=blue ;; cl ) color=clear ;; * ) color=clear ;; esac case "$argnum" in 0 ) tocolor=$color argnum=1 ;; * ) fromcolor=$color ;; esac done TOCOLORGIF=$tocolor TOCOLRALT="" #if [ -f "$BBVAR/acks/ack.${HOST}.${SERVICE}" ] #then # case $tocolor in # red | purple | yellow ) # TOCOLORGIF="$tocolor-ack" # TOCOLRALT=":acked" # ;; # esac #fi OUT="${OUT} " case "$tocolor" in clear ) OUT="${OUT} " ;; * ) OUT="${OUT} " ;; esac OUT="${OUT} " set $FROMDATE OUT="${OUT} " echo "${OUT}" done echo "
$EVENTSTITLE
Invalid line in 'hist/allevents'$ATDATE$HOST$HOST$SERVICE $fromcolor" set $ATDATE OUT="${OUT} \"From \"${tocolor}${TOCOLORALT}\"
" else EVENTSTITLE="No events received in the last $LASTMINUTES minutes" echo "

$EVENTSTITLE
" fi $RM -f $BBHOME/tmp/events.$$ exit 0 ./bb/bb19c/ext/mkbb/acklog.sh0100555002342100007640000000670407616533075013565 0ustar bbbb#!/bin/sh # # BIG BROTHER OVERALL EVENT LOGS HISTORY DISPLAY SCRIPT # Robert-Andre Croteau # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # This script should be called within mkbb.sh or mkbb2.sh # NUMACKS=25 SHOWMSG=TRUE # Set to TRUE if you want to first $MSGLEN characters to be displayed MSGLEN=30 # Only use the first $MSGLEN of the message LASTMINUTES=240 # How far back do you wand displayed TIME=`$BBHOME/bin/touchtime -e -$LASTMINUTES`; export TIME $TAIL -$NUMACKS $BBACKS/acklog 2>/dev/null | $AWK '$1 > '${TIME}' { print } ' | $AWK '{x[NR] = $0} END { for (i = NR; i > 0; i--) print x[i] }' > $BBHOME/tmp/acklog.$$ ACKCNT=`$CAT $BBHOME/tmp/acklog.$$ | $WC` ACKCNT=`echo $ACKCNT` if test "$ACKCNT" = "0" then EVENTSTITLE="No events acknowledged in the last $LASTMINUTES minutes" elif test "$ACKCNT" = "1" then EVENTSTITLE="1 event acknowledged in the last $LASTMINUTES minutes" elif test "$ACKCNT" = "$NUMACKS" then EVENTSTITLE="$ACKCNT events (or more) acknowledged in the last $LASTMINUTES minutes" else EVENTSTITLE="$ACKCNT events acknowledged in the last $LASTMINUTES minutes" fi echo "

" $CAT $BBHOME/tmp/acklog.$$ | while read line do if [ "$line" = "" ] then continue fi OUT="" OUT="${OUT} " set $line if [ "$#" -lt 7 ] then OUT="${OUT} " continue fi ACKMSG="" ACKTIME=`echo "$1" | $SED 's/[^0-9]//g'` if [ "$ACKTIME" = "" ] then continue fi if [ "$ACKTIME" -lt 900000000 ] then continue fi ACKGIF="-ack"; # Does the tag file still exists ? ACKEVENT="$6" if [ ! -f "$BBACKS/ack.$ACKEVENT" ] then # SMM continue ACKGIF=""; fi # Has the ACK expire ? Just in case the file wasn't removed TIMENOW=`$BBHOME/bin/touchtime -e` ACKDURATION=`$EXPR "$3" \* 60` ACKEXPIRES=`$EXPR "$ACKTIME" + "$ACKDURATION"` if [ "$ACKEXPIRES" -lt "$TIMENOW" ] then # SMM continue ACKGIF=""; fi ACKDATE="`$BBHOME/bin/touchtime -c $ACKTIME`" ACKNPID="$2" ACKNUMBER="$4" ACKRCPT=`echo "$5" | $SED -e 's/^np_//g' -e 's/_[^_]*$//g'` COLOR=$7 shift 7 if [ "$#" -gt 0 -a "$SHOWMSG" = "TRUE" ] then ACKMSG="`echo $* | $AWK '{printf "%.*s",'$MSGLEN',$0}' | $SED -e 's!%20! !g' -e 's/%21/!/g' -e 's!%22!\"!g' -e 's!%23!#!g' -e 's!%24!\$!g' -e 's!%25!\%!g' -e 's!%26!\&!g' -e \"s!%27!\'!g\" -e 's!%28!\(!g' -e 's!%29!\)!g' -e 's!%2[aA]!\*!g' -e 's!%2[bB]!+!g' -e 's!%2[cC]!,!g' -e 's!%2[dD]!\-!g' -e 's!%2[eE]!.!g' -e 's!%2[fF]!/!g' -e 's!%40!@!g' -e 's!%5[eE]!^!g'`" fi OLDIFS=$IFS IFS="." set $ACKEVENT IFS=$OLDIFS ACKHOST="$1" SVCNAME="???" shift while [ "$#" -gt 1 ] do ACKHOST="${ACKHOST}.$1" shift done if [ "$#" -ne 0 ] then SVCNAME="$1" fi OUT="${OUT} " OUT="${OUT} " OUT="${OUT} " if [ "$COLOR" != "black" ] then OUT="${OUT} " else OUT="${OUT} " fi OUT="${OUT} " OUT="${OUT} " echo "${OUT}" done echo "
$EVENTSTITLE
Invalid line in 'acks/acklog'$ACKDATE$ACKHOST$SVCNAME $ACKRCPT$ACKMSG
" $RM -f $BBHOME/tmp/acklog.$$ exit 0 ./bb/bb19c/ext/.helloworld0100644002342100007640000000000007616533075013210 0ustar bbbb./bb/bb19c/ext/ext-proto0100555002342100007640000000554507616533075012744 0ustar bbbb#!/bin/sh # ext-proto # # BIG BROTHER - PROTOTYPE EXTERNAL SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # SCRIPTS IN THE BBHOME/ext DIRECTORY ARE ONLY RUN IF # THEY ARE DEFINED IN THE ENTRY FOR THE CURRENT HOST # LISTED IN THE ext/bb-bbexttab FILE. # # # BBPROG SHOULD JUST CONTAIN THE NAME OF THIS FILE # USEFUL WHEN YOU GET ENVIRONMENT DUMPS TO LOCATE # THE OFFENDING SCRIPT... # BBPROG=ext-proto; export BBPROG # # TEST NAME: THIS WILL BECOME A COLUMN ON THE DISPLAY # IT SHOULD BE AS SHORT AS POSSIBLE TO SAVE SPACE... # NOTE YOU CAN ALSO CREATE A HELP FILE FOR YOUR TEST # WHICH SHOULD BE PUT IN www/help/$TEST.html. IT WILL # BE LINKED INTO THE DISPLAY AUTOMATICALLY. # TEST="wx" # # BBHOME CAN BE SET MANUALLY WHEN TESTING. # OTHERWISE IT SHOULD BE SET FROM THE BB ENVIRONMENT # # BBHOME=/home/sean/bb; export BBHOME # FOR TESTING if test "$BBHOME" = "" then echo "BBHOME is not set... exiting" exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # NOW COLLECT SOME DATA # IN THIS CASE, IT'S THE CURRENT TEMPERATURE IN CELCIUS # FOR MONTREAL, QUEBEC # SELECT SOME LEVELS... GREEN IS THE DEFAULT... WARN="10" # GO YELLOW AT THIS LEVEL PANIC="15" # GO RED AND PAGE AT THIS LEVEL # USING LYNX TO GRAB A WEB PAGE WITH THE CURRENT WEATHER ON IT /usr/local/bin/lynx -dump -source http://weather.ec.gc.ca/forecast/yul.html | $GREP "176" | $SED "2,\$d" > /tmp/OUTPUT.$$ if test -s "/tmp/OUTPUT.$$" # IF WE HAVE OUTPUT... then set `$CAT /tmp/OUTPUT.$$` RESULT=`echo $1 | $SED "s/\//"` set `echo $RESULT | $SED "s/\./ /"` # SHELL DOESN'T LIKE DECIMAL PTS RESULT="$1" # # DETERMINE RED/YELLOW/GREEN # if test "$RESULT" -ge "$PANIC" then COLOR="red" elif test "$RESULT" -ge "$WARN" then COLOR="yellow" else COLOR="green" fi else COLOR="clear" fi # # AT THIS POINT WE HAVE OUR RESULTS. NOW WE HAVE TO SEND IT TO # THE BBDISPLAY TO BE DISPLAYED... # # MACHINE NAME MUST EITHER BE A REAL MACHINE NAME, OR # LOOK LIKE A REAL MACHINE (in the case of arbitrary measurements # like temperature). IF THE NAME YOU ARE USING DOESN'T EXIST # IN THE DNS THEN IT SHOULD BE LISTED IN THE bb-hosts FILE WITH noping, # PREFERABLY IN IT'S OWN GROUP... # NOTE THE COMMAS HERE - YOU NEED THEM! MACHINE="montreal,quebec,canada" # HAS TO BE IN A,B,C FORM # # THE FIRST LINE IS STATUS INFORMATION... STRUCTURE IMPORANT! # THE REST IS FREE-FORM - WHATEVER YOU'D LIKE TO SEND... # LINE="status $MACHINE.$TEST $COLOR `date` The weather from Environment Canada `cat /tmp/OUTPUT.$$` Full Report" $RM -f /tmp/OUTPUT.$$ # NOW USE THE BB COMMAND TO SEND THE DATA ACROSS $BB $BBDISP "$LINE" # SEND IT TO BBDISPLAY ./bb/bb19c/ext/failover0100555002342100007640000001063507616533075012606 0ustar bbbb#!/bin/sh # failover # # BIG BROTHER - FAILOVER SCRIPT # Sean MacGuire # Version 1.9 # Mar 13th, 2002 # # (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. # # # failover WATCHES BBNET and BBPAGER # # IF BBNET OR BBPAGER BECOMES UNAVAILABLE, THEN TAKE OVER UNTIL THEY RETURN # # To use, just add failover to the BBEXT variable in etc/bbdef.sh # # To configure BBPAGER failover: # define both the primary and failover machines as BBPAGERS in etc/bb-hosts # and set bbwarn: FAILOVER in etc/bbwarnsetup.cfg # # BBNET failover is automatic when we can't reach the BBNET machine # BBNET should only be defined ONCE in the bb-hosts file, and should # not be defined on the failover machine (that's this one if you're # reading this!). # # However, if your BBNET machine is also your primary BBPAGER, then # you can have BBNET failover when BBPAGER failsover. This is useful # to detect the situation when the BBNET machine is still reachable but # BBNET isn't working because someone turned BB off... To enable this # behaviour, uncomment the following line: # FAILOVERBOTH=TRUE # FAILOVER BBNET WITH BBPAGER BBPROG=failover; export BBPROG # TEST="fo" COLOR="clear" # ASSUME ALL IS WELL... # # BBHOME CAN BE SET MANUALLY WHEN TESTING. # OTHERWISE IT SHOULD BE SET FROM THE BB ENVIRONMENT # # BBHOME=/home/sean/bb; export BBHOME # FOR TESTING if test "$BBHOME" = "" then echo "BBHOME is not set... exiting" exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # BBPAGER FAILOVER # # IF WE'RE A BBPAGER FAILOVER, THEN YOU'LL NEED 2 # BBPAGERS DEFINED IN etc/bb-hosts (PREFERABLY WITH # THE SAME RULES). THIS MACHINE *MUST* BE DEFINED AS # A BBPAGER FOR FAILOVER TO WORK. # # IF BBPAGER FAILOVER DOESN'T SEEM TO BE WORKING, THEN UNCOMMENT THE # NEXT LINE ONCE YOU'VE SET THE IP-ADDRESS OF YOUR PRIMARY BBPAGER # BBPAGE=123.123.123.123 # ENTER THE IP ADDR OF PRIMARY BBPAGER HERE # if test "$BBPAGERS" then # echo "BBPAGERS: $BBPAGERS BBPAGE: $BBPAGE" # WE'LL SEND A PAGE TO ALL THE BBPAGERS # IF ANY FAIL WE'LL GO INTO FAILOVER MODE... THIS DOESN'T MATTER # BECAUSE IF THE FAILOVER FAILS IT MAKES NO DIFFERENCE! # $BB $BBPAGE "dummy ${MACHINE}.${TEST} failover test" > $BBTMP/FO.$$ 2>&1 if test -s "$BBTMP/FO.$$" # SOMETHING FAILED... then $BB $BBPAGE "dummy ${MACHINE}.${TEST} failover test" > $BBTMP/FO.$$ 2>&1 if test -s $BBTMP/FO.$$ # AND FAILED AGAIN... then if test ! -f $BBTMP/FAILOVER-BBPAGER then date > $BBTMP/FAILOVER-BBPAGER fi fi fi if test ! -s "$BBTMP/FO.$$" # PAGING IS ALIVE then if test -f "$BBTMP/FAILOVER-BBPAGER" # FAILBACK then $RM -f $BBTMP/FAILOVER-BBPAGER fi if test "$FAILOVERBOTH" = "TRUE" then BBNETFO="" # RESTORE BBNET FAILOVER fi BBPLINE="&clear BBPAGER on standby" else if test "$FAILOVERBOTH" = "TRUE" then BBNETFO="TRUE" # FORCE BBNET FAILOVER fi COLOR="yellow" BBPLINE="&yellow BBPAGER failover since `cat $BBTMP/FAILOVER-BBPAGER`" fi $RM -f $BBTMP/FO.$$ fi # # IS THE BBNET MACHINE ALIVE? # SEE IF WE CAN PING IT... # BBNET=`$GREP BBNET $BBHOSTS | $GREP "^[0-9]" | $GREP -v "^\#"` if test "$BBNET" then set $BBNET BBNET="$2" # echo "BBNET is $BBNET" # BBNET="bobo.bb4.com" # TO TEST BROKEN BBNETS fi LINE=`$BBHOME/bin/bb-ping.sh $BBNET FALSE` if test "$?" != "0" || test "$BBNETFO" = "TRUE" then COLOR="yellow" # # NOW WE HAVE TO FAILOVER... ONCE. # PHILOSOPHICAL QUESTION AS TO WHAT COLOR THE DOT SHOULD BE # WHEN WE'RE IN FAILOVER MODE... MAYBE YELLOW (warning...) # OTHERWISE FAILOVER IS ON STANDBY (clear) # # BACKUP THE BBPID FILE if test ! -f $BBTMP/FAILOVER-BBNET then BBSLEEP=300; export BBSLEEP cp $BBPID $BBTMP/FAILOVER-BBNET # echo "*** CALLING BB-NETWORK ***" { nohup $BBHOME/bin/bbrun $BBHOME/bin/bb-network.sh ;} >> $BBOUT 2>&1 & fi BBNETLINE="&yellow BBNET failover running" else # # IF WE'RE BETTER, THEN WE CAN FAILBACK (IS THAT A WORD?) # if test -f $BBTMP/FAILOVER-BBNET then # KILL THE LAST PID kill -9 `tail -1 $BBPID` # TOAST bb-network.sh cp $BBTMP/FAILOVER-BBNET $BBPID rm -f $BBTMP/FAILOVER-BBNET fi BBNETLINE="&clear BBNET on standby" fi if test "$COLOR" = "yellow" then LINE="Failover is running" else LINE="Failover on standby" fi LINE="$LINE $BBPLINE $BBNETLINE" $BB $BBDISP "status ${MACHINE}.${TEST} $COLOR `date` $LINE" ./bb/bb19c/ext/bb-memory.sh0100755002342100007640000002526507616533075013310 0ustar bbbb#!/bin/sh # $Id: bb-memory.sh,v 2.0.0.1 2000/09/05 17:41:23 brs Exp $ # # @(#)bb-memory.sh Bennett Samowich # External script to check physical and swap memory usage. # # 12/21/1999 - Original posting included support for Linux and Solaris. # Todd Jimenez # 01/03/2000 - Modified to this format and added AIX and HPUX support. # Bennett Samowich # 07/19/2000 - OSF1/Digital UNIX/Tru64 support added # Dean Thayer # 07/21/2000 - Modified Linux to test actual memory usage # Fixed the prtconf path error in solaris # Tal Ovadia # 07/27/2000 - Added Debian support as confirmed by Christian Perrier # # Bennett Samowich # 08/23/2000 - Added Irix support as confirmed by Paco Culebras Amigo # # Bennett Samowich # 08/24/2000 - Added handling for tests that may not be performed. # Recommended by Mike Rowell . # Also, fixed divide by zero bug in percentage calculations. # Bennett Samowich # 05/24/2001 - Added a small c program for HP-UX to figure out how much # memory is in the machine. dmesg failed when there were # many kernel messages. # Ian Prowell # 12/30/2001 - Fixed some minor formatting issues when data is sent to the # $BBDISPLAY. David Fetter # ####################################################################### # VERSION INFORMATION VERSION="\$Id: bb-memory.sh,v 2.0.0.1 2000/09/05 17:41:23 brs Exp $" # # SCRIPTS IN THE BBHOME/ext DIRECTORY ARE ONLY RUN IF # LISTED IN THE BBEXT VARIABLE OF $BBHOME/runbb.sh # THIS IS FOR SECURITY. # # # BBPROG SHOULD JUST CONTAIN THE NAME OF THIS FILE # USEFUL WHEN YOU GET ENVIRONMENT DUMPS TO LOCATE # THE OFFENDING SCRIPT... # BBPROG=bb-memory.sh; export BBPROG # # TEST NAME: THIS WILL BECOME A COLUMN ON THE DISPLAY # IT SHOULD BE AS SHORT AS POSSIBLE TO SAVE SPACE... # NOTE YOU CAN ALSO CREATE A HELP FILE FOR YOUR TEST # WHICH SHOULD BE PUT IN www/help/$TEST.html. IT WILL # BE LINKED INTO THE DISPLAY AUTOMATICALLY. # TEST="memory" # # BBHOME CAN BE SET MANUALLY WHEN TESTING. # OTHERWISE IT SHOULD BE SET FROM THE BB ENVIRONMENT # # BBHOME=/home/sean/bb; export BBHOME # FOR TESTING if test "$BBHOME" = "" then echo "BBHOME is not set... exiting" exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # NOW COLLECT SOME DATA # IN THIS CASE, IT'S THE CURRENT MEMORY USAGE OF THE SYSTEM # SELECT SOME LEVELS... GREEN IS THE DEFAULT... PERCENT_PHYS_WARN="100" # GO YELLOW AT THIS LEVEL PERCENT_PHYS_PANIC="101" # GO RED AND PAGE AT THIS LEVEL PERCENT_ACT_WARN="90" # GO YELLOW AT THIS LEVEL PERCENT_ACT_PANIC="99" # GO RED AND PAGE AT THIS LEVEL PERCENT_SWAP_WARN="80" # GO YELLOW AT THIS LEVEL PERCENT_SWAP_PANIC="90" # GO RED AND PAGE AT THIS LEVEL # INITIALIZE SOME VALUES PHYS_MEMORY=0 PHYS_MEMORY_USED=-1 ACT_MEMORY=0 ACT_MEMORY_USED=-1 SWAP_MEMORY=0 SWAP_MEMORY_USED=-1 # The following operating systems are supported: case $BBOSTYPE in linux | redhat | debian ) FREE=`/usr/bin/free -m` FREE_PHYS=`echo "$FREE" | $GREP "Mem"` FREE_ACT=`echo "$FREE" | $GREP "+"` FREE_SWAP=`echo "$FREE" | $GREP "Swap"` PHYS_MEMORY=`echo $FREE_PHYS | $AWK '{ print $2; }'` PHYS_MEMORY_USED=`echo $FREE_PHYS | $AWK '{ print $3; }'` ACT_MEMORY_USED=`echo $FREE_ACT | $AWK '{ print $3; }'` SWAP_MEMORY=`echo $FREE_SWAP | $AWK '{ print $2; }'` SWAP_MEMORY_USED=`echo $FREE_SWAP | $AWK '{ print $3; }'` ;; solaris ) PRTCONF=`/usr/sbin/prtconf` PHYS_MEMORY=`echo "$PRTCONF" | $GREP "Mem" | $AWK '{print $3}'` VMSTAT=`/bin/vmstat 1 2 | $TAIL -1` PHYS_MEMORY_FREE=`echo $VMSTAT | $AWK '{print $5;}'` PHYS_MEMORY_FREE=`$EXPR $PHYS_MEMORY_FREE / 1024` PHYS_MEMORY_USED=`$EXPR $PHYS_MEMORY - $PHYS_MEMORY_FREE` SWAP=`/usr/sbin/swap -s` SWAP_MEMORY_USED=`echo $SWAP | $AWK '{print $9}' | $SED 's/k//'` SWAP_MEMORY_USED="`$EXPR $SWAP_MEMORY_USED / 1024`" SWAP_MEMORY_FREE=`echo $SWAP | $AWK '{print $11}' | $SED 's/k//'` SWAP_MEMORY_FREE="`$EXPR $SWAP_MEMORY_FREE / 1024`" SWAP_MEMORY="`$EXPR $SWAP_MEMORY_USED + $SWAP_MEMORY_FREE`" ;; aix ) MEMORY=`bootinfo -r` PHYS_MEMORY=`$EXPR $MEMORY / 1024` VMSTAT=`/usr/bin/vmstat 1 2 | $TAIL -1` PHYS_MEMORY_FREE=`echo $VMSTAT | $AWK '{print $4;}'` PHYS_MEMORY_FREE=`$EXPR $PHYS_MEMORY_FREE / 256` PHYS_MEMORY_USED=`$EXPR $PHYS_MEMORY - $PHYS_MEMORY_FREE` SWAP=`pstat -s` SWAP_MEMORY_USED=`echo $SWAP | $AWK '{print $7}'` SWAP_MEMORY_USED=`$EXPR $SWAP_MEMORY_USED / 256` SWAP_MEMORY_FREE=`echo $SWAP | $AWK '{print $8}'` SWAP_MEMORY_FREE=`$EXPR $SWAP_MEMORY_FREE / 256` SWAP_MEMORY=`$EXPR $SWAP_MEMORY_FREE + $SWAP_MEMORY_USED` ;; hpux ) DMESG=`/sbin/dmesg | $GREP 'Physical.*lockable.*available'` PHYS_MEMORY=`$BBHOME/bin/pstat | $AWK '{print $NF}'` PHYS_MEMORY=`$EXPR $PHYS_MEMORY / 1024` VMSTAT=`/usr/bin/vmstat 1 2 | $TAIL -1` PHYS_MEMORY_FREE=`echo $VMSTAT | $AWK '{print $5;}'` PHYS_MEMORY_FREE=`$EXPR $PHYS_MEMORY_FREE / 256` PHYS_MEMORY_USED=`$EXPR $PHYS_MEMORY - $PHYS_MEMORY_FREE` SWAPINFO=`/usr/sbin/swapinfo -tm | $GREP "total"` SWAP_MEMORY=`echo $SWAPINFO | $AWK '{print $2}'` SWAP_MEMORY_USED=`echo $SWAPINFO | $AWK '{print $3}'` SWAP_MEMORY_FREE=`echo $SWAPINFO | $AWK '{print $3}'` ;; osf ) VMSTAT='/bin/vmstat -P' PHYS_MEMORY=`$VMSTAT | $GREP "Total Physical Memory" | \ $AWK {'print $5'} | $HEAD -n 1 | cut -d. -f1` PHYS_MEMORY_KB=`$EXPR $PHYS_MEMORY \* 1024` PHYS_MEMORY_FREE_PAGES=`$VMSTAT | $GREP "free pages" | $AWK {'print $4'}` PHYS_MEMORY_FREE_KB=`$EXPR $PHYS_MEMORY_FREE_PAGES \* 8` PHYS_MEMORY_USED_KB=`$EXPR $PHYS_MEMORY_KB - $PHYS_MEMORY_FREE_KB` PHYS_MEMORY_USED=`$EXPR $PHYS_MEMORY_USED_KB / 1024` SWAPON='/sbin/swapon -s' SWAP_MEMORY_PAGES=`$SWAPON | $GREP "Allocated space:" | \ $AWK {'print $3'} | $TAIL -n 1` SWAP_MEMORY=`$EXPR $SWAP_MEMORY_PAGES \* 8 / 1024` SWAP_MEMORY_USED_PAGES=`$SWAPON | $GREP "In-use space:" | \ $AWK {'print $3'} | $TAIL -n 1` SWAP_MEMORY_USED=`$EXPR $SWAP_MEMORY_USED_PAGES \* 8 / 1024` ;; irix ) TOP=`/usr/sbin/top -b | $GREP "Memory:"` PHYS_MEMORY=`echo $TOP | $AWK {'print $4'} | $SED 's/M//'` PHYS_MEMORY_USED=`echo $TOP | $AWK {'print $4'} | $SED 's/M//'` PHYS_MEMORY_FREE=`echo $TOP | $AWK {'print $6'} | $SED 's/M//'` PHYS_MEMORY_USED=`$EXPR $PHYS_MEMORY - $PHYS_MEMORY_FREE` SWAP_MEMORY=`echo $TOP | $AWK {'print $8'} | $SED 's/M//'` SWAP_MEMORY_FREE=`echo $TOP | $AWK {'print $10'} | $SED 's/M//'` SWAP_MEMORY_USED=`$EXPR $SWAP_MEMORY - $SWAP_MEMORY_FREE` ;; * ) COLOR="clear" STATUS="??? Unknown ???" LINE=" Memory routine not defined for this operating system ($BBOSTYPE)" $BB $BBDISP "status $MACHINE.$TEST $COLOR `date` - $STATUS $LINE" exit 1 ;; esac if [ $PHYS_MEMORY -eq 0 ] then exit 0 fi # CALCULATE THE PERCENTAGE OF MEMORY USED. WE MUST # ALSO COVER FOR THE DIVIDE-BY-ZERO POSSIBILITY. PERCENT_PHYS_MEMORY_USED=0 PERCENT_ACT_MEMORY_USED=0 PERCENT_SWAP_MEMORY_USED=0 if [ $PHYS_MEMORY -gt 0 ] then PERCENT_PHYS_MEMORY_USED=`$EXPR 100 \* $PHYS_MEMORY_USED / $PHYS_MEMORY` PERCENT_ACT_MEMORY_USED=`$EXPR 100 \* $ACT_MEMORY_USED / $PHYS_MEMORY` fi if [ $SWAP_MEMORY -gt 0 ] then PERCENT_SWAP_MEMORY_USED=`$EXPR 100 \* $SWAP_MEMORY_USED / $SWAP_MEMORY` fi COLOR="green" STATUS="Memory OK" # CONSTRUCT THE STATUS LINE FOR THE PHYSYSICAL MEMORY USAGE. IF THE TEST # WAS NOT PERFORMED, THEN WE WILL DISPLAY WHAT INFORMATIOn WE HAVE # ALONG WITH THE "CLEAR" MARKER TO SHOW THAT THE TEST WAS NOT PERFORMED. if [ $PHYS_MEMORY_USED -ge 0 ] then if [ $PERCENT_PHYS_MEMORY_USED -ge $PERCENT_PHYS_PANIC ] then COLOR="red" PHYS_COLOR="red" STATUS="Memory **very** low" else if [ $PERCENT_PHYS_MEMORY_USED -ge $PERCENT_PHYS_WARN ] then PHYS_COLOR="yellow" if [ "$COLOR" != "red" ] then COLOR="yellow" STATUS="Memory low" fi else PHYS_COLOR="green" fi fi else PHYS_COLOR="clear" fi LINE=" Memory Used Total Percentage &${PHYS_COLOR} Physical ${PHYS_MEMORY_USED}M ${PHYS_MEMORY}M ${PERCENT_PHYS_MEMORY_USED}%" # CONSTRUCT THE STATUS LINE FOR THE ACTUAL MEMORY USAGE. IF THE TEST # WAS NOT PERFORMED, THEN WE WILL DISPLAY WHAT INFORMATIOn WE HAVE # ALONG WITH THE "CLEAR" MARKER TO SHOW THAT THE TEST WAS NOT PERFORMED. if [ $ACT_MEMORY_USED -ge 0 ] then if [ $PERCENT_ACT_MEMORY_USED -ge $PERCENT_ACT_PANIC ] then COLOR="red" ACT_COLOR="red" STATUS="Memory **very** low" else if [ $PERCENT_ACT_MEMORY_USED -ge $PERCENT_ACT_WARN ] then ACT_COLOR="yellow" if [ "$COLOR" != "red" ] then COLOR="yellow" STATUS="Memory low" fi else ACT_COLOR="green" fi fi else ACT_COLOR="clear" fi LINE="$LINE &${ACT_COLOR} Actual ${ACT_MEMORY_USED}M ${PHYS_MEMORY}M ${PERCENT_ACT_MEMORY_USED}%" # CONSTRUCT THE STATUS LINE FOR THE SWAP MEMORY USAGE. IF THE TEST # WAS NOT PERFORMED, THEN WE WILL DISPLAY WHAT INFORMATIOn WE HAVE # ALONG WITH THE "CLEAR" MARKER TO SHOW THAT THE TEST WAS NOT PERFORMED. if [ $SWAP_MEMORY_USED -ge 0 ] then if [ $PERCENT_SWAP_MEMORY_USED -ge $PERCENT_SWAP_PANIC ] then COLOR="red" SWAP_COLOR="red" STATUS="Memory **very** low" else if [ $PERCENT_SWAP_MEMORY_USED -ge $PERCENT_SWAP_WARN ] then SWAP_COLOR="yellow" if [ "$COLOR" != "red" ] then COLOR="yellow" STATUS="Memory low" fi else SWAP_COLOR="green" fi fi else SWAP_COLOR="clear" fi LINE="$LINE &${SWAP_COLOR} Swap ${SWAP_MEMORY_USED}M ${SWAP_MEMORY}M ${PERCENT_SWAP_MEMORY_USED}%" # ADD THE VERSION INFORMATION TO THE BOTTOM OF THE DISPLAY # LINE="$LINE # # $VERSION # " # # AT THIS POINT WE HAVE OUR RESULTS. NOW WE HAVE TO SEND IT TO # THE BBDISPLAY TO BE DISPLAYED... # $BB $BBDISP "status $MACHINE.$TEST $COLOR `date` - $STATUS $LINE" ./bb/bb19c/ext/bb-root.sh0100701002342100007640000000702107616533075012740 0ustar bbbb#!/bin/sh ################################################################# # bb-root.sh J. David Schronce david.schronce@techie.com # Wed Dec 05 10:23:14 EST 2001 # # A Big Brother External Script # Monitors wtmp for root logins # Displays data in BB 'root' column # ################################################################# # This software is provided as-is. J. David Schronce # makes no claims towards its suitability for any purpose # and accepts absolutely no liability for any damages # the software may cause. Use at your own risk. # # But for God's sake - read the freakin' instructions! ################################################################# # # Instructions: Modify the variables BBHOME, LOG_HIST_COUNT and WARNCOLOR # to match your system and monitoring requirements. # # Add an entry for bb-root.sh in EXT definitions # STOP and START BB # # If you remove bb-root.sh you must also # delete the *.root data from ~/bbvar/logs # or it will go PURPLE on you. Also remove # $BBTMP/bb-root.dat - just for good housekeeping # ################################################################# # # Uncomment the line below to run manually # #DEBUG="Y" # # INITIALIZE VARIABLES WE'LL BE NEEDING # TEST="root" # THE NAME OF OUR TEST LOG_HIST_COUNT=10 # Number of root logins to archive WARNCOLOR="red" # Color to turn when new login occurs if test "$DEBUG" = "Y" then echo "*** BEGIN: ROOT TEST ***" set -xv BBHOME=/bb; export BBHOME fi ################################################################# # # NO CONFIGURATION BEYOND THIS POINT # ################################################################# # # Check that we have a basic environment setup # if test "$BBHOME" = "" then echo ERROR: BBHOME variable not set exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # THE hostname COMMAND MUST RETURN THE FULL MACHINE NAME (ASSUMING FQDN) # AND REPLACE "." WITH "," MACHINE=`hostname | $SED 's/\./,/g'` # # Check for processes in `ps` # LINE="" COLOR="green" # look for data file if [ -f $BBTMP/bb-root.dat ] then # perform test here # get last entry from bb-root.dat LASTTIME=`head -1 $BBTMP/bb-root.dat | $AWK '{print $7}'` newroot=`last root -1 | $GREP root | $GREP -v $LASTTIME | wc -l` if [ $newroot -gt 0 ] then echo "WARNING: ROOT LOGIN(S) OCCURRED!" > $BBTMP/$TEST last root -1 | $GREP root \ >> $BBTMP/$TEST COLOR=$WARNCOLOR # reset history file to accomodate new logins last root | head -$LOG_HIST_COUNT > $BBTMP/bb-root.dat else echo "No new root logins since `head -1 $BBTMP/bb-root.dat | $AWK '{print $1 $2 $3 $4 $5 $6 $7}'`" > $BBTMP/$TEST fi else # initialize bb-root.dat with last root login last root | head -$LOG_HIST_COUNT > $BBTMP/bb-root.dat echo "bb-root initialized `date`" > $BBTMP/$TEST fi # FORMAT IT PROPERLY FOR BB... LINE="status $MACHINE.$TEST $COLOR `date` $LINE `cat $BBTMP/$TEST` Most recent root logins: `cat $BBTMP/bb-root.dat` " # # Send a status update to the Big Brother display unit # # # Debugging # if test "$DEBUG" = "Y" then echo "COLOR = ${COLOR}" echo "LINE = ${LINE} `cat $BBTMP/$TEST`" echo "*** END: MISC TEST ***" else $BB $BBDISP "$LINE" # SEND IT TO BBDISPLAY fi # # END OF bb-root.sh # ./bb/bb19c/ext/bb-top-3_2.sh0100755002342100007640000002030707616533075013153 0ustar bbbb#!/bin/sh # # top: Sun Enterprise Server check - BB external script test # # version 1.0 # version 2.0 - now supports aix # version 2.1 - now supports RedHat 6.1 # version 2.2 - properly uses $CAT instead of cat # version 2.3 - properly uses $MACHINE instead of `uname -n` in bb-hosts check # version 2.4 - properly uses $THIS_HOST instead of $MACHINE due to fqdn # using comma in name - thanks Craig Cook # version 3.0 - updates to work properly with BB 1.6 # version 3.1 - changed /tmp to $BBTMP # top to $TEST # $THIS_HOST to $MACHINE # removed code that checked for the existence of "top" # after the server name in bb-hosts # corrected red status warning - now does show red # version 3.2 - removed
statements, and other html # formatting, now more "browser friendly" # applied Todd Jimenez style get_header and get_footer functions # added check for bbsys.local vars being set # top options are now set using a case statement, for OS version # restored functionality to check for the existence of "top" # after the server name in bb-hosts, but now optional # changed &red and &yellow to variables # # BIG BROTHER / XXXXXXXXXXXXXXXX status # # Written by Paul A. Luzzi # on March 22, 2000 # # 3.0 Updates by David Levin 3 Jan 2001 # 3.1 Updates by Craig Cook 26 Apr 2001 # 3.2 Updates by Craig Cook 31 Oct 2001 # Feedback/Enhancements welcome: cncook "at" usa dot net ######################################## # NOTE # This has been tested with BB 1.8c # # Tested on : # Sun Solaris ######################################## ######################################## # INSTALLATION # step 1 - update bb-bbexttab to include this bb-top.sh # (older BB versions update EXT section of the bbdef.sh script # to include this bb-top.sh) # # step 2 - check the section starting with "case $BBOSTYPE", you may need # to change the parameters for top, or add your unix version # # step 3 - copy lines mentioned to bbsys.local (without the #'s) # # step 4 - if you are using an older version of BB without bb-bbexttab # and you don't want this run on every client uncomment # CHECK_BB_HOSTS="Y" and add the name of this test to # bb-hosts for this client. eg. # myserver1.domain.com # top # # step 5 - restart Big Brother # # NOTE - the TEST variable in the configuration section, this is the name used # as the column header and in the BB-HOSTS file. ######################################## ################################## # CONFIGURE IT HERE ################################## TEST="top" BBPROG=$0; export BBPROG # # Start of lines to put in bbsys.local # TOP="/usr/bin/top" # export TOP # End of lines to put in bbsys.local # # define colours for graphics RED_PIC="&red" YELLOW_PIC="&yellow" # don't scan through bb-hosts every time # this is here for older BB versions without bb-bbexttab # uncomment to activate #CHECK_BB_HOSTS=Y # Set options for top case $BBOSTYPE in solaris ) TOP_OPT="-b 30" ;; linux ) LINUX="Y" TOP_OPT="-b" ;; * ) TOP_OPT="-b 30" ;; esac ################################## # Start of script ################################## if test ! "$BBHOME" then echo "template: BBHOME is not set" exit 1 fi if test ! -d "$BBHOME" then echo "template: BBHOME is invalid" exit 1 fi if test ! "$BBTMP" # GET DEFINITIONS IF NEEDED then # echo "*** LOADING BBDEF ***" . $BBHOME/etc/bbdef.sh # INCLUDE STANDARD DEFINITIONS fi # # Define header # get_header() { echo "" echo "$1 ($2 $3)" echo "" #If you do not want the header in a bigger font use line below instead # echo "$1 ($2 $3)" } # # Define footer # get_footer() { echo "" echo "" #echo "

" } ##### ##### Get Status proc - used to get all responses ##### get_status() { ##### ##### Setup any and all variables before beginning. ##### # Check defaults have been set if [ "$TOP" = "" ]; then TOP="/usr/bin/top" echo "" echo "$YELLOW_PIC TOP command is not defined in etc/bbsys.local - using default: $TOP" fi if [ "$TOP_OPT" = "" ]; then TOP_OPT="-b 30" echo "" echo "$YELLOW_PIC TOP_OPT is not defined in etc/bbsys.local - using default: $TOP_OPT" fi ##### ##### Modified extensively on 03-22-2000 by Paul A. Luzzi ##### for use with Big Brother ##### ##### Purpose is to report back to a central server, all "standard" ##### detailed information about network, disk, volume, cpu, memory ##### which is not reported thru regular "easy" checks. ##### ##### ##### Setup some variables for use later ##### COLOR="green" ## COLOR="clear" ##### ##### Top Processes ##### get_header "Top Process Info" "$TOP" "$TOP_OPT" if [ "$LINUX" = "Y" ]; then ##### ##### Linux box ##### CATCH_COMMAND=` $TOP $TOP_OPT | $HEAD -30 > $BBTMP/$MACHINE.$TEST.log ` else ##### ##### Unix box ##### CATCH_COMMAND=` $TOP $TOP_OPT > $BBTMP/$MACHINE.$TEST.log ` fi RESULT_FLAG="$?" if [ -s "$BBTMP/$MACHINE.$TEST.log" ]; then $CAT $BBTMP/$MACHINE.$TEST.log else COLOR="yellow" echo "Problem with top command." fi ##### ##### Having trouble passing Threshold variable into awk, ##### so it is currently setup as a literal, 20.00%. ##### if [ "$LINUX" = "Y" ]; then ##### ##### Linux box - seems to be head unix amount + 9 ##### YELLOW_STATUS=`$TOP -b $LINUX_TOP | $HEAD -14 | $TAIL -6 | $AWK ' $10 ~ /[2-3][0-9].[0-9][0-9]/ \ { print $2" job, pid "$1" is at "$10" and is using "$6" of memory." } ' ` RED_STATUS=`$TOP -b $LINUX_TOP | $HEAD -14 | $TAIL -6 | $AWK ' $10 ~ /[4-9][0-9].[0-9][0-9]/ \ { print $2" job, pid "$1" is at "$10" and is using "$6" of memory." } ' ` else ##### ##### Unix box ##### YELLOW_STATUS=`$TOP -b 5 | $TAIL -6 | $AWK ' $10 ~ /[2-3][0-9].[0-9][0-9]/ \ { print $2" job, pid "$1" is at "$10" and is using "$6" of memory." } ' ` RED_STATUS=`$TOP -b 5 | $TAIL -6 | $AWK ' $10 ~ /[4-9][0-9].[0-9][0-9]/ \ { print $2" job, pid "$1" is at "$10" and is using "$6" of memory." } ' ` fi if [ ! -z "$YELLOW_STATUS" ]; then COLOR="yellow" # echo "


" echo "$YELLOW_PIC Jobs running at greater than 20% :" echo "$YELLOW_STATUS" fi if [ ! -z "$RED_STATUS" ]; then COLOR="red" # echo "


" echo "$RED_PIC Jobs running at greater than 40% :" echo "$RED_STATUS" fi ##### ##### Make sure to export COLOR so that it gets back to "central" ##### export COLOR ##### ##### End of get_status proc ##### } ##### ##### Main body ##### #not needed since will be auto created #touch $BBTMP/$MACHINE.$TEST if [ "$CHECK_BB_HOSTS" = "Y" ]; then # convert "," to "." in the hostname MACHINE_WITH_DOTS=`echo $MACHINE | $SED 's/,/\./g'` $GREP $MACHINE_WITH_DOTS $BBHOSTS | $GREP "$TEST" | while read line do if [ ! -z "$line" ]; then get_status > $BBTMP/$MACHINE.$TEST # NOW USE THE BB COMMAND TO SEND THE DATA ACROSS $BB $BBDISP "status $BBTMP/$MACHINE.$TEST $COLOR `$DATE` `$CAT $BBTMP/$MACHINE.$TEST` " fi done else get_status > $BBTMP/$MACHINE.$TEST # NOW USE THE BB COMMAND TO SEND THE DATA ACROSS $BB $BBDISP "status $MACHINE.$TEST $COLOR `$DATE` `$CAT $BBTMP/$MACHINE.$TEST` " fi # Clean up our mess # Checking for existence of files since the whole test may be optional # and may not actually run on every client # if [ -f $BBTMP/$MACHINE.$TEST ]; then $RM $BBTMP/$MACHINE.$TEST $BBTMP/$MACHINE.$TEST.log fi ############################################## # end of script ############################################## ./bb/bb19c/www/0040755002342100007640000000000007616533101011063 5ustar bbbb./bb/bb19c/www/rep/0040755002342100007640000000000007616533075011663 5ustar bbbb./bb/bb19c/www/rep/.helloworld0100644002342100007640000000000007616533075014022 0ustar bbbb./bb/bb19c/www/gifs/0040755002342100007640000000000007616533076012026 5ustar bbbb./bb/bb19c/www/gifs/yellow-ack.gif0100644002342100007640000000011107616533076014552 0ustar bbbbGIF89a€ÿÿ!ù, „©‹ŒmiÎ5ëÎ=ø‘Œ.]ªn“c¾±g;./bb/bb19c/www/gifs/red.gif0100644002342100007640000000200007616533076013254 0ustar bbbbGIF89a‚3f™Ìÿÿ3!ÿ NETSCAPE2.0!ù ,ºÜþ0ÊIW¸3ˆ!‚„AR0\)¬^V½p%!ù ,ºÜþ0ÊI_)êJ øÆ•q¢C‚Uª®,”!ù ,ºÜþ0Ê©Š³°`-9ðF‘G^›x­Të¾m!ù ,ºÜþ0ºé¼Õ›Õ–~£&Nft+[p, !ù ,)ºÜþ®@%Y¯Œ¡ömC¡…Dz¥yrºµ¢kÆ'4vaf76ýÀE!ù ,/ºÜþ®@%Y©cÐjK¾Ç WéA¤y:©×jÍû>m ³êÚ€ia°Ën“!ù ,.ºÜþ®@%Y¯Œ¡ömC¡…PšÚ²Ýëœé:‹žÝŒñ·ø¿ÝD5, !ù ,&ºÜZÎÁ×´õ2X:¯@÷hh‘X™I™fFæËz «à…Ú “!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0Effect frame 1 rotated 0°Effect frame 2 rotated 30°Effect frame 3 rotated 60°Effect frame 4 rotated 90°Effect frame 5 rotated 120°Effect frame 6 rotated 150°  Clipboard  Clipboard;./bb/bb19c/www/gifs/purple.gif0100644002342100007640000000316607616533076014027 0ustar bbbbGIF89a™™ÿÿ3!ÿ NETSCAPE2.0!ù ,4„©Ë7ÑŒ)ØÄ0B¯Ñy@&u™¡Hˆ¢(¬™åžIZW¬àtÊ`¥xŒ¢6Š!ù ,3„©Ëí›IŽØ‚ØÂÈÄmš±špvÁŠZ$uGÚÞ/p*‚Ž+ùP1Ù‚%R!ù ,5„©ËíïF@ž „šœt¢"ÂÀ¥dx Áë¹,übÞqrîûa]h22ædnD!ù ,4„©Ëí„„2ˆ'GMh[ }Á)]@pêzk„žÇÒ«­æQ¸)™“9†‰!ù ,3„©Ëí„”lLDÃΰ™8j ¤#˜€Ø¢å°UghGÁ`ë!&5‘CÄ1A!ù ,2„©ËÍ bлhÕÊ$láH)'† ¦ƒÉn\™ÉdV±Àð2¨ÒCÌ4²Æ+àH !ù ,6„©7›…;"Ø6!Q.É]šZÜ0R•µVž ¦!ÜqÕh¼øùvÓdÑ;&å¤!ù ,4„©Ë M†(–…bäô@yßQ^êsÙz±É ²X~Û¢ck\(¿†qq9*—‰!ù ,6„©Ë .âS!Äc'Š£z› BxQ &Y]蘢fÝ8¦‰-õ”!ÉÐjˆ£al(—Ìæ¡!ù ,6„©²9„tψâ\ „oQ\Ö™Ù|¢·6æ%’ÓÙDƒ±{·© dšŠEf ½’Ìf³!ù ,4„©Ë'#‚h@ 2»& ©\\4NÇeÁ*™I¤jÒ²¬‹dd¼´ÙiÀtGI*—†!ù ,3„©Ë0Z˜AXñRt¸ø ÖbU”À\Ôƒj¥É.f-¢bô ßÎ;\,¢ el(—!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0 Effect frame 1 rotated 359°Effect frame 2 rotated 329°Effect frame 3 rotated 299°Effect frame 4 rotated 269°Effect frame 5 rotated 239°Effect frame 6 rotated 209°Effect frame 7 rotated 179°Effect frame 8 rotated 149° Effect frame 9 rotated 119° Effect frame 10 rotated 89° Effect frame 11 rotated 59° Effect frame 12 rotated 29°;./bb/bb19c/www/gifs/green.gif0100644002342100007640000000021207616533076013605 0ustar bbbbGIF89a³ ÿÿÿ&š) ˆ"v ÿ×tc!ù ,@70ÉI+%D„½±˜ ŽÅg¨„¤WÆu&UÌGmÇl®KXߧÐ+à¹^Å fÀl&-†¨4º«¢";./bb/bb19c/www/gifs/clear.gif0100644002342100007640000000153607616533076013605 0ustar bbbbGIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¤Èðÿ¥ïÿŒÖÿ1{ÿ!cÿZÿRÿRÿRÿJïBçBÞB¿¿¿ÖBÖBÎc„Îc{ÎBkÎJÎ9ƽ½Æ{”Æ{ŒÆ9½9½1µ1­1œJcœ)”)Œ1J„1„)s1s!k!cZ!ZJJw3f™Ì3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿ3ÿfÿ™3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3ÌÿÿÌ3ÿ3ÿ33ÿf3ÿ™3ÿÌff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿ3ÿÿfÿfÿ3fÿffÿ™fÿÌ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿfÿÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3Ìff™ÿÿÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿ3ÿfÿ™ÿÌÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,;H° Áƒ&ìv€!C„ FT8p¢À‡Ý&Z”XpãF÷( Ùñà=’%G¢4ÈðäI‘0cÆ ;./bb/bb19c/www/gifs/blue.gif0100644002342100007640000000026207616533076013441 0ustar bbbbGIF89a³3f™Ìÿ333f3™3Ì3ÿ!ù,@_H@­“DTù`‘X IWxé`N¦€ Ülbp ô ÓAHÑS°á4—W&0ünSË.•"È$!ò|Ã'Bñ£ ^:õ:á+ér/=œÓ]¥Y0;./bb/bb19c/www/gifs/bkg2.gif0100644002342100007640000000734307616533076013346 0ustar bbbbGIF87a ÄüÊœÔÊÄìʬÜʼôʬôʤäÊ´ÜÊÄÌÊÌäʼüʤìÊ´ÔÎÌüÎœÔÎÄìάÜμôάôΤäδÜÎÄÌÎÌäμüΤìδ, ÿ`U!ãÈ hª¦gÕ¾/ù.ÍЕsêÌ]ÿ1nÇ@RÉt0ŸJgpê¬Jì5û¤±^ÇÁé`Í´úì…PÜñ’¦ ì‡YŸŸû!z‚ƒƒ€€„ˆ‰ƒŒŽ z •–— Ÿž¡œ£¤¥¦§¤¨©ªªœ ª­² ·ºº ¾À¿¿ÄÀÅÇÉÈÉÍÄÏÑÏÕáãââèèØééçíçñ óó óûú@P`Aƒ ô\Èa#BœØpâC‡\<¨Oã?ýþ‰lp=òäÿ±[ÉžËr°‹Ðí[ÌšÚ¬AÛ)g³ŸÍ1+&,˜€ GâZ +Ö¬ZO¶šúj•UV¥2Å”L˜(‰M0¶l$D‡ 2ô'PZµlÙêC—:pP8Ã7M_4tÄù2X —-O¬(¦eJc$“8!B¹Hå˜èМهg1\È-b‹¨Q” ºu Ö'b»6A"€f¶à®÷‰#¾s€ÖÍ€7hÛD4ÓHr£9ó%‘£La@áÆbÇ^²È^xÌöï~¼“ÀtìˆIOþûðë@Wú9òóÓqÏßÍÿv ~e Y¨`ÿ# :Èz$à “T(V+›P¨¡…“tå¡WºòÕ ˆh",SMe -M%EKRHMðS»ÔÈ‹`à‹PÄè8<Ò¤ 2Ü€Cd7ÖhÃLáxãä6PÆô$<)¡s<û\©%@\^)P$tϘ] QB e”æš Iä¦EpÂùfstÑ›j „¦G$Df>$¡Y–ä“<(%*Á•UÆ¥71I¥’8Ý´d5Efƒ¤‘Ðä©2Èèè#¨Ä c㩼ü£5¶rT,@‹T'NP+U¸’¨k‰™ðº«*]5Âá†BÈ„Æj‚lƒÛ ‚š(˜ %mrÿqdÛ|ä… î¸w”GxmÈ‘nyðå×n`ä7†RhgïwÞM6†uŽAÇË9'ðºWð ·!\pIÜV°qÓ0›l¢ÉFñl"°F[k©¡ ›Ä±½¶šï¶gËÕpo9\f™Ï!!ÜPs…1æ<#¦…xïŽ+GWˆwÑy¤×|þ+à„Ä¥!}È5õÕz<òˆ&ÊFV¯›lò¡(\_e¶V­¼¢Ú(ŠËŠ²Ö ŒIýb€QÃE SÄÜýÀŒ¥µÓ3„ëDNÞ™M¤05î;ë¤Cî¸TåIóZ€Iýl®@@tAÿš¤PE¨Û)gœ I„è uÔçG›×þјõÐè咣COKèÈS’ÜoMÆëTM5…WÓOÑì-}RCI_ÔÝ«Æ’KÜMÅí”,¶œxÕÚ«T5 Û©¢W•|eÉWÌj¿"oM-uZõ'r¿xjõ¡ÇÒè:ÿüB4þÑk^ðA`{¶ -\Á üºŽa¦„È Lfse 懑Œ7ÛŒntC›‘É@b;MÇTP‹ÍF.”MkXv›€¥ì Ì!q€“œäŒP9$ ¢ qc› æF2ƒ‚ƒ@ï„Á‰æ!L{ (˜÷´ç=CË{ÂUŸÿÈ?÷I`z´EÆÿmío~òK#ç§!aQbYÇjÖ°æM¨Dnô•uE•` ·ŠŠ- â=Í({.J$"‘2# å(pA:Æ7:%É#qªxH’É6´I&a#Ûø$@°‘zh.!÷¸RT‰|€‰•©Ä‡@4B¦5åI#Áe@êÄËÕÑÉ—ASžvÉ'>É’Lb’%,• &B„»k<µIÊu פԥf’$J^²’ÞT†¨HåHT¡ŠF7¢Û¬^¥‹Y…Ï{²(Ñ'øx«±yåW¾’c²ˆ5‰õ“BqtVÕ(¿e ”Õ²V·ª÷ȧ> $—ÐâP†uÝA>êrW¼àuÂÈÿ+gƒ¹—v£…™Ñ_ ƒmز€å°ˆÃ ¶0–ÝÐ8´)ÎÄ\óB®f53< l3â¬LdAENo„tƒ#Ô NŠ„Ç”ôfXÂbªÐÀÃ80 UÚFÇ“´¤é¡€|¡˜ÆÅ:ü‡guK[°VˆÑujjÔD†Ü­^µoëëŠV{ÀÖnC_ÛRDÈY©h{鼛݌’ aTGÊÜóœç¼ÃaÊ&Å[Ü8È1ŽÊ5©%¦•f=‚‡Úu®tyˆéd›ËÔ¥®—ÁHn B[ÒÄs³ëœk37¨z¨Öw½Cí4ÉL&nqÈSžN6ë“êãnÿ}ìފ¢*-¥{íäTÞ鶳q"œ0¬* ¿ô’⎪(ûÜ×>KLKZg‰Ú]ÏH ûUKi„ÿªöPt¡µ€6ø4ÚÑòø aÐc¸àœ(øF ^BT_¶AÑ4Œ`*ƒÙqjHš‹í@¦( *ÇV›ÒðT¨0DqNYCBÜÄô‡7<±M‹Ä•òfB!ScvÄJg Žq@H¿‘~'0`GÅ%˜pµa;Wü"ºÊ…-îç[[¤ƒìà™y@×úßðËÏ6÷òš±$äF5ëÎmÖû¬Vø*WöÄ=sµØÑb±Òª¢#FSGHQÿF¤GE !…sH6’¦0¹8Ń¢Ô$¤$ J)!ê(Á’åR½%3óK‚J“*…iLƒØ˜½Ä5DêL\ÞIM§ÔHí%lb«rscÚ’¢ºd(Þ9jJ¤,5&=ÙiL²H™ÎÆ7¶=$P¡“TÊ0çz±ªÁ¨Oq¬ºÓ6O’ÐUyw²š…GQ¼QÏê‹3…ð̬ƒZÀvþ'›ôßkùÌ%³{êÓP¼èGË1jàs…Ë£WÖNz˜Ìq:0Q0MOª@ÄùK9@fi‹˜™‚u°¦Gð! "fÓÇ4B!ÇDÆóÓÀ˜c¶1Èpˆ0›Û e=Ü͉ÿ•Zs§¼ˆ,·jbš ­võÁŒ½À³†-ìÁë`Ó®|ù%®ÿÓò]×b×µ'Bgég%6¶¿v Ÿ»:{ËFØ^•Í‚&ú¢2 wJEß=0$Ë*cômoÕÓQ1ªWŒÂ=/ËS(¹ùÜåÁd‘k’8VB¹v´–$÷àGð„í¹Úõv¿}ˆì rºÚÚ–·º®ˆë²§Ý‚—®W}HÝÌ‘`I%ìøðBkgϹÙ\œt§; ë o×…d3¸ Œìá¢F±¸‘ i…«óší|柊߿ÂþRKžòEV}/á¾ •EàÔÒ+ÛéÊßü¡Åô`p…vÿFnàP‘€~±`¥Q^aÓ!a&UEvaÖÁF*ut,Ó?Ô'ó¢ÑB'TB7,f‚&„b+s#c(DT4är8tƒÂA"tb)å>bÏ¡a:s^À%U/aORâ.ÞápkÕ„fbæemõeJÓeRø€pp %5kDPý†ü&$B ‚!ºR†x†,¸ân¸B!nh"ò„òFhT>9’6tƒHöH«â#|à ÇàHÈ`i‘äi×F<ÄÓi¢g<¢Dj‘²(ÎfÍÔ(»sllƆ»[·†[º6'¤èKº[ÉKÈôjÿdžz©–ÐT‰U‰T² Žh$ÕtM4¡)ÑõMÝfˆät »À*ãvNǸ‡12±ò=µB^ð6Oð§†â†rHoñågûÔOkhùf pD†ÿ¶f÷gWp å…guE[.ÇXñ8ñre‚á.ca/\r™UŽq3ˆ0þ2Cd@6S,çr;T¿ñSC8%S?'T3ö18c8ÇS¨AL5F%?SJµ2IP˜±S-UF„6&0xR&¥Ä@:ɱ÷ˆ/Wpë÷^éw äÇ ‡†n¬‚ É8YlÙ ˜ ã”Y@Q}˜g8ˆ“mÈã8Ôà|ì%½“Z±˜j'ñá9!¡L¡¦c'±µw{§Ø:ª³' \®çZôЀ’;§Ö%ÉÅ£§ŒzÐU)Ñå ÓÅ<àæ ÖóxË —w=}ø}àO´7å…~燼¹rÔ’ tçWw6Püö •l†ý\¤”„€V ee†`F3”H³uS˜WÖ3=C4ù8MÐ@JfD0¹Æ(UÍ¡t60“-D£1°aŸ>À1¦Q1©3Ôb?÷bÿ/$’34D ÅñCÄB'¦Áš±RótDTaA8^PußÁqV°„OÆ`Þé.AFYÖpúáPleZÔ„àr…l¡Žÿ‘fÖÂfÿT£ægo†G» ÓHGb&RgfØnÔØg¯‡Fš"O¡¤¶Ð=±"nèôm«òHà¦]@2I‡¸)šâi× mÌGmN¢aº UÂ%$q‰®´J—ØJËD&ŸóJŠ¸Ô˜¥¸:¥Èk¿æ:½`bkÍDlÈ&¦¨´©d9ÒT‹Á“ šä¥Ñ§‹½èiÇP FÒmˆˆ¥’FŒá6nQJnIanŒæ*Í>&>î&O'‡ðÅ+hœ FZo°À†¿‚†ò~Ç™œñcùf£'÷?]ÈPfÕeXfÞ©…à W¢íqQÔ“ FETTuù2a„d'U¡ÏÑRÚ’ï¹C9p0òéR*'d·a´ÁC>·b)0!;./bb/bb19c/www/gifs/bkg-yellow.gif0100644002342100007640000000134407616533076014570 0ustar bbbbGIF89aæÿÿÿû¤õ§ ï¨è¯â«ß°ÜΊÆÂ~½{º|¶z´u°s­t«r¨s§p¤n¢lŸmi›h™k—e•f’g`ŽaŒ`‰^ˆ`…[„[[Y|WzVxTvQtPqNoNmKkKiJfIdFbE`B]A\?Z?X>U<T<R8P7N7L6J4I2G2F0D0B/A-?+>,=*;+:)8'7'5%4%3$1#0!/!- +*)('%$#"          !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs/bkg-red.gif0100644002342100007640000000133407616533076014026 0ustar bbbbGIF89aæÿÿÿûõ ï(è/â3ß6ÜÎƽº¶´°­«¨§¤¢Ÿ›™—•’ŽŒ‰ˆ…„|zxv t q o m k i f d b ` ] \ Z X U T R P N L JIGFDBA?>=;:8754310/-+*)('%$#"     ,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs/bkg-purple.gif0100644002342100007640000000134407616533076014564 0ustar bbbbGIF89aæÿÿÿÎûÒ õÎïÖèÑâÕß´ܯ΢ÆŸ›½›º›¶“´“°“­«¨Ž§Œ¤‡¢ŠŸ†„›…™—•’xyŽyŒw‰xˆq…s„rnl|lzhxfvetbqbo_m]k]iZfWdWbS`Q]N\NZNXKUJTFREPENCL@J>I?G<F<D:B8A6?7>5=5;3:1817.5.4-3+1)0)/(-%+%*$)#("' %$#"       !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs/bkg-green.gif0100644002342100007640000000134407616533076014355 0ustar bbbbGIF89aæÿÿÿsûpõ mïdè_â[ßdÜ]ÎZÆXÂV½TºR¶R´P°L­K«I¨I§H¤G¢EŸED›@™B—?•=’?<Ž;Œ:‰9ˆ8…8„654|3z1x2v1t0q-o.m-k,i)f*d)b)`&]'\&Z%X#U"T#R"P!NLJIGFDBA?>=;:8754310/-+*)('%$#"              !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs/bkg-clear.gif0100644002342100007640000000134407616533076014343 0ustar bbbbGIF89aæÿÿÿûûûõõõïïïèèèâââßßßÜÜÜÎÎÎÆÆƽ½½ººº¶¶¶´´´°°°­­­«««¨¨¨§§§¤¤¤¢¢¢ŸŸŸ›››™™™———•••’’’ŽŽŽŒŒŒ‰‰‰ˆˆˆ………„„„|||zzzxxxvvvtttqqqooommmkkkiiifffdddbbb```]]]\\\ZZZXXXUUUTTTRRRPPPNNNLLLJJJIIIGGGFFFDDDBBBAAA???>>>===;;;:::888777555444333111000///---+++***)))((('''%%%$$$###"""  !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs/bkg-blue.gif0100644002342100007640000000133407616533076014203 0ustar bbbbGIF89aæÿÿÿ.ß+â'èï õ û ™ ‰ § ¢ Ÿ › • ’ Ž Œ ˆ … „  | z x t o¶­«¤—vqmkifÎƽº´°¨db`]XUTÜ\ZRPNLJIGFDB>=;:A?8754310/-+*)(%$#" '    ,ÿ€‚7)*+,-./ !" #$%&'(012389456:;<=>?@ABCHIDEFGJKLMNOPQRRSTUV\WXYZ[[]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs/bigbrother.gif0100644002342100007640000002301007616533076014635 0ustar bbbbGIF87a°¦³€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ,°¦ÿÐÈsØ1ÕÃ69w}±]†©­ŒfY%‡da å™ €TNH˜%M²! <°„¤J“¥ÏYÍ"·SPÐ&ܘI˜ÆrpP^—J‚>D2*H=*R6462?)\[yY)68 =8h3'-"-skZ|²~{f0ˆ}yge+Á”?)¥2LÀ–AŸQÍ@‘Ê5Y‹ÚWY’’ Á­pin²p n|î!·v1­t0æ‚t“õh yÉKS,åhAFɤ*L>ââIE%Æ v‰ˆ’?Œ4ºÔ„€2KUªs¤X;c7gÍj‹e9\]#vÄ×k0ŒÅs¯\DhÛd¨XFѤe1b¶X"D¨Xº váLŠŒ ±hd9àu‹‘qd锓ÆX– ÔÅŠÌŠç^%£“C¨s‰tŸ)lØ{¨E‡…´ oM`.¿vztx]ÂAn[”µëꥬÛqß½yÕR.è²rá¥tòl+[2¡ËŠWÎBõ}03vÀ «¡¯h±{»ø¥–vÎmØ\^Äz1+aãFEטý©RAÿ;ÖMPVYÔÇÝ —=šw Q!‚524áXÖµñJ„¢”ç8HF…ù\ÖØ ‚ø ‡nøa,+–AŠè[LÐ]VÞƒ>GÒ|öt!Œfg#ý‰€ t$ ‡x^yˆÁzˆíøbö wˆpWA×_~rØX^’°Äq;8ö'—š” Ú•rV"I(hÈ‚þx`‹›òâxSŠ€JÌùc9Š2ÆàUŠRÈW†9¾E†u—ÁX‘l°dÂœµ †_X!i¦‡r]`•ó„ä!fb*¹ˆ,4–¨’ž=ÈA†ô§–W1½Zf†D"˜2™Ù‘gÒ –ÿo€–×fv0÷é³]!ê㶠NæÀ©Uê ¡ÐÝ Ù{rˆ×(Wo‰…'cµ‘Ë…2:œ'ѹr§!ëÙ#Žp©0šºK£>£õ„>ÿ“ôå°ú›á„æ‚ì ´ûL=c>K7â:n°—ð&:¼éÈ{(¸\ªŒ47µùëÚ\ÊÌ@•Èåøº‘Žx¢‚ jAf¯ëÚÏ —©g"_ë!šsØáÍ›;Ð,6óªúôJFvÂSJ$–¨Èô w[bÕÐñŸ8t0`ì vx•òÔˆozA<D)OLž`À=”ÿȯ Ò W("ÕK|Ù]ÖL’•É”,’‰ƒ)3Éhe2[•£xÁ9øÑYã'@<}­WZ‡^|ÈCúOŽ ¤"×ñÂ8àè-Àd"%ÉÉsÈq“°"]VŽQÎÍc~$å:D³«Ú5¾8‡.Î2’æ¬2ùH[Ì6B£ô$¸Ð†¦± ‚˜MùÍ—p#ˆNØ@ƒ ‚”'"ÌÀ0ù™PJæ:yLP?ÀâCu0Òt¦8G~ ^„cƒ† .2$(…'Â؃6™Q‰.lãÀ:aPÆ°ÌS>X‘•Ü¸—}|‡¡3ˆBÿ ŠÙÂ@ð”Rdà4èCCû’ŸÐš‡„OÑ*œaÍ2pCå§u³Ùa(Òt¤å‚êȇË|a‡_ £ ˆb£RÈ3+WøÇ vQ¨z"@P‚A¼*lã/çhÎrÆÖ™Ãû¸Cè<ÖÒ%xáÇT Ñ„ˆ"Y¥HÁ ”.f…ø’?|BŠkÐà Q€'pSƒÎpF#ÄzúRî²ñVP·Ùª"¤™â0lpˆ£¦Ä éTbðÕGZ(x”ßfòâJ¬4"@¨‚P ë¾Éú•'"]ðM¾ÀU6g‚ØÝôÉ ^+`z´VÐ@6üL‘Mÿ7!ñ²ø‘ æ0o3;n²‹­X"Lc YQÃ=k×¥N!"¨ö6²àõ—Ô‡¤u½U"[¡×ààÂ4|2ç–ÀÞâ M¨‡¥Æ‚t­Å®Sÿ¬lSɹ*(†·Zce06Èw¹Žý{WìBø8ˆ·°“êg`œ¥Ó¤5ÁÁ ådÅŽAƒö^-dØöÝ¡‚<Š …ÿ5ÃyÐã©D·ÈÁåÂ@þÿaÞð^ƒ±cþ§ÐüåDËZûí ,ëv¾¬ôÊ`>º è­h+`s¼û…¦4‘E€AàÅúgU^0HÕÅ:ªצ»èlžÁºlváúñ3G’›öââ_"{¿/(cFHú x”ÛìR rõð½V0hKíH”ÂåÕÆŽ=ß%d‚ ÁPÎJTTœhÂàø®V7]Ø?SÓV0ÙïU'{ëÚðk>¼ˆ§È4!G>h+á­";æï¥jYMè98ÐB­§ª<3’è[“ݶ=öÃÒ‹Îç 7ø#‰½yÕìa¦ÅYçü"lˆK?¿é͈.>êˆÿ$ì-¢#·q:÷hL·u8¦|Ô6IEí´yVE÷Lç±RØuÛ~ðdÅ€±7cfo¶–o»Pt<¡€³˜ô IB+ ñÅ–eœæyÕÅ|3htI·|f×{_¦)àg·RßVd§gð¤sšMíÄgh&`…V¸S7¤3Ï僡…[gWlš&L èi6iŽ·xæÆ]ò–xžWq50l=( lãUhZ$Ì ¢p])å‘wÿ•F§`¥Tñ–UßðyˆÐ yPf]Ð|©Öƒ ¨g!WªVv±&õOZU`Å D€Òÿ5D¥+ÕTÁt„-Flñ@wÖ¤X¨ àÖAvè_]g{“Ö&µ`·—÷¤]æ>ñÕA…ôÂÕO$U‚'wl˜iœ¶R´V„×_ÚôNg·ˆä—kÖf×ö‡™ùt!ŒD‡e&C¢"ZRö%4q]ŠµU»8YPihi^fjÁFL+ІøŠ^‡y…ågÖ YÄ `Ú5ZXÅ; —SÛ~R1/8vÈKg ze‰ßv ÐÇ6döƒD`¹µˆQð\Nõ³xƒö§tÓ¥‰s%IkÖV¥¤+¡)] NOµa…w—uãVZ1ÿpý%v1v6^¡XkÁµ`Öhì’°'t æ“gPU¦×74äm_¡}€“ž¡ ¸ÇGm](B(làpeà…Ð~…ÅNØÅu7ød^5s•˜^†$õz_O34"¾0u‰ð€O{ýåK‡fI^æaI˜áGM/wwdG yoCðr”s3WPh>À‚îÒ‚Úceµ r…SaõYƒ¹{^Õ—@GaåL7wsÀÆeÙøn=^A¶€דÇPŒ—ÍHgó¨Àr†òz°fWž´\}vmš7„¢õ‹øy’\Š@m„å™–h^bPÿvç'ÀiÐVL{à 0€)-REÁ)e~R~)n?Xw‡G‰S {Ò9|‰Pcµ¨]ÆqK·’s—W%wƒÛš†•fÆyeŽð[/!Õ<{tGð5K¶i™®è˜ —œçµháv€W@HõgÖgE8]:¦ ˜Px3ÕOdà’ }0äÝQgì88dæd GñY™†e‡’øõ´×hµ¨¤wŒø¥;×gšæ† 7m1ÕtFj:YyÈS(@r2Bc4ßÄEN÷OêbÓF È|L¦v•Á5š Wv½¦|‰åOáMÅ·]«•Ž“°2Ü£ ,ÿ# À1)b®†Skç Sé_Øôx•J]àÖ ‹ç`à]‡—‡·„U¢ ÷e‰e[˜ö“AFP÷Ä -! °-Ñ‘-­—Y¿X[sE8‰ŒO…'aÆçbŠ9‰hz&é†mw©u—ˆÔ9M”Z…€†VÄ…¬Êð5b¢‡óJuÄAå_ÉùhçG«Yrx‰¨&OkŠ]ˆÐRɦy^\W«åW7!~UÖuIxl–ŠuZM…h߈vEçucæ ηš)µZ7~ "aC?r&NÄ*FIg­6}d&§(|¸Xvéh‡Ÿ÷|×RŽ‰sËgO!‰ZËn\å¤ÙTe¶`»Y¡ 1R©B 5YäYT‘¬knð$˜mx‰Š¡—€™qÓÅ’ÄZ6÷‰¿ø¨äênÛhx‰à¶ù„V;Q$vãÙá±y¢ a :PuU’¥°…ß°g¾è·î·ZúeÒ ¡Š`¨Ÿ‹wâ _†ÿ¼CÁY´`"4ÎQgÖg:xxx{—hÙÐ_¯›g؈™;¼á[jS+¿ÚUµÄ¨•];¾ZRÕiµ +0»Œ›í°&•± JUDqš±Ç~\%Þyq¢]j›ÚGS†X’wz<ÉdñLêöbØ8¥zŒ‘ÄÐâƒÂoГuBRUÄAÚ—Ax¢vRIÈu~ñˆÕiFvÏP­äÊç©Udû¹Ž9¤–6«Ó=UB âtPm UŤZDl0ö¶Šé…Po[zûû‡ßzv‘fXN`9»,—]êÃÂÇò3""J”¡²Âð5 }Õ;›ÆïGÿU”º˜,¼Ž„fÀÔy¿‹QŽ|ÂXª6v£@Ë…–’‘FK´9šY UAÞØ æù‹5Œ¨“[S¹Pœ8’7q¦JRžˆÀÆ[º˜Í¯ÆªÎ¬/9² •ãE?Ai¶ ú¶<‘·yÄAјhhòª”Ãà–‚›Á•ÈX°ˆï„+G ÓÇAt%Kd¶å$Ф¥ôÔR|eœñO LkµŒ'¤Å UøUŸår–gýÅAgŵTgÁ²%Ô5eRb åÌÊbÏñŒzë§ÐLiÅE­¦m8%È[ƒUùÕÁ¡q¨Œ†F½Á$… ð _Sÿ$KIúª°Ë=y†/6G«…¡¿Ø*e»d–°Ó«¸]dÜ;Ïê1*§\V Ó·däÁ½µ ×qQ†A<ñªí%]xP™K©,ÃÓTEÓ k„uAf~Æ%eVýjå’É©2xÔwäE¢Ð÷µÓ~}±Æ Àa  Â$fÁñ²xÅŠ·È³[Xߨ!eÍA?³²Cå¤Sª4€"å×1ÖÙ¼™QcJ¥äj9,e'2k¼vc»Ç©rV¿-I ÂÅ ÇÍ(¾¢”~)¸”H«´¬FÔÌeEüÁn«Ó­bÙ¶ Øý‡€-ÆÁ×uqUÿŸ4€Q¬}YûäEeCᔕ-xm4&ÆH– ó*U®›Ã¥¬ÖçI gÃ}V…&dÿøZÒµQdÚ¥°{ êtß°“S&EY1æ„afÅÖ~MÄð¹Y{áK$p .ŽãÆv ‹¨ßVßÓˆ ¸í–ÇœIÜÑSp‚%meÐç4㌑1}ž‘½VÇ•^ûZ ©MØ~•OÉg ¡ na|‹d›åR…ma5àãCë5Þ-ð-–½PB„aXf`KjòPJ)žI5ÞÖyqK ov`ØRÏðmSç)ÛßÁÜ£½½‡y$Åç¥dE½ä)NâÔ'öÄ„þ‚ç,ÿeR†WÖY JñQäà؆ݖþ­Çž£Âj@õâÛ9Þl5À0$Û5çÿç›Ë’[‚ŸÀ÷‚Œø Ü` ‰Ô*ÚÆP¨2 >é ìŒËu¬·AK.håÁ£]SÔ¾oqÄÍÖKÌ€¾¤Á«n}¥~Â6NS&ÉÒµt40tHçÓ‘žÔ–Fk,̘yH¥h}¬b`CÑÓZàù†­VÍ»’mÆÌZíØ%R)¢C™Dbw”É‚îü­×7 ?«CI·ôºÞ üúv¹È`c[Ïp5\Ç¥¤´ Qœ2a±(rëÛ.£>Ðè­ÝRˆrrÿáìíÙ•žRE¡Cº¦FPÓ—ðÞ;(t†adtä$FG:E¥ÎÖ æ0¨…£!Kî tÇ4f a+… z ¥o[ÝŽÑ«ENè)HNßq>H\V*áP¿…”$Ïëç¤Pœ2¦½ðoéÙ­¾U(¨¤†£¾{Ø `[€¼°VI,âëV©ñèbÍ·†´N®< eN$žªJVâ_Ò£vyR!Lc]o9k‘ËAj²+ODL.Qo.îâÚ<ûŸ1S´:ÕñãmÞ<ç ¹ õûU…WF±¶§0–n%ÒIÝâ(ÿÂT†çG¦§–ÎW°†ÿ–ÓÁ9ð@¥+3R+ó‘Ô`H 5˜B€Î¢f¢ ¥ƒÀª2+Ï”(]ƒ)×BŠÃ@t9œƒ,—“Ý A¤©–«]•›#ÉP‹Ácv(“p?†6Ü”=§×«)¤™´=ƒ ÁcÎRIý2lÌ ³¡()¢  #¤ž#´,¬—0I¨Ë“¬+/$E°ÏO†¥§ÊJŒJʩ˸µ5¸:³K¾µ—‘@(ɘ³•œ„ž„ăÃV¢’²g©©ÉêÀš‚0®O!obƒM¬A§š2G½$Ž:¶ €À>•5›I>l9µ ¨*VlSZ1ÂäGF8 ôL5'0ÿžä™i‘£-80Êè¦Q‰hzœlù/¼6'È’Ça/*×XøSSÅIŒ{ )fpO$Ï ]­])6f³ðËÅ"çš¡£mÉHùBxáÇM˜&Ziâ…) jQÃe»™ñX2„D€\Q¨ö“ tDÚYdgP™ÅrÓËŒb¯rуC¼|}` €aÎÊ—/føqÙD»@ó8ÛyРŽ¹>Ü.µ1𣪼y¶9Ú£pn“¬#E­T¬~ze þÁ‚Êô)C­æ“ 9£*£"„} Órƒ±Ã$ölÔÒ©öl`|ÌÖ‚wÚ½($@Nñÿ3~ƒÈ]=ÑGn~ÔÀÄßL(¢¡JŒùIÁ/ÌÃáï†âœ&B¡”´Ù¦“Ž¶Á­Œ‚‰Æ·$hÂ6Z8Á è¥ÄIZJ©Šâ4€Q“&ø“O‹óT3­Á ró g&l% `†a ”!4br”g8¢'Êi,LÚi›xhGþª,ñ¤ k8©·3ä"c`»²Ò?Ùˆt¨¦™˜ÂíRÌÁ»˜,ŒñZq‰Æv\ÜO}|©r«æ(RB÷‚¡P‹Ó¾ˆS™Fvq£øL†€2,CˆPp+¯†G-3a2…ž.É|%ºÏ5òŸgy%— ÐÿQn†+âRæºe š±,L‰°¡iBbÂP>9¤˜,Ò9e…’Â(468«ˆ} ÈÏËáÀ•¥¹8þóQÿö¸˜%,¡DP} ;éòG<(ƒ¹<öúl¶$½”ãÕrç¢>ã2ÐBFá)WƒñfÅ Þ‚âô§ì~ü.)IF´ï>©kQžMEyéè Ñ@ºlQ 4{G©_‚¤ìƒÖ`¨BØÜ@)@AžY†Ï? 3B-iTèø†ÜxÎlÑ9“¼âˆÀ™‰:Ž~èù7,¸tŽ à bI¥´7Nl“Õ›^cTöbj’–À0Ä"»1ÂñQõÿ‚Ùa•¾âÇžÈ$§L} í9¡/6¹ @¿9N>L¬ðH•2š(Eb sÀ¶ ’;¥R%3Ûp…,­®Ùïŵ"û€ ˆ7{ŸUhŒŠrÊ»»Ÿ8:Œ©€0 ÃTXgêÜ&MÇ¡’tBú‰IKãÛ–@ ¸’h àþ—¸ñä× ŽáØieâ,°Û†{X„〱¸fA+&ßCèr2?pÅÁKÄ[fê+!¥bz˜~€÷„âàv+\ßî–ˆ¥=¥Yi„6$t—Âüi«ˆ] €…+éC ˜\¤’pFœaƒ&Ч†õ¹¢6b—ü’c$.ÿ S^èß\F$Rh"SêØZ(„ŠtÄI2¼¬ê1°`Lrq[ƒ¢J4‡ŠL*LUº]†¶ 1ÚÏÐW\JóGWˆ{‚kŠâ^"º¹d4X‰ Æ^R±U© ž™ÔeÌ“^ Q _©ÑÌ»8¢¤dÊ»šSc+‚qãc]Ç@ÀY¨"šÈKhzV¢~8êKäÀÐYHgxÒ‘ë<Œ!Š2˜ Ž^ðc*2N¸2Ͼ“úLÀÓp¶Ë80’¨Š]â¢-k2'•%$$°½ÄÉe檶¨6( ˆhôRgàiÌ|p†Ñïk‰–Ö‡sù¬îíJWÂ¥èôc49Y$UÆA‰Úà0œ9,­Ñ*E`3æó!f—x.÷ù’æàgbTNϬh9“õöWü_V3J<ó(³Õ²-YòD•ÏѤ¬TrY{¢ kŠs÷墥"›>k[ÑbfιDl…6ËØÚg Ø ñÙ“ÿ•# „l6,oÙ‡DsѯÐUŽ¬¿?›œƒ¿ä1†ï«ýAÌZ©MwÊW!œ`’ÇD±¹ÞJ·–´"ó<þL‡Ýó8Yÿx²û¸Oy‡›I¥@ˆ“ÊOñ‹o$ÃÚ‹~ƒ«©©•‹¶§#@v À^(¿tƒz’ƒzس'š˜8¢ŸÌb9†â’¼æƒ ‘j/³«±™(:µ²…60¯žÊÁø›¬k6Hb¢ÐÀ<ÌP/™h£âH̸Œ”(Ýi1´ÉŒâ‘Ý0‚ü˹ºË·…A. z9xx,Xp ¬c¢ÿߘFQ‚„«\™À= à"»±Ê² ÂD5KD˜(œÄé˜Èó¬~“«é¯çÀÄ“@o£A𛄛B3þ€ÃËš™i+5[:ãù¬2Œ7LÜ›ñº©‘¶«‘˜r¤Ùë¦ñöÉkwàŒu‘…߃9kx”Ÿã­*Y»³Ê¤³¥ â±–ã ~†…C‹Nœù¹ÀÇ9ÓA¦}«Gú« k( šÀÉ[49ÊŠ <ÝIŽË€NœŒb¤Ê"Þ02¯ ªºYó¬³a—[3ä¾óŒËJ1x2Ç€#•`™Ð¡:>cœØ-ÿ{Œ«ë ñ*4E Ä"i—tœYj6ç¦Eɤ¡‘Œvè)É°ºwr+Y»(bšŒrŠÂoË8àQ Kº±H› !è•«MLŸ¬ÌA/`¢ z¬¦*›Àä µd:3ðƒ¯d¤…ä «$²D4ƒ;Mb¦Œ§2<‡VzœÌ!ŽUƒ—eÜBÞºjÌ Tƒ”]¬±++¹áè [å’M&L0Ȳ ”h; ȲîüEÑÆqkŸ*“ ö ¡â9”@ ÿqã4Òc8d;,dù/ø¹“ü–r‡|¯(4ÈʨŸ©Â9T4‘#/Û‚¾ƒ*“@Y9§3*%É‹ÅÒæ ›f\˜ˆ:Ç¥Fo"ž2)F{¿}tw°Ç¶PÛ³'€·K@´´X‰=¢Ž«30‚ Kø8¹ ’2r ""›Ÿ‘ÌRÛpÉÐºÑ ùLG ²' É‚“Ll ¸‘Nê á{B{Qùˆ¬Úr, ºG)F§»Ï ¢ÆáK.3kEÌ€';ÜÓ µŒÂã;Ž/¥¨ŒÎ'd)Ä€—$7È @xÂE²H#Ù¡É!*—˜‚ßâ5¥”ú¬8í¸Æ¸ÿ/ñŠ‰P`B[S#a³ zÛJ­B°(XR9’±’ÙŠP3\U\ê8²²¸µ5©=+TO €¯ —¶ Õ!BRÚ¨€9 *ã 3Á¤ò®Û4¢³˜¡:®3]ÔV8°§r±ø™ÁûË:PµÀ/,Ô¶Ó€ßP tÑ.TÐåP2뻶î$šaü![’ðã!AÁ¬õKñp›b'sµ¸ÃÉ 6HŠ«Ú¼¨u²†wƒ,-Á )ÃÍYó)%Z> /ÆÜCÛ6Æm´”ÌÖ왑¶P•ÒOPølXš]Ÿ=„<û©3Í{ ¡¤Òo»AûȤ½Ø€s䬦„›eš§ËJù*9 ¬(æÃ)WЊ9tRvU9¥JGoKC†i¾¤ò–£‚¦,@ÝyRÂJXOšxm‰ó1ã¬K:‰Qœ¥¥¢¬:P‰U4+ ²\c–ú­#þ+E ˤï Úañ­øû>>999777222111000"""  !ù ,k@ÿ@…pH,ȤrÉl:¦ àó4º* Du[ŒN™^*WVT¤T×ý!h\Š«”uMNŠ’µ2pD+XZfR*qg.W.R'WxrB^ *ŠRz c§¨©ªIeC“jR ˜pq‡IW¦‡YBg BRrµ­q¯Œšµ !Ð,ÃR «ÚHˆÛÞßàᨠ_§'gâGäæJgxce.gXƒ ÷å r$$˜©H‹r½\$0ˆà‚3dS ÂD{h´pF ¦8Vp@ÐÔ‹ D4€¤ŒŽ!Qû«YD¾Ù•P0ÿ)C¢xäóÙ gV|J&ãÏ &¢FÍÀ JFÔθð2)н ( ʼnÔmÏuÝ[sÆí÷àÒ$‹Ó°(gxÅ‘s˜uª>L¸°áÈ«H@€@TbT‹VÆÅE>„)#‰ïï–2'ø¨¯‚XFÀ¡5;Œ1 I@]ÆUc‡þøàôI¬ùò€jÏŽÀcÛ€ лåUEر(Á»‡K7.ÂóÚ/BÐR;Ù˜°hbw(€€8l} Zû ØÖEF*Hp\µGL>P]ZºT WN?ÔÈ¡h |ĉKYÊ BÚÈfg s¢"{E‚Eí$aUbá¤PÇ}+žAÁ :¥À5QF ¤%8 i ¡$Œ¶G”£–|ØÌ3 R{ `ðâG÷tŤ€€¤0!Ø!§ŠœF‹FœÁ^Ò¼…'ºÌéçŸ=QV¡ˆ&ºM;./bb/bb19c/www/gifs/bbnav3.gif0100644002342100007640000000101207616533076013657 0ustar bbbbGIF89a'Õ6ÿÿÿùùùïïïíííåååáááßßßÙÙÙÖÖÖÏÏÏÌÌÌÉÉÉ¿¿¿½½½¸¸¸´´´±±±¯¯¯©©©¤¤¤ŸŸŸ˜˜˜ŒŒŒ„„„€€€|||xxxpppkkkhhhccc```WWWTTTPPPOOOHHHCCC@@@???888000...&&& !ù6,'@ÿ@›pH,QH”ÌÈlYšÓ£ÑHVÌ‚`é$6 ͪ€bÒ*‘n7 F©ÆÔê•Eã!ºª.D n!xD, aUdM†B/XDbD%\‘—U",,'nžŸB)0D-Uišo¬j`­C4¸j,ŠL˜eȆ, ÈŒÊE»x”CÉB(#¿äåM2snëæC2"M, ”–ä›D* è#r"@¥_á¦IÓ`Ø ŽÒA¡‘M²2„† Šu™Œ|iflыܘ©¡QÀá%ia|áy„ÒF7#l4 '#7‰x ÷«Ä@n0…Ìø !þ¢Þ˜0B‚A>ðŒœ‚AT½OA;./bb/bb19c/www/gifs/bbnav2.gif0100644002342100007640000000071207616533076013664 0ustar bbbbGIF89a'Õ.ÿÿÿùùùïïïíííáááßßßÖÖÖÏÏÏÉÉÉÁÁÁ¿¿¿½½½¸¸¸±±±¯¯¯¤¤¤ŸŸŸ˜˜˜”””ŒŒŒ€€€qqqppplllkkkgggddd```WWWTTTPPPHHHCCC@@@<<<;;;000... !ù.,'@ç@—pH,Èä©Âlª’DV0 æhd²••WÙ,›+¥ññÓ8»+ÀAì©ïx¤‡I0I+fvy# ‘(yDnI œtcLweŸ•§je P-|”^BL‘º„g¨ÀÀ*+Å ¬À& oL‘ÊjÏ'ÙšLœs©g^RL cÛL]c"Màw!Ô©³Á÷ø•¹j+ è®Bì Pg°@ª( ˆUá‹ $psá(†ÏDåcR‹1A;./bb/bb19c/www/gifs/bbnav1.gif0100644002342100007640000000102707616533076013663 0ustar bbbbGIF89a'Õ8ÿÿÿùùùïïïíííßßßÖÖÖÑÑÑÏÏÏÌÌÌÉÉÉÁÁÁ¿¿¿½½½±±±¯¯¯­­­¬¬¬¨¨¨¤¤¤ŸŸŸ˜˜˜”””ŒŒŒ‡‡‡€€€xxxtttpppkkkiiihhh```WWWPPPOOOHHHCCC@@@???<<<888000...###  !ù8,'@ÿ@œpH,à Iœ,0š¨TªŽJDi8ˆ˜ÃÏ´Ášq¤€ÊhÊö€ßENqG./!ëþ`$3€!8$p(%lR‹F2 ypk œ1u H3d¡8 PQR-­0B«¡HK`_8*B¯¸»S +¸3uQŸbQkSÛ'8'$¦äåæE ç8¾8",C",,Þ‘ &\*b¢üI£C 60( T6N.Niøpã˜À  ¢;Ò-ŠÕÞ<Ó°ÈÈ(À¼€ ¡“‚$ÜéÔ€‹†GMÑ…c,4ò¢eœrF‡) bqª4îM7 O¢u¢°`Ù/©¸Øõ-‹†!Q>‰¡Á שÅ;./bb/bb19c/www/gifs/bblogo.gif0100644002342100007640000002652207616533076013765 0ustar bbbbGIF89ai†3   (%%%'''%(2(((33-/<00033347F33f:::”¨,ŠN­µ‡¬¶ŠXƒ&’¹‰¤˜!¶»Ž´ƒ¸ÀŠÊË“ÂÎÑÒÄ„AM¢ƒa…= ‡Û•ÈÓ‹Ð¥Íãè‰àãë”Æ㪹 éƒ6‡Õôôïùü”MØýø!ù ,c}€ƒ„„…ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œ˜–J• Š&ŠAŽ§˜!©Œ®ŸšP‹a„JX¥ˆG‘°¨º¶ºUÁÆÅÆÉ„« ¿“²—&ÌÊÔÊ!ÕŠ`’‡’ÐØÎßâ™áŽ¶ÞM…åãîÔ¹ˆÚºD–×ïØ÷øÁ!ù ,c˜€‚ƒ„…†‡ˆ‰Š‹…Œ!‘”•–—A—™š ˜¡£ ¥¦ƒ©¬£; >†M¨‘:«–·­¼‡?šµœŠK½Å–µ‚ŸŒ³¡Ê£O¡È„C‹JÆ•ÔԖІXÙ‹¥Þ6ŒFáAÎÆY„`¦Ö„Þ1éö”.©îˆ“„ Xý»G°‚+M„%L‡”6@Ì!ù ,`‰€Aƒ„…†‡ˆ‰Š‹Œ…‚Œa‘”•–—˜•&™œ„‰4ƒŸ ¥„'¦†;©¤¬¦X‰‚„´…®N›Š¯]‰S“™¸ˆ¿É º—ÆÊ¥`…ÄÄφ“¾—¶Õ”Όȣ–6”Ú¿¦Dیݘ䲆\†±¥M†í”ð–S‰LÏòéÿt2×H ¢@!ù ,_r€‚ƒ„‚A…ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œž‚*Ÿ›¢‚¥¨ƒ¤Š‡•®Œ‡a˜°©¶¥Aµ„¬·‹¼›ºœ¿Ž:½‚³™ÃȪÍσ,ˆXºÌ±ºÅжÁ¥Y¨[žÔÛä„6ÇŒ6åëì—èíœ!ù ,c—€‚ƒ„…†‡ˆˆ‹Œ‡‘’‘!“’ –™š›œžaž¡¡A¢¥Œˆ¨‚‡–F¦ˆL³¶ƒMœ¤œ&‡ ’^·…®œ¬ƒ¿Â¢Æ‚ËɈ»Î™Ð›AÓ¨Ö“½Ñ…N‹V†È†ÙžÍÒ«Ü„äÌ“¹„ËÄéõ›æÉEöáû–⟃*qr·H`?M5­;È°¡CQDÖ !ù ,]|€‚ƒ„…†‡ˆ‰Š‹‡.Œ‰aˆ&”•–—˜™š›œžŸ  ¡¤§¨†A©‚,¬ˆ¦¬`†J…«‚“ƒ£¯‹·†±ƒ  ¾¼Å¨À›M¿œNƒ¹™¦Äš!Ƈ®¯·ÈνՄҊÚÕá݉ߕÔ›‘Ƴä¯ê„†è6¤ìï !ù ,^Œ€‚ƒ„…†‡…4ˆ‹ŒŽ‘’“”•–—˜™š›•‚Nšžˆœ‹:‡„6ƒ¥C!•A®†Aµ…«‘a–º“³¶‚< ’²‘ÂÃÁÌ‚ËΚ­ŒÀЈբ„ל§&ˆM¾ŽÕÑæÜÖ®ßçØ’ã… †’ìÄíÌ`ŽÇÎòø‡!Bp"%ˆ &ƒ™!ù , ]z€‚ƒ„…†‡A‡Š‹ŒŽ‡&‘”•–—˜™š›œš‰—“‚‡'‡`†X‡6\ª¯”Ÿ„,²°Š¡ŒMƒ£ˆ·‹‹»Š§ÁÈ—¶ÉË—™¿Ç<†Î–Ò°ÙÕÉ×̃ݕ¡!à„ß°aæë‘®–™ðƒ:ª.„ °!ù ,aŒ€:‚…†‡ˆ‰Š‹ŒŽ‘Š&’••a˜`›žŸ ¡›”¢¥¥ˆ—¢ŸA¦‘ ›C®¨†µ¯¦„¹º‡š¿¡M¿Fº¾ÇŸ·ÊÇɘÁÑ"Ìć̌®¼žªÍßØÓ¯Ù…,˜Ï‰6à†å‡¤‹ãŽòìX‡õú‡û!þ H‘“‚Â!ù ,a–€‚ƒ„…†‡‚ˆ‹ŒŽ‘’“N”’–!—œŒA ¡ˆ¢…M¥—&‘Š‚„¢¬†¤'…F§—Ÿ¨4…C”¼¿™a½‡Ã†: 6¥´žÊœÌƒÔŒ›Ö’ÜטÝâ˽Kã]ÝÇã‚Ü؜ڑª‚ðê¤îãÁð<ëÿ”~%ëfÜ3€*\È°¡²z×!ù ,b‘€‚ƒ„‚4…ˆ‰‚ŠŽ‘’“”•–—˜“!™œ—Aˆ £–ŸŒƒ¢“J¤„Š&®µ¶–¢„X‰V›¦•¹a„­ˆÄ¤ÀÊË·“ÌUŽ%ÎÕ—ÂÇÖÚ‰¹ÐœÈ Þ³ÛØ„âÎ µØC“¶ìƒà΄:ãÈÐNŠ0¿Ê`ÉÛ¦hK¼[ *LäëR !ù ,\z€‚ƒ„…†‡‡`ˆ‹ŒŽ†A’“”•–—“˜›œ”‘‡Œ¤ž§‘J¨ƒ]N§¦’a¬†±ƒ¢…¶¨Š‹X’!„À„M¡§¸†&•´Ì•‘‡¾´ºÍ”ÐÕÇØ‚ÔÛˆÚÉÞÌ4‡àŽÒKƒç’Š:ãòóôŽîõœ!ù ,^›€‚ƒ„ƒ…ˆ‰Š‹ŒŽ‘’“ˆM”™š›œžŸ ¡‚ƒ¤‰…¦„ª¢‚®…A¯ƒ³ƒ±Ÿ8G…¨´—Ÿ`¿ÃŠ¾“‡¢¶‰6Ä‚Æ:ÏNŠ&‰Ê<’Ö…X›¶ÏÍ“áâaåŒÂµ Ø½ŒDµí²ŽÔèœ,„ä¿Z‘ mÁG(Ú$u‹ ñÈÁ‡#Jlto¢¨@!ù ,_w€‚ƒ„…†‡ˆ‰Š‹‡NŒ‘’“”•’–™š ›†MžˆAA¡¥¡¤–6†$…LŠ!’ ‡¨‰¦·‡¶…º‘ˆ¼¿ŒÀ¥&ƒ°¸ÈžŒ´…\‚Å’ÃÉ“C–.ÔÙ§Ú͈ÑÞ†`Ü„]ŒHåêëˆÇƒ:·ËìÚ!ù ,bz€‚ƒ„‚…ˆ‰Š‹ŒŽƒ`‘”•–—˜™™&šž“ž¡¢˜A£¢ £¥Žœ¥,¦Œª‰³‚<±¦·U¸Šµ‰D½½²a¿Ä‚Éʘ!„Ï„NÍ[”¥Ç…Ø‹ÌÄÜÍŽÚJß–¸æ©äêƒáÊí¦:‹ïë½6½Š!ù ,_‰€ƒ„…†‡ˆ‰Š‹ŒŽ…A’“”•–‡a—š!†M› ¡¡¤Š¥¥©’‚ª”‘¯²ˆ§¯O‰U³Š±ºƒ)”™‰A`Œ¼¯‰MN•®£›Ÿ‹6»½–ÍϪÁ²µ¢’\’Ü„ØÕ”:…ØŽãä¤ÍKçòíˆæô‰[÷÷úýþÿˆ´8m`µ@!ù ,av€‚ƒ„…†.‡ŒŽ’“‚&O”™š›œŒ`NŒA”¡™:aAa“,Œ¦…–‰¤”µ¸¹”£¶›¼‚´‡¿º„·™ŸÄ¹ÃÉÌÍFÉËÍÒºM’²›<Ó6XÓȸ°Ó†!â娺ä¹æíîïðèñî!ù ,_z€‚ƒ„…†‡ˆ‰Š‹‹Ž…A„&&•…”–™š›‹‘‰žJ…œžšX¤£¤«¬­–`¬¦•²®†°¥´Ž¹‚»‹˜:µ«½¬‰ª¿†!ÃÍÎU„²Ê™ªªŽÔœa‚·‡ÙÏà«×áŸä®¨ÛèéƒÅ.æñòóôàMõó!ù ,_‰€‚ƒ„…†‡ˆ‰Šˆ`…A‹‘’“”•–—”&˜ˆ‡NŸ•J¨”ž­‘R—’^®·“aŠ¶ƒ)º¸‚²ˆ¿X–¼À’•ÈÉÄ¡®¥’SŠÑ˃šÎÛÛO‰ØÁ‚Ä–FŠI‚O[Üë„囂LìÀaÓ‡?ƒê.”ÑŠ)ò‡B°c°à¡@!ù , B'€‚ƒ‚!ƒS„‰Š‹ŒŽ‘’“ƒA”˜™š›žŸ“¢„!ùô,iI€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆ£!ù ,c¡€‚‚‚1…TBˆŒŽŽ„“”•TaŒ˜–ˆ_ž¡¢Žš‚œ£¨©ª«¬’­°±°‹²µ¶·¸™»¸º‚¿ŒÁ“¯žÄ“´¥ŒÊ½ÀŽ3Æ…¿ÔÏ»’WØÕ¡ÄÈªà›¬§“âÜŒÔÎåÇÍìî¾·ð«Ì²öèùÂØôÎÝúx(ëP¤Fø ˆEÐR?~C=ätÍÑ¿†–Îa¬!ù ,b²€‚ƒ1ƒ†‡ˆ‰Š‡3‹Š…Ž‘’T’•–—˜™‘_š•”ž¡‰ ¢¥ˆ¦©ª«Ba«ŠWž•¤‚@¯º‘BŠ·ƒ¿´»ÃÁ½ˆµÄ—ʃ¨Ž¨Í‡Ò¢Ô‹ÖÅšØËŠÛ«…Þ¯/‚È܇B½å¦³äŽ®•ê‰ï†ìŽñ•Ïæú‰Ê±’áó&9j¶­ž1}÷Y:È«¡+Æ„ä³T¯S8I¯ øO¡¾t„ äBÄÑc¤Œ™P!ù ,a£€‚ƒ†‡ˆ‰Š‹ŒŽ‘’1’ƒT‰B•š’…”’Q‹‘›Ž—¦ƒŸ‚¨‹«©¥°³•¯´·¸‰¶¹¼†²Ž»¦­Œ…¿›Æ½¼ÃȈÍÎÄ™†ÓÉּ׌Íω¥Ýƒà¸1Ջ弫çÚŒÁêÖ_•â’âÏËë„ùø·üë²ðàåÓ$0U6XþdeßBXô\&_;Fa&2ØkZ !ù ,c©€‚‚ƒ1†‰Š‹‚3ŒŠ‰ˆ•–—˜™š›œ–aŒT‡ž¤ž’¥‚¢¨‹§«‹_ª«T´¡°°²“ž·š­¹¯Á¾–B›ÅÁ— Êœ»ÍƒÃ†ÒŒB¶‰É¹ÀÐÜÊÔÝÂàâÕÇ–Ûã›ÌèÍ”Ýê‰ç•Ù†ñó¹ßëúŒ§÷á®ßæ•”O@<ëت=O¼ëT/‘BH÷i$•q¡©‘@‚ !ù ,c¨€‚ƒ„…†‡ˆ‰ŠŠ3‹Ž‘„1’a•W…T˜””ž¢œ’‰¤ŽBƒ¡¢­’¨ˆª®³´„°Ž­·„¹¦Š¹•À•_ƒ¾˜Âµ‚²É̆—¶ÍÑ‚¹»ÒŠÆ‚¬Ö…ȉËÛ³Ýà³ÕÞãçƒÏžåÍê‡ìˆâ•蘚´ØãÆß«ð†÷&¹âGK› w‹þÕ[ˆ(Ÿ§0»t3XÈ!CB-Ñ"X‹ãņ£!ù ,d²€„…†‡ˆ‰…Š†1ˆ’“”‡T•˜™™‘†_šŸ”—‰œ †¢™B‰¥a‡ž¬•®¬§±¶¤’’W‰© «·²Ž‡Á˜T½Æ¬ÌÇ ƒ¥Î”ÓŠµ¥¿ÏÚۅ׸ߓ¹ÛՆΰ¦ÜÎäéí“Ùî’ðê†ð»óÝè ùÂùý…f(€ !€˜Ø=CŽ›ÁxÇîAœ8Iá!„my{–‘¢ÇXâÒ1äÆnc¡‘* !ù ,`Ÿ€‚ƒ„…†‡‚1ˆ‚ˆB‹‘’‡T“–‹™—œ„•“¡‹ ž¦§ƒW‡Q†a‘›¨±²ˆ„¢°³º†TW_ª¨¹‡/»±Â©Åž·ˆËĘ́•¥–_®ÐÙ‹Š¸ÚϧԺ߲ãœåÚžÍѶè‚êíð‡ïžÜ¤ÐïÇŽ‰ñ…•óü¦Â„3À9l„êÅPCIûµØݹŠòb!ù ,a²€‚ƒ„…†‡ˆ†1‰ŒŽ“aŽT…–”›ƒWŽBœƒ1˜ƒ¡§ž”¤ ‰¤Ž3¨’²‡ªƒ¯”šµ¼½¾‡¦¿¨´§˜Áœ­‹”·…ÄÂBÉÂÓ½ÏÒÇ„ÖŽÜÔ¹‚ÍÚàÞßé†ØÖ˵ØØŒ’ñê§ñQŒô›îõÞü®õ • x¯pкÕ¤¯PÃkÙiBHP@+ƒ7½¢(hקC3N ÷0Ý?HEª !ù ,d¦€‚ƒ„…†‡ˆ‡1‰‚‹3Œ‘’“’Wƒa”ƒTT™™_ž£¤¥–¦¥œ©¬ƒ¨ ­²³¬‹´«’˜‡‚¼¼“¿ƒÁ¿º´™ÆÁÉÌÍ”ÈËŒÑΉÓÓ£BÔÚÒÛ‚È»ÍÙØ߶Ûå…Q¹ˆâ†˜îÆ״ŸäÏÜ…÷Õ£ó²øIŠG  ùfŒT¯A »Í #°YºRUlåK"³…!ù ,c¢€‚ƒ„…†‡ƒˆ‹ŒŽ‘’ŒT“–—˜‹•™œ‹Bž¡ƒ¢™ —1ŽB§ª¥†a®œ…¬“¤™›—T°ƒ¹±„·¿§°Áµ©„¾ÆÂÏÂ΂ңžÌˆÔЖÙÅʦ…3Ú²‚Tׯ…³Ç„§ç¡•ß„êãôëÈ¡Ü‚¼š×û‹ÿòeú‡‰Ê¼z¡"¼§Ë]$‡ÍJÔÏÃVŒ.n›¨-!ù ,[ž€‚ƒ„B…ˆˆ‡ˆ‰„1Ž‘’“”W”„T—šƒ™›žŽTŸ¥¦§š¤¨¥_“‹«ªž¡²©—µˆ°»¦º¼›¾‘¸š„Á‘Å¿Ê…Ç·®‚Æ“ÎÆÕËØ”×٠ٺÕÛŸ×ÒË¡›¯ÜˆÉ‘æÈ¿Ûè¥ëé…áô÷ñ…ä÷§ùЉœj'`^¢V»öÕK§0QC€ü"JüõY¹‰š!ù ,bŸ€‚ƒ„…†‡ˆ1ˆ‹ŒŽ…a“”•–—_„B”’—Ÿ ¡¢£¤¥–ž¦©ŒWª•Š­¤¯B‡°­œ¦²Ž’¶‹¨Œ¾·‚¹£Å‚ÂŽÉÈûÀ‹ÇÓ…Õ͆´ÌË°ÚØ“TTàäˆÚã‡ÑÁ‚ÏÝ¢ãè¦îîÄ–×ÍõËñå‹ßþôð’¯$$Ká°½šá[8 à"}o!ù ,]§€‚ƒ„‚…ˆ‰Š‹ŒŽˆB“ˆ1Œ@”™šŽT›ž„ž£Š‡ž¦›¢› ¬¤˜‰®¯´µ²³¶ººª»“ a¹¤¨‹½ŽÇ…ɾ̚˚–‚ôÏÏ̓ŴØÙ‹Ó¶’…âäŒÑŽæåŒêÞ»àŽè©„ð‘£Ý¸«‰ÛµõÌþÒ^巈ܳ`î*j‡  ÂA Éswa¢‰…žzجWDŽ£!ù ,a¦€‚ƒ„‚B…ˆ‰Š‹ƒ1Œ‘‚T‰a–‘”’šš‘˜›¡¢¡£‘‡¦©ª£¨¥«ª¥_…ž©´¯·¸ˆ¨¢Œ¾¹Á‚®Ã£À‘ŽÈŠWˆš»¼Æ©ÅŒÕ„׃‰ÙÙÓßÃÌ¡âŒÊÄàèË’æŠä¢¶éŠ˜ÑñÓôƒîõ‰‡Àìô–¼º§Þ0úÊK ”BQ­m*F0W¾‡ª*"rñ"F\!ù ,bš€‚ƒ„…†„1ƒ‡ŒŽ‘…a’„TT•™š›œž’Ÿ˜¢¥¦›¤…©«§®¦B¯²Œ¡³ƒµ†_¶Q‚¸¸œµ¡¿¶³ÄÅÈ‘‹ŸÇ‡Í™­ÏÉŽÓŒ‰†Ø·•ÑŸÚ±’Ë݇˜ãԆ厫ÚÖæ²ë¨ŽßƒáïÅòéû³è´ü†¬á³”î Àƒ¦ô 'ªž&‘"ƒˆ0S !ù ,d €‚ƒ„…†‡ˆ‡‰Œ„B‘’“”ˆa•˜™T™œ—¡‰—‹š¢¨‡›™¦©®•«’Q¯¢  ´•‰­©¤´·Œ±¸„¡Àµ…Å¿»¬•ÇÆИÓÑÖɆ¼ÖŠ©WÄ´¾‚ˮՙ_Ñ1Üâäæ¡êÜäºë™ò•ùÚ÷‚í‡xý3´i[¿ƒ¸è DO@ÃAöPíSe-"ÂI/¾ !ù ,b±€‚ƒ1ƒ†‡ˆ‰Š‹‹…‚ŽŒ‘’’T“ˆQ‹a•‡›–‡ž¡–‰B¢§¨©™žª®¯_°¡­¨ ³ž¤‘µƒ¾§·¸¿†˜‰¼¯¼a¢¦“¯ÍÃÓ¢ÏÔ׆ւگܧ҃ÞÕ×â‡È‡º¬ØÌëÙí†Ëïò‹·àŠåØøžç¸ö‰éêø ¨$KּÚò'ˆ¡¢xñ&ÒìÞ¡ˆ“*zÂ8MÇSµ L†j¤Ä`'!ù ,`˜€‚ƒ„…†‡ˆ‰ƒBŠˆ1‘’’Tƒ—„a›“Ÿ ‡ž¡¤¥¦§‘£¨«¬­®Ÿ«a¥ª¦·®µ„±¥¹¨¿’ÁŠ»ƒ½¯Â„ÃÉ¥Çȡˊщ³ÎÏÀˆÁÛؓ׬Œ†ÓÝ«Œ™¨äê®á„Åë¡ßˆÕ¯òð÷ƒž›çø‚ãÐùú}z·Š=ví˜ÁKˆé?Lëþ D!ù ,a›€‚ƒ„…†1‡Š‹ŒŽ‘’’•–—B˜™›‡ŸT¢¤‹…¡¥Š§¬WŠ‰©¬˜®µµ´¸ Šº…š…a¬·Ž«’ƆĻ¬È„͸_˥όԆ֋²ÂŽÀÝÒ¿ž¥²Øà‡ÛæˆßæÊÙ»Û¾é‹í¢²—÷–Ïèó‘üýÅÉ()Z/u£•oÞBIÿ*$X+ß·@!ù ,`ª€„…†‡ˆ…1‰ŽŽŒB‡•‡†T–›‡aœŸ £¤¥™¦©’ª¤˜­°±®…šœ¢²©µ‰T¯¸·¾œ¬ˆž»Â Á‰Ä„½¡§•ÎŽÆŽÊ„ÁÖÙÑŽº/×Ò­âÈå¸Û°Ô¶¦Ì„í•äæÕó¥ï¾êõ›ÞÍú†ä¢”ñût‘¼Bùd1ºöh!4C k—ðŠ?A©Kx±ã!‡=F²!ù ,ML€‚ƒ†‡ˆ‰Š‹Œ‹aŽ‘‰T’•–‰B—š›œžŸ ¡‘”¢§†¤‹ª›…¨¯¡¬°³´µ¶ƒ1·•¹º½¾¨¿ÂÃÄÅƼ !ùô,iI€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆ£!ù ,Y‡€‚ƒ„…†‡ˆ‰Š‡Œ‘’“”•–—ˆ‹˜œžšŸ¢£ „¡¤Š95©¯ƒ©²7´°…(…¶¬‘¦ºÄ¨Ä—ÃÇ… ¯ΉÆÌÔ9”¹×‰+‚Óžß”ƒÛ†ÉÕ†á•Ë ©ê…Ù”ïœóèö¯õ£ê¨ù÷…ýÒÐ} !ù ,cˆ€‚ƒ„…†‡ƒˆ‹Œ…Š‘‡’•‰‹”–šŒ™›Ÿ ¡¢˜•žˆ¦§£¨ª­“¬®±“²´©†›9°£#²(µˆ7Œ5ƒ •ºÁ†¼ÊÍ’ÉÎ-£Ð¢ÇÑË¡9ע̃ÕصÞá†Ü 5àÎ+ª°Ó ãäšð–Ìó„õñŽù—ûòäöý–ú„ @ !ù ,a˜€„…†‡ˆ‰Š‰ƒ‹Ž‘’““‚…•„™–œ›‘Ÿ‡¡¢£¦ž¥©ª«˜¨ ¬°¬7±— 2ˆ9Œ…5´½‰+‹·¾±›¼†¹©¤ˆ™Ê‹ÄâÈÓ’ ÖÙ– Á†#°Âš®³—Ú9‰ÕœßçïªÊÍðœóô(Ñ›öðüü÷ý{¥­Ñ@qËä™[Ö* Ái:ô!ù ,a˜€‚ƒ„…†‡ˆ…Š‹‡Œ„ˆ’“”•–™š›–Š‘œ’Ÿ˜ ¤†Œ¢¨‚ª¥«­¯°¤¬£±™³•·µ 7“(°9¤ºÃà ĮšÆÇËÌ™À™Í›ÏÒ• ÍÀÑ95š¹«Þ–ˆ–ÂœªÔ…”éÇíàíš-Õõ†#ijð¸öƒûçý:8PŸ­MÔu*T¢TJ!ù ,a…€‚‚…†‰Š‹†ˆŒ‘’“”•–—˜™’Ž›„–œ™¡š—¡£¤§¤ª«š©•®¬ž°±žµ¤(˜³·“9½¶9¬Á¬°œƒ†-¬¹ÆЬ7ÑÔ­º—ÃË#’ÓŠÍÐ ”ˆ»Ö‚Ï×ÚÕ‡ëíî±åÌëñªå®ôïøЦïðýŠúþE !ù ,b—€‚ƒ„…††‡Š‰‹Ž‘ˆƒ’’•Œ„˜–œ—ž‘›¢£šŽ¡¤¡«©­®¯°Ÿ¦ƒ – „±©¨5‡#‚-¼¨(7Ä£9ɯÆÊ…ÐÑŠ9Ó’¹œ×ÔÞßàÅá㽈§ƒÛŽµ à»›·“éä†+ª‹˜éðóÔÖßƘÙØ•’UmAƒþ¢µaÃpò !ù ,bŽ€„…†‡ˆ‰Š‹Œ…ƒ‚‘’“„”—•™˜›œ– ¡ŒŸ¢Š¤¥¨©« ©‹5‡§…ª†(¡Ÿµ¡9¬¥2Àˆ¿«§½–ÅÀʾ½…̵ ÃÔÕ’§‘ÏÖƒ·¨ÂÖ“Ùˆ#áœãæÓ-ž¸¡Þڣ鴆Ûó“¼ö÷ôˆú×ûŽîð—Ž`ÀMm !ù ,_Ž€‚ƒ„†…‰Š‹‚‡Œ‘’ˆ“•”—˜–š›Ž•šŸ›¢£¤Ž¡¥©ª«¬­®“¨¯‚-¬(…¶£±²¥9«´ž¢5°½Æ7ÇˉÌ’¿™¥¶Ñ¼–Õ¢Ù’#Ö‘Á‚ Ï¡ÛÏ‹ç¬äŠ×覤ìÊñò¨÷è‡úòÅ‹ý Œ4ПAI­¥ !ù ,`‹€‚ƒ„…†…‡Š‹„‰Œ‘’”‡Žˆ•™–ƒ—šžŸ ¡¢‹£¦›‘¥†ªª§®Ÿ#©£9¯£­´·™—´µ¦º«’½¾¸ÄŸ7Æ‚+³À‡Ã’-É‹Ó„5¡ÐÓ·9ÚÓ ¶Öâã‚2ž±˜êÆÒÖβðÄïóœÍäöêõ‚û¢ý¯¥Üú'‰à$b!ù ,b˜€‚ƒ„…†‡ˆ‰†ŠŽŒ‘”•–ƒ“—‰“™šžŸ ¡¢£¤£¥¨ˆ‚«„“(©±²­ ²·–9¸Š7‚+Š¿ˆºƒ• 92»Ÿ-ƒŸ´Š§…Ėͳƒ¶•5Ÿ#‡Ò»Ø‚›Ëžâ˜ƒßë”Ô¨Ö’ñŽí÷ùÐî¨ü¬îµpÑ¥‚úv!ÔÄo¡(‡øT%¼!ù ,\”€‚ƒ‚„‡ˆ‰†ŠŽ‘‘’‰”•™š›œŽ˜ž¡¢‡ £¦Ÿ¥‘§­¨¢„ •ª®¸Š9œ»¹›·¾Á›µ½‚Æ–’ÉÂÎÑ•±Ò×ØŠ”ÍÂÖˆÆ#…‰Ü¢Ô„ ’ÄšäßÀá¬â¶ž-‡÷®ï£û§—‹Ù ìéÁƒÚw0áÂJ!ù ,_‰€‚‚ƒ†‡ˆƒ…‰ŒŽ‘’“‹”—˜™š…–›Ÿ ‰ž¡¤—£ˆ§¥Š¢ª“-’Ž ¡œ­›©†¹Ÿ7Œ9·­5‡ ”»ƒ9(†¿ ©Æ‘½«ÀÒÓÔ˜¯¦¶ÎÕÔ»Ë܈­ÄàÔ2åŽÛ›×è¬ÓêØíº•óªÎðî“ø¸’û«þõä¥+P ¨@!ù ,c‰€‚ƒ„‡ˆ‰Šƒ†„Ž…‹’“”•–—˜‘‡™žŸ ¡¢›£¥¦“†œœ‚©¨«‰†§³´¶·¸”¯¹‚-‚2ˆ»¼ÃÄ¡9(‹7Å¥¾’9ËЉ µ£ÂËÖÑŒÄ+¼ØŠÊ·Ó¤´ÍІÔ#¥ÞŠí «òÁÚ¹ð—Ö÷ñÙüã•Âªéó§©_§@!ù ,c€‚ƒ„…†‡‚ˆ‹‹ŠŒ‘‰’”•–—˜ŽŽ˜œžŒšœ›Š£¦Ÿ©§ª¬•™­ª¨‹²··´-Ÿ2¸¿ƒ9À¬7…ÂéǞ¦ºˆ5¿¬ÊŠӃͤÁ•Ù؈ޫÈÀºá¨¼‡æ‘£Å‡¼×㞶 žéäòù¢„´ë“òýð ó§ïÁ‚âd!ù ,a–€‚‚ƒ†‡ˆ‰‡…Š†Œ‰Ž“”•ˆŒ’–Ž™…œš ‹¡¤¥¦‘§© Ÿª¢­ƒ¯²¦+²³¸Š¬£9¹ƒ ƒ»‰¾½‰ ›ÂžÅͳÇÁ–ÂÅ’ÀΈ­Ð×Ü¡#‰5Žá“žÓä¥ݱ—¤Û‡ïæˆ-ê÷ìÄ÷«§ÌÜŸnâ'k—¹L’45¯Ý‡Ñ4!ù ,a–€‚ƒ„…†‡ˆ‰Š†‹Ž‡’Š”“˜™š‰–›…Ÿ £—¥ ¢¤©ª©¨¨«°±«7²ˆ °µ¼‘‚‘¯„’„9·£Å½¦ÌΛ½-µÇ²Ÿ+ÏÏÕ¡„ÅӂуáÙµßÛ¾‡2«¹°èà‡»¤ðŒƒæ‹úäéÍý£Æ›k «€ÖþãÖË`&‡™!ù ,a|€‚ƒ„…†‡ˆ‰Š†ƒ‹’„‘“–—˜™š›”œ›•ž¡¢ Œ£Ÿ¦©ŽŠ¥¡­§—¯°³³²´·¸¶¸‡º»‹½¡-¾´ ‰Â«Ã— ˆÅɈ¶À΢ÑÓ™¿ÖœÇ’¾+Ú¾²Øªáž ½Õæá징êšïí¨õÒ®÷÷!ù ,c•€‚ƒ„‚…ˆ‰Š‰‡‹Ž‹‘‘“”–ˆ“˜”œœ›Ÿ…¢ š ¤¥†ª¬­¥©®±±›Ž(ª°²­¹¨-…9¬·®‹ ºœÁŒÈ®ÇÌÉ‘ÏӔʠքØÔº§¿¬2µÛä½¥Òæ ßå‚áìÈëäñŽÝ¸ï÷¡¼ÔûÈŸý,d6ðYÁAõð]’´jÙ+…å!ù ,`‡€‚ƒ„„…ˆ‰ŠŠ‡‹ƒ“”•–’“˜Œ–œ‘ž š £‰¢Ž”˜¦…ª¤­Ÿ™®§¡±´£2µ¸#”9¸ƒ·½À«„ ÁÅÆÇ“È+¬Ëƒ¼ÐÏ“ÒÓ°¨†¥­ÕÞ„-•×Šã ÍåØÀéêÐÔݵÕíóœõ¯íÙø²ùØ÷üöúj !ù ,b—€‚ƒ„ƒ…ˆ‰Š‹ŒŽŒ‡…’“–—˜„•ˆ›™š‰Ž¡ž¤£”¥©ªŸ‘ª§«°±²²Š¯©·³¹³¾¼†‰ÁÅ–-ÆŒ2 …9“ÈÉŠψÏ7ÒŽÖ³#ڰܿŧтÀ—(¨„å梳œ“9ðß ß Þ½“’çõ¼¡üØtJ ©²2¸ˆ¡Â‡˜& !ù ,TG€ƒ„…†‡ˆ‰Š‹ŒŠ‚Ž‘’“”•–—˜™š›œ„ ¡¢£¤¥¦§’Ÿ¨«¬­®¯°±²³´Œ7¨ª³+µ¼¯‚¹¦À•¿½Š!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs/bb.gif0100644002342100007640000000214207616533076013074 0ustar bbbbGIF89axæDÿÿÿÿÿüÿÿóÿÿëÿþâùñÙïïïïïâïïÚïëÑíçÐáÚÆßßßßßÉÖпÑʶÏÏÏÏÏ¿Éŵ¿¿¿¿¿¹¿º¨½¸¬¸³¤µ²¤´°Ÿ±®£¯¯¯¤¡›ŸŸŸœ˜Œ˜—’ŽŒƒŒ‹‚ŒŠ‰€€€€€pppljikmnge``````\\ZYWX]PPPHGBCFL@@@;=>;q›,Ì·)uÍ-¤ãÖÂE*](ÖEãÀÙjq¤=Éúl á㊟8ó¸? ç²çoAø¸»Û,OëÍ«_Ͼ½{epüJMÓøóßãú£¡ï!ÝÆ•GgöÞNÔܲH`1‚  :ß]ö'H‚‡0(ƒ}aMBÀcÛ°Ll‚´0 7‘$Ú‡ã, â[ˆ# *¾q§â) |pM(C.ã|@À‹>Åxš¿9% 0ÈZñä(ÐvðÄôR“OÂ@Ž%ðà܃l'A9’| ‚s–T@7%\0ÒØ7Ž—ÀUøši¹æ’9Ò†§l8ÕV¡w§IB‚ˆ¦XlŠöÑ^”ÇœT…×OB*)]¹%•pÚ§…’Â3€…°°i"e†âÀ8(øŽÖ]Êé®Â*ë’YZ07ºŒ¡7|C*‰Ú @( ø¨¯í ç)Ô²7„ ,à£.Tëí·à†;H ;./bb/bb19c/www/gifs/bb-na.gif0100644002342100007640000000152207616533076013471 0ustar bbbbGIF89aX‚333fff™™™ÌÌÌÿÿÿ!ù,XûXºÜþ0ÊI#¨8ë=Á-A„£HžfZŠkè–/ ¿´k÷‹žBxÀ pH 9ÈJ¨WøŸP“™¬>FÌt+ÔÁ 1¬šåg:|Ò·ÛÐ Æ3C 3Xk@L|b Fc|bv‰M"j ~ fz:‡ b_’ox}_g|›__“– >A!¡ŸeŽngwFX~|pÄ®¯ N²@a¶bÏy@f:pˆÒ½Ø»È>v™Ú#ÏϼNºÌ®|¦Š‰ªÞ®ÁàÉLéÎüÒmçR”åÉ&ÍO$zÇ^Åj„ß9k³–éÉŽ0SÚŒûáÂY®so‚43÷#³E}L»Ž‡ N¼nAlHrÒDIåÚUbá2¡%Ž8†™b†¦CW©hQ¢Ç;Ej‰ù˜'Ô>s‡0‚»ÔöÔ·iPuÚ±eJâ¹#,7 DYVƒËeÅbF;DÕ-\m¿&5+#í;`Åô!¦ÈZ›fÔ‘jÔgå²CyaeÊ’‹íš˜Øê¨tƬéPÆðòÖ´šÝ6jMoŒ“ÐR:~Ðb°o•õ Tåêl^1Oe+ñŽe°ƒ¿iœ‡0¤Åeïê¾.e¹V^!»VïF] ï”㑳ˆÞD\ëë±ãÛrÙ㞸ƒ¬f…OGŒz{ÿÆí¢ËH#ñMc”‚Ö vÃY+†Á_=uz’dáM4Y¥XC%å2Je’Ø1s0§r™¤((íéÃ…HBXw>I8ãŽGàˆÄ]<)äDiä‘Hî˜!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs/bb-diag.gif0100644002342100007640000003730007616533076014002 0ustar bbbbGIF89aNd÷€€€€€€€€€ÀÀÀÀÜÀ¤ÈðwŸ3f™Ì3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿ3ÿfÿ™ÿÌ3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3ÌffÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿ3ÿfÿ™ÿÌÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌðwß1kk!„!1!!!)J)!)!k))c1)1!ÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ,Ndþÿ H° Áƒ*\È°¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ JT$€£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶ìU•G‹ª]˶­Û·h˜L ·®Ý»xóÚ•;’¯Þ¿€ ÌÒ/HăÄǸ±c|KVL¹òCÄ1[ÞLñ±@ÏAƒæLš³æ§K«V8ztÆÖŽWË&œcíÙ¸ÿÁn:ögß¹ƒß½]‘¸ðÒ»ÿVNÐ5Âä—O6èZ²uæºyg·.ÝùqáÆ'þ†ÿnºôÚ³žü|såÀÝË÷½öúäq¸?bóÛEv }Ø¥—ž|º‡_ƒú7[—I˜›hìÝG n a¸`†Ìƒ"2ˆàˆZhÚa*Îv݆±¥˜Ð‹#ž8Ÿ‚映†:¸`‹¥Qè@â`Œ?2dà‹ïíHà€4v‡#wE®F$CWV Wuöažþ êõ)A³ÆÊ“¨lâéjwe¢zi“´j«5ªº«­yÕ*²Èâtä””R'â¥Ô›ä°¹º:f³€1Ë,·5Ñ觰HšÊ¤±0>ˆí—×½ +¸ny ï¼ôÖ«‘¼öæ«ï¾ áËï¿×ëoÀ êÀ'¬p‹/ìðÃÁ5 ñÄo&qÅgÜ-‹wìq²,òÈk]LòÉ(ãdrÊ,·ìÒÊ.Ç,3I0Ÿ4˜¯µG'~8+: ÂÑgeÈ0]KÒ€[þH(¨Hû—ªj5›dt¤ç±[ìgdªf—Ž6Š©¯ä® +®èîI죽þIu˜*-×W ›uvҦ롯V—zuþ±T®«£©öµZµ”xw]wLQ—d´Öè½xãÏMÚ¶ãXÓÝ(ãObN.ãtO>ãÜ\Bιç˜Zn¦èZãù¸èÐvÈ7ß”Ûö}Ò²>jç¸ãŽf°ss~ùŽ”“;à¶7—ºš¦¯~:°ˆíÒâ·Wî;Š¬Iþz/¯ûôÊ/7u ƒ¾;‡ ½öºk_~ù’£þ\æìsyÖ×?~þê¹›?<ïX‡ˆ¿êä£ÞzâG@Þot}šIâŽÖ#m–ëõ6ç9~­réê^à¾>Úѯ~Ñ!<ÌQ¯€ aQ@ìÑ/xòƒ¡ÿôW½î }Ù{àm(Béå/‡þ{Zó>ò-ˆ,nv,|}èï4°ÌàñX%A2MiœÜøþ'Åìm1‹³[âü2§E~Omü‹!±ˆ@ãý‡½¢•„Åè†Ê¡ìR²@‘@oƒ0lßüL4Ã@B‘|$üZŽ~èBÎN€Lä­:éÁgT_$yF*æGµ³ß…C8~ò’ê#  (I Š)•m,ŒóXòÇ R….L##-h¸VzÑq{ŒâÓ¤øÊ-rr”ÈSžñJ¹ÄŸÓŒŸcÞ1YÙBdš«‹ŒÝ2«˜Fq1”r;P0QÒÇ(…=Œ"7™;cRÒ˜Œ§Ãh¶vΑ¾þTcé”iËiæR‡øTc8»éNS+¨cøLH…šßœd5D“r.FA;oY?Þ¢úLæ.‹×M~F”•Z„§H;êÑA¦N¢¿zß$-ÉRúŒ6õ¦æ ùPAv¡ßTß<É9˖茦^[ØtJ8jí¯‚oKS×Σ­U‹DeÃã*õ”T7¦í}NÍ#á®9POêiPת#ªÐš¦¥¾­Š  ŸÂê5aŽs.E™^÷š™¼òõ¯€¥ˆEKØÂþc°†Mì^«ØƺŒ±ŽìÉ +ÙÊzŒ²–ÍlÅ0«ÙÎ:Œ³ž mÁ@+Ú”¼«´#¢Æ„ÆÀ´žÖuUmþÈk1Ò3ð 026Ì-U‡0ÒrKˆ#©ÏÒèXOâw£ë]R'ñª¦ó-²@©8KñöŽq»nu{ V:â„%\dǤk+±FU|±ìß\7‡¶6yOW¼jD꨷»K­ñ%Þ;÷›^ˆ‘7VìY&ðø$£çQuк ¹ÞyEÎVš¼sÔ~ ¼¾®’¾\+W5ö_ ×À^¬Vž@¬áOª—·ý›”L§]vZ±®wâ/Eá¦ß ˸®ëpyAI*çM˜ôÔ0E¹»bû8•ËÕågãƒ8ŽL¾oªzü`€é¸P€ªd†Ÿl[GšË.¦²­–IžåÊ(N3þ•Lå­}ÕÆ9ö«Á”Çù‘­3™#µ§çú3FçûÓ ºÒ8¦§q“ η˜Ñr&XžgȤHçÃ\í%|VHj ªÌUðM-i!³ú]™ÒÖ£êT ožµR{•R µO]kÖ5»ÜZ0éÃøuqÚbJd³F×(¨ ÷eRDq›ÛMå^VºÏÍîüЯ펷¾ÞMN³ØûÞøη¾÷Íï~ûûßx¾åMð‚üàO¸ÂÎð†;üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{üã ¹ÈþGNò’›üä(O¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@ºÐ‡Nô¢ýèHOºÒ—Îô¦;ýéPºÔ§Nu-åãêXχC°®¬„ëZÿ׿~õƒg½ìA;EÀ¾“±ËíaßzÜ¢vÀ=îu{Þ ~÷´Ï="}oûßϽ÷†ž {‡û@Ü.v½#\í‡÷ˆâ_ðÉëòc/ûáv¼;Þ»è?¿x°wÞíg?ýà†ùËã=õš}齎øÎ×þôŸÇ<îÿNûÞËÞ ´ýê5{vÐç^ë¢g|é’wäÛ¾ùÎw¼î•ïúè^ñ‘OXßþozãWßùÑ>寧úÜ“Ÿñ²ÿý÷ÅoþìKÖòÜŸ{÷ÙOwÏKßûË_þõ¿ýðoßîS~äç}ñç¸Ç|ö÷zØx Hzùg|ûGš€¨}È{HvÀ—»ç€xW{Âw€±W|ˆ~Ç—‚—÷uú‡z ~ ¨H‚ü§zÔçY7€‚"€­Ç€™‡‚/Xƒì—~ò7cuç{,8‚4ȃ8„Qø€Rèƒè¢ÕzHø|øƒWˆ|SH„Ö§‚÷g„é×€ H1œw(H…bXEØxM8ƒáGƒeØ‚gÈ‚–‡÷‡Lax8ˆ }&(ƒþzˆƒ¨ˆ¸ˆÉ—|³—öÆÁ7‚Ø‚£çz|T¸xd—Ÿh‰ø‰I8|p±n=ŠCá~t˜ƒÑhpˆ !‹$£Š;a‹@ÁŠ ¨‹üal«1ƒ Œ#ƒ‹9AŒ=Q‰ Œ÷â‹¿èŠÈ‹cŒ7!â_1ÔhsÙXQq¶,¶U7$PÓ‡uXZQŽÞŽX2Ž›Žô6$ra긎A¬¨Œ³¡ÈGîhŽUQŽò.øèŒ1aq€8‰±ºÈöhŠtg…~§†ð&è(ŽñŽðRx¨¹ˆ²e(’rxø‘-!ïØi1þyƒÇ(‘†2’$9&)w*È…¯W|º‡‰1ø“B …é‘—x{ªg~Z“îH!1É‘‚Á‰C”šè{»çˆ(|\‰…PX”Bè+X‡_ˆ@¡9©“ É’ë§~ˆ}Œx…Çç„Õ§…6x„?Y~(é’P¹‘éñ7€p9—@(˜«÷ˆa)ŠÈè–°'ƒy¸~­X—wÈh™–`Ñ/ –ÜGÿ–È”KYˆkˆ†‡9Š (ÿˆš2 i…¶—ˆ“—•ô÷„%(”oš$ȃ=ùšvHñ‚“–阙’c™•A(€ÅyÇy—{ˆêg„+ØœÁ—Y‘‘Ûxý†šþ8†Ûé•Ë9‡X(šci‰‰y~vh–AQ™ÁÙÃ)ˆ|ø™"øœÉžÌÙ™ÐÙ†ß)ò—Å!•Ñš+‰”³—„M™ŸâɄ繕çGšxh“D¡žë¹íŒfX›µ™ºYœeè…ʉ‰zøƒò™…pø¡±š‚åŸzÑ…@È¡tÈ•Ý)˜`ø¢I :0HzýÇ¢Lù› ˆB±Úu™Ui•û‡•)¸› x{)Š„Ù”û)çh¢yAˆDé¢^‡¤É‘H›†8È™ š‰dYŠC¤;Y()y™Yº.y¢T:/mºq/úoq¢Awªèù‘þžrššÀ‰¦ÞX§ÍB¨*a¨ùžA¨I˜Tù„ª‰‹³¯ú¯ Kœºy·9z˜ú·si£C9 › £cê¥yû«…k¸Q¸©¸b»võI¶Mê³’{—­ ¸÷y°Ó‰¨RA+抹ÜZ·â¹ºë‚PÛƒÆɺ"Ÿ_8‡»Ûº/þóº°ëq¬´««‘p8˜¨¶9š…Ÿ›ˆj½œº¹`K©Â «°ë½Èû™4Z¾Û +™2zžú¤Ò+±f¸µž’½éúµØ¶ò;¶DI¦^Y²7J˜&ø¡ lƒ¬Zì‹%hz¬ðk¸ ¼üŠÜžˆ¥lˤÎi¨®z¹”ùz½\KÀ±+»îÛÁv­®{ÁršÁÅ‹ñK¼-¼Ìkg:·Üû’>ì­Ü6|ÃRZr;À{šÄ¹±­&<3›¦LÃ7Û½G\—ꌼœ»Åë)Ÿ1ªKœW>šžYÜÅPÌÅ°:¬‹ê±cܾp¼wLÄü2ÄX¬¹ZlÇþFܯrÜı¬ܯ3Ü’¬ÇûÂÇ?ÚÆq|À~É ·9•OLƲšÇ¨åÈl<É”<»l¼ƒÜ±ÃkÈ;üÆ£ÌG‹ÜÉWüÈ ,È’|Ǥ¼0ä ³‹‘u<Ë«\o éÊ/ÜË*ɲœ¹µJŽ ·I È›ÜÊùÄ?úÊŸL˵l̲k0·ü¹šÉÌŒªÎLÐœžÒ|–Ä\Í¢|Ìí8ÇÃë½ÜÌËÍüË/A±š‰ˆFúœ¦÷– 9Î?‘Èn¬É×á•\á ^¼¹]ß~ß~ÑþÝcÂyáÿá'.à)®ÉÈ­½•ºâLál¼ .ã°á½7Ê|¡ãý<Èîã^ëÍŒCMäEî̇BÝ´q¹TmâAN·S«Sþáò[åݘÁ1IdnÊ ãÔìÝ;¾áCŽÒ_^Ñ¥¬½‘vŽŽwžçx¾Áþ1îä¾¾o.ÕqÎÖsná.­ç~‰èyä|¾æ ¾åbè6>èè,æé¬èŒŽé{ŽÈMN3.ß’~ÛiMèB½ÑVþØ‹žê©®è$Ú/óéý]ã¢Ër^ê|ê7¹êº¬é‰Þèe â€ÞåïÝç5ÔŒêu®ë™®ì›ÎäQ ìÈNŽR=ê•ìþõªzÎìwÞêž–NçÒnãÔ>œ—yéÌ®í»îëÁùí†.ì§}‹ûMȵìÙÎëÍÎÃÂ,À=îîhM뤞ï,CïªnïÇîì' åýî:aì…þXØ>ðè^ð¸.âÄ=àÓîïÕ^X¿í?ßi n²îÎÔÍð îþðèñ÷Þ¹ìê"?î;9ñþ±ñénïÜþñ+Ïï?ÍÿÞz%ó½Nóa|ðûî³®óßæ“õðòÖ9p™¡Ã7Oô-ñäíÃx®i®¨gžõfNñHoõâõÏÜÃîèÓïçø1þ•\>ömŸÎýnôU/ä¾õZ_æh®õ"_ä Ïòîò9î¯ø­é(_ððHŒfß÷8/îTÿòÕ©öJ?ó'O$ÄöO3Ïørÿò‚_÷çÞñ%ÉÓ}ùêùEïÓµžöƒÿùLß)aQŒ¦?õ›øt?ä„úŸ"'D ó¨÷¨¿óšë¶ìó{ô®íÅûßø9ü«þ½Y?¯ë…?ÇÖÞùB¬üç”îµÑ5voæxÏõ'º¿ðØ¿ÆIþ&Ýÿõý ¶í_ñ°òËÏþ¹þYÁ_T¤ïõÛÿ~Ÿý,ÿ$XÐàA„ .dØð‡%N¤XÑâÅ„ "܈‘cÆŽ5Ž$YÒäI”)OzÄ’åK˜1e¾tIp¥Áš3uçO AúHÔ£Q‘=…:D ´éR¨Q½Yð©T¬6³nåZéUŠM7‚ Jv¦Ù®iÕjåhrèZ¸ãÎU«Òî]¼x{æåÛ×-W´t ¥ú×ê`Àˆ/fÜøb`Ç‘½‚,ùVrÙË™5o^ ™óg¶þC ‡¶ê×ôiÔUƒfÝÚõÑ×±®Œ³mjܹó~”ÝÛ·oÏ¿Ó&i§näÉG“ÞܹäàÏi¼´rìÈyKçÞntïq©k´n3ûyÔ Á‡gß>¬{ÐãsúD_߯zø±ùíçoqÿKþþ{n=¯Ð“N¾òŠ²oÁ»ðËϵûã*B›#P"òvÊP8mAUóðAÖ*4QÂþpE~þAQ [,èD‚^ŒÑEq¬±By„ê†6œ ȹ:\í¸å +.#[£ÇSŒF)Ì‘Bƒ|”Å)Ÿ„òÄ,kÉÉlÍHæL2²Ú¶k’3+³¬2Æ9©þ¬Jñ SÔQý˜ßD6—¤sQ>y¤”Y^UÊüPâá(VÊâæ¼dHgøˆ=Ù&†þ&·#qƒî©e˜uIškZ.œ…ûwgJ£†I£Ÿ‹2úè¡…7¤¢‡n\¥#eÚfÆžÛêüðC¡|Š›í£ÂþÚëÀÞÚî¼µ~ùµèèƒwbV_¥›1·W2e®æ»ï‡üo×W–3µ¿,qÍ~<ïÏA_7t¬‘¶™Ñ^,óÎã¼uÅJ_xvÚ¿^{)ËS/|^´o‡ý¢×LöÚ‹G¸áøP?{÷G‘wVx¸‚‡^º[áêˆxƶéÂR#ÑÚ1.B­&u<]Dæ÷4;Žqy\$åÈG®q5c91ôĴݱ‘01ã&'BÉH*…~å ÉH˜9–ï”aѤ'=ÒIW2åfZÌ"gÙÅaY’Žæ £[K‹À˜@þ\%fvyHÕÅ®wïcf}§Ça*©;¦Ád"£ØºbD˜Ñ _6§²'îÒŠÄæ3¹É»i¦OpŒW2§óKºy³ Û<'©YÈÂ5 ™´&a'O‚гžîºgå¹´ë R™äì@"ЖɡI,ÖàÉÏ…^³¡æŒ¨½ãFV ²šõg9ÑŽ2k¢g±å:Ù‰E…¾“¡š[)JSºÃ‚—½4ý29SÅÕš7¥ÞJeB–}6Ó™f£)G‰Z¤œž)• Uª}T§>•˜F-U«j ¦bõ¤CÕꡢʞ¤~;W=œP˺U«¥U­Éak<³úV÷qµ«==þëøþyW¼ÚS¯[Af:Mª›¶%}ý(¬+À*V¢Å e…uXÄ$V²¬d¬a¿ˆÙÁhv³ê¬g›dYðu´•-­.D3Ô†/²«Rl æœ þUµ´ÅF èXÝ"–¬¼Õoóc[ —°³%îQÛ³¹F×ÏrksUªÜŒ»Ða®uiÒZš>7&Ó`u½Û’™!‘¼ï÷Ì{^ù™²½Ð[+ß[‘|ä7Ñï~u¢_„¸ nH~…`;Á¶"Å[ÀBm7~¡.E, ˜%°ùËá…\ØÃÿõ/ˆÂ`ÇWHë ¯te¦Áûâ÷#±þ†1’âgx¿8>1OP\ã—È>$‹ÅÚAÆØÂ9æï‡wÜß3Ã"Þ1“3”ÓŒâ@ÑfVs–Ñh=êUÂ(ÜíE¶\g,gúÇRþó µ>LJyómO8½XIÃ9—n:º¡xþsøR|“v—šš~u0·>LWPXÇ𨫇è’2¹…jNá°òÁv=èo¨¾\¨³çå'9«.“ ³¹¼¥¥õ”¾uÑ>éÏkjÜ£R÷¥äœÙA7Lr®ö±¶Mbù;×ãˆt§¯óíÇrwW—ÇÛ½ñŽÿ<ä7þ/[Íë…MgïÞͧô;ÃþîÌÎ;Ý˼çç{ãÇFõès r|;÷ô¨w-}[.‘Œ·б7ô¢Œh€+_÷÷Öö¹c¯lë7ÿÜé¾YgnUŸwžôžÞw¼5=û»ÃϘF÷µÛoî÷ºÜ®þwé!Ÿvn‚¿¡FµÇM}júó¿|C3oÓ1ò;ÀLó·þ󽺉<üÃýÛ¿>8‰û?ìë6]72ë5øk´T7Ü@û#-|@õ‰Àˆ5‹K¿€S>ø7Š+¿ê9;Á}+¿ùcÁ$¸‚c=T›‹ Ù{>~#·‘“8˶Œ3„¸+B?Ó>/ÛµdŠDþ«<ªã›6©½´¨BÁòÁ,d"û1/|‰3ÌŠ+Œµ³—îƒ!œ30ôˆ¼Œ4$¬+¼˜‚ ’„ð`Yˆ=¬ˆùC@¼’¸Ú´kCß DpêCm™š†`ĉ¹I<.D ;Eì ŒÑ’þØJ|D!‚ṑAù’~áP¡‘|±‘Ñ•@<“LŒºM” ?Ü”JñDQlÅ(Ù•P´’_4ÄPÑaÔ_AF:IÅB¿1¼Ž7ñÅXÜ=Ù–~qÅ€Ù–'±ÆnAÅ9©ÆpÌn¼–< ©EÍ0À9œ¦<ÔCl!Go¡N±Y$€¹zì˜j´–lùÇOþéF]¬DàPÇÌ赨yGx¼Fyä–}ŒÇ^QÆ€ìE}üE¹HlHoÈ‘™Åä)C߸Ãð¸E\Eq”Goä{´HžAI–Ü—“œH4ÇN4; Ûû=*œB<Â4s´Ý{84£;d@BQÈ{¡HX¤‚‘“W<ÆpŒJkôE‘9F•¬È{䀱IhTCÛK¾(“¾ùÀ¬6¬Aú›BæÛ¾0œÆªñ—ÿEpœÇS¬K»\E—ŒGŒXÈsìKNa·›ÄIz#·=²ì2Mk¼Ã„Âd?<„À˜pFëŠÃà½k3´ T@ÄŒ>Æ´7êCÀB«‹7¬:˜¸DÚ²Lþ6vdËÑ[<4À±„·\›¸õë&ÉÔ\­ª/3œ¾jS¿óËÁ_SA´4K;ãɯdÇÎ(M²‰F „»ä¢CÙ«N¡ìIàëÌ%ä¶"ôL‘“MÒtÎÛ‚N2<”¢Î«CäkÇÄ#¦ýOK­é´´Ò»·õLÀ¹XC÷yOòŒNΣ+\ZÏÇSφC ‘Ä©þ´/ù?JMøLP$3OQJ?rPݤÞ\#´08—R¬½PJ“ÐH¢&HúÐ1Qeà %Y*Q åϽ$â{#µ«ÐÑBJ,ŒQCZѾâÐ ,IÝÑMŠmPÉ‚¤ÜÒÙàQ&BÒ$EQcbþÒF,RÜ°Ñ(…0*mÒ"U)-È Ò-­+Ó|$ …R¼:¹CS¯«,Iš 4}+eS8tÒ”ÛMR#¥ÓÊPQº*RêP­RR>M2'£<ÍÒBíS;eº@ýÑüã%#¼E-<%T¯zÔ—¨Ý›@ ÓÞøÒ%-LmQA­'äa#3Qm?5Óô@Òï£Ð ª SC:}UM “RrÕJ¥TÂÐÐXåÕgS- VH}ÎRåCY=VwlÕóÜ0‘+ЄPOãÉŽ[Œ%>RÝÔ&}VIPí9j…ÌC3Ì5嬾HælÕÏÍæÌLtÅÄÍdcþäzufؽLü²àݵÛóÝvö](ô3È´bm=äîþ|e>Æe.çS Õg%dÿ¤‹v¼sÒÔdç÷Ub v»¤ QnŽ‚Æ`T%ÖÓßfèvè–ZÖÍ"Ð.$âøôhYã…nÎNfbÍ[`=%i>4i>Ê”U®h–Æœ.i,%g6g‡©é›Òœ~é>éðdæÊÁÓ®³éÉêÿD#…Ži‰Bêƒ-¥¡f;Å°ã<öb9äA`ÚáÅS©î­™nf3aê÷` ÄU°9ì[O2¹Üˆê“²†VvBk¹u×Ídk 毞ֻžk•¢êL¼^\ M'¤Ø+Ná|g^]úØÀþcî#l¿²ÛY¶eµ&å–¥YL\þ ‹>ŠÅ½‰&;ÀÖZvi©ºeMg;ìfålØ´}µ¤MÀe«äÓ®\ž5¸-òmÊ¥¢kÆlœ6RUÅå5Mì2{LÖ]VC6Ûä5Ü»½îëî£ù Pâ¦kãnªÚèöì^~n\›M±Ø³µníþÔìÆn±ìÚúnz•ÃnÇÄÌÐ^¿5,JäDÛkŽ´?Õî÷&ðø¶ì£ïy<ÞªV£%íÜ讽ÅCB!~æŸßö¥ßäTpiÒl冯Þ,JÚð _ÞŸU_½;ºûö/äà§:ñ÷Nq_]Ömq º¼äq|u ^YpøÆñìÕÚ™ãþñ•ÓÙ†Îe§6¦ ·ñ)‡éÍÆ®ï'Ó(ÿ&Gòí®ìúÎòçÙò6ír/¯r0Or»¶åT­$3gr4'R5¯r÷fí÷_×k¬žs)Ïð57éãæ认_}:?ÿs·ó0ïU2§^9/ºDÇÙ:ó¢t•~r Ÿô"¢ò#gô6R8ŠÚg¡‹ß+ÿ)°âô*ííàÎ%Vn>7nDÁÚt|s8Ç™R‰ó:Õ«ïHçòƒÝS8Rê çuU_uà†õdõK¯R"-bš. =t7ìcçJu¸f]v$vŸ6WíèõI÷t·ô õpëmUÚöž!w7ÑuFýrFþÿ_ÓK.uŸ[Å[R—ô ¥UdûståíS³M3/NÛŸgƒÖ]2­oÚ­aæ|ô8d¦Ê™–d~Ü©ñèK¥S¯n*jÁü’Â轶ð¹ve¾o¾v÷áã»ÊÆúýÝŦ߻¿Ûûv_ú»Ñç¿þùQË è\€MæŸq—!¸ ƒ™)†w}ýtÞn~ý&–wÎÆß}n¦Øj ¥gŸKåé·‰ð‰¢z-jˆ cÉ ØœdÏ8 Ž9ê¸þ#:’¤`ƒA ‰Õƒ9E_iªÒzÄ™EZzà)é!cQ6™ß”¹ñ¥ÞkTj™%_‰Áå"‡¼YcdÌøtEõø&œqÎXÔuÚy•M+F8P(Îd&mú‰å`ÊU}íõ'[Šñö(~ jÉ%‹eŽxšR-÷XmÞ('¨¡æø㥚zša©Ô‹9•–Ó’ööª•sÙ:+e(ÖÔ¡}ø¡j"“Žþzë–)¦e© ëI£¨Êhc€ÍJ+çt§Z{­¦Øj»mT—rkíZuÊæ§ÓšËcµßª îºír[Ÿ»w2+í³žF{.¾8¦/¿ Ù/Àêpó¢þË©šãÊ謼 “J0ÄK<1ÅvfÕ¦k†ëÔ¦ ¯YoÅ!‹<2É%eðŽ4‚¼ðÇBvü°É1Ë<3Íë¢ì#ÂH)üãËuö rÍA =4ÑÔ]|•ÆÐrì°ÏL]4ÉÿB=5ÕÙB§Ê6²,µ?+]5Å\ƒ=6ÙGWµ³›N»¬¶½dK,¶Ûq}ó¨<¯Ì3Û zݶÜÃÝ7à3ÓM­Öx·\pÞŽ­â‹;òÆX¡]nãÑíMîãñVž9ç~#7íÝi®wâkn:ê%›Yè”—zùæ©û+;ía˜UÒ| øzâ×}ïÏ¿/½;åN Ÿsðso¼¾ÅûÞüò£þ×>=À«k:9ð¼;õÝ{/·õc?<÷šÁþ=ú飾R¹cN¾ö –¯>ýõ›ÌþÉã#ÿ¾öû¯m¾º áo(îÛÿšó¿pbóã×àâÔºìyL~ ¼à©(/¡Ei„_û‡ÁêÍüš ': Ræ|$|a ßvB¾¥ÐS ¡a¨Ã®™€(¬Ê÷‡C˜í°ˆ–ëaÍ:Dºnˆt2"9³5 ˆ‚‹^¨‚H<‹•.Š^ÄÌ©˜/+ÊŒ…0»!·÷Å52&Œb<cfÆ'¾Oˆi´ óˆ;ýŽ9Lb‚¾¶Å¦©Q†l û8À8Þoiþ{¤³")ɤDnCrá!3i@>&‘ª»ÚÊQŠ’”6䤟¦ÉU òrþê" M)ÊYš²–•tå‚0ÉÊ]ÖÑ’k+d,i)LY‚’’­ÌÛ+ÉKV¢‘x &1‡YJZ’«™—„å2WiÍ_>“fÆ”f4‹yÊ*’^̦&·‰8e^1œàü&›nYNs‰zT'éØYFq¾s”¶<æ<ÍéI{~ŸÉìf;û Îê. ‹¤#A iÐ\b3¡î$&C{)=ÆE4“…QE÷yÑ…RSž§ë¨DQyÇz6r¤-é!ˆÒ”®°“µ¨Bÿ9͘žt¦lüh×B*G~º4£stþYúz´¥Â¨˜jKs:L£"±v¸td¹vÕ¤ªÔ™,ý¤K§ Söë¨ÜÜFó'¹´zÏ©g‚*X¥ªÓxbQŒKÍíØz²µZƬnskut™Ð„鬰œä8YC0âu},Ô+§Àè?À ®Q $Y…R9¿ÞÔq=Û^ÍÇYªQvY–% {XÃfÌ9Oq¨C;7ÚÈÚ ³\­i*yŠZ¢æ4£â›íR>›9මÄaWzNœ†•®;]«pqÝáò0³æ»mr½º\‘ʦÏÝ 2Å5]Η‰E_i-wZ‘Á³»â¬£xø¿ò>‹¾Ö5]z´^Èñö¢¾µLþ h_ÝJñ{ù•â~ÃÖÞæÚò±ž,r§wà»ê3j;uï‚Cù@ ؇Cë0{»zÍ Cn2ˆ=1a [ÍòqØ~ Þ „EÌͯ¾Í*œµqìZ\¿Ã8¯2^'B¼ÝÊ\fº:V_gÕç3È“Þ5ûZØ2¿`K2Ä&,ZWOjQ6`)-–:,+YvZÎŒ`³Ü>Ûj¾1”mÙ|Œ[å‚Tnòî =òþÕÌL>(=úB2gÐÏäÔs•;»KB{8ÎcN$¢VçC2Ú›}«t»Üé㘦;v_Ÿ£åYHošÓ÷¥4ý¶U¨½,¼S[XO³‰i&uÖbN[¬þ—ik¿íšÖŽ~rÑå*©‡Øò™4Ÿçj;G2ØÂÖJ±;ólE?š½ž]Y;´<¹FB©φìr©˜ ;°úS´ÁzÁkèªAûS Vƒ—ÁG$ÅÙK¹Ñ²¨yF¤#d7¦Ü]3xÇ*8¾ V˜Î¢’|ï;Üù°i-™Öñr à-5M"I9üܬ!Œ¢ä’ï-ý¥U¦°ò&nqÉ‘v±V[–ÆE¤—VñÇDÀAb 2ò^Íü-ʪiÝÚ¿Úå;/Ѹ}p0!kص*J¤…+KýS£ m5–ÚG‚Yë\‡9«1^Ť3 Dô&¿/4(ìIŽ*¸¿Õþ[[×Ήî7"”·¨¼#‚£nö_Èc¬cÝ[>_i;±À}( WýîYíÕiy†±òt·ïÊÛ}­Ì«+ÝBé·Ñ©{ñ¹ãØî’¼ã…^ ÓŸ©ï›GŸçqÞFCW–ôË›¼d¶¾zÕã>—®g×÷b_¢¯ï­¸~¼îMßûݧõšg¯Ø£¿ê¦V{ô©W¾é dùÔùò‘~Å8o4OÃù­Ð»|ÇПþ½““ù'ú•ÉŸì‹K|Ê:“|k¯îêžQœ+â·š¤EÜá]úÉŸè…ßÿuÚI ß-•½O¶“••˜çðWžùRe`îQž>N‚Y†N€i`þ} ã•_AÁŸÏÚ›<ѺV. ^–Þšó`M½¤Œ›A‘ôý ýÊW]×ÑùTÕÔànÝ` fàš!aËý ^›mF!>áûu»(!²™ßá²Zûh}±•«R¡†ÖÎMÆáS©UÿùÞ"ÒàÌ©íáÚ`¦a•þ%LΟÙMË$Ïó”žÖ¥¡*[¾DÁöá©Õ–öµÚîüº!Ïíbóì™ÞaÁ°Ü9Q¢% ¢òá÷YÝò9_pížåaöéž-BV%RÛìd\c+ª›”}Ÿ-^ 2žžúÅbmÉbþÖÚðˆNèA"*±b1žœí­^#®ï!8J™Þu”#Ó`àùZ.Q6Jâ6Jà-2#/²Þ2z=æãÖ£û-#Þü£¢â›¥Éžic<ÆÒ<âc#Ö"2z_2†#òá^òeäAc@Š`$J–¤Œ„R>å?0åDPeW8¥PX¥LíÐ/²¤:àFF R"eV:Y…TNeZ&åZªåAœåY¾e\2Æ\¾¥Y¶åVRþŸ1²!X%Àe]V¥\…TæPÔ%`ÞåZ>¥ajE`&^æ% u¥W‚šÁ#ÁŒåbfT2&^b¥fVåc~faš¥[Ê%dÎ%Vª¥gÞåi*fkÆ¥Vn eªKm~!Òõ¥Š¥jæi:%b¦&S¶&IŒ&Tþ¦[&¦kÂ%p&gdræj§mZÜñåPîffB¦o†&k¾¦kv§r>gdúæT¦vÎ&wv¦y’&j"gyvá¿u$êæ)B g¾fzj'Tê§f&b~çyâg[Þçogpn§g6&m®Õ]ãe†eQž'NhqR¨‚Â¥€Úewz§lJç}rç~"¨wþÚÙdÝf Uaf¿@g:g€.ç‡*§hÂèr~gr’§snhÞ(ŒJhiv™‰"7’¡}gZR¥zn¨bhjVhs–'h†§‘ªfs²¨‘蓙$à,¢+þZL&¡¶õ:zÓŠ]˜Nú_š¶i÷¬)x¹©œ.ٲͩªàØÀéîéƒæ)Ÿþ%’Î&eª’.)[ÚÉjbéx.aüýi„ÎhI,jS.*•Jj…šf4æ…N!‘:*¿0¦`¢åURªlŽ(UXªthª¤¢jY%!ÅžüvL›ƒ ¬Þ‰‡.é•Bé‘2'¯꯶§°&igjé&*j6i’æhþˆB§p²&«~‹žb'ÄÜêTXë¯ f`+èiK®k•èzªçs"§”&+žë”jèv‚k¸šj~f(ˆªY§JLáGŸ(œÚñ\±ðF¾2‰¸•\â‘\Àl˜$œ°8&¦þ¨…–fº>kqšçzŽk‹VìÃ’&ögŒ^êƶ¨‚Â'V È-†˜øœÚ l£ ¬vðÇika¼ÝŠÄ,bÌlVô*¯ú*´‚ª¯2çcJ,ˆÆ«ÇÚl‡Fj‚Ú,³RéÄ-ŽÒëV+¾Ž‰yÈÜðÉÛÉêkxÔ”4œZ ™pm¿nÅb+€&¨ˆÊ+¨.lÇ>¬ˆª-¤*jˆæèv,ÜFk¦5þ­Ó~‰—ìŠÓym‰ä«˜t­ÔæÞJ¤ø¤(,¤&æX2«Ò"hØ’g¼Æ(Ùç·–*´Ú¥äòèÄ’ëŽ.®í`›e¾êÓ.’ÜÓå¤4~¬Hášá–ËÊ*Zöæ°†'–Ú(†ªp’­ã‚§±òì€Rî„m¥k±æ,ÝÖm»a^ÉD]¥ì‡—0²ŒÈÈvm—tÜç) àÛ×.ž§.è–ךº‡®”¬ë ÷ºën¯`(޳ٽɬvÐ,­~oŵÞ#^çÈ$JÔÙÊ͹ÝâÍDÏ®¬ÞJ· ,Éú­ìÚ¯ßéWe– O°™ùÕ¿|gpõ™j¤þ0~qØßÔ¡ ‚° “×x9â3žÍ´ž0[&ïa¢*²VÆ ¿ð›Š ’#·° Ÿ* g%«~,Ø°ÑÞp÷ݘڨ°ìÄ^G[ºÁ õñfHqÍñÒ¶ÕJªW/PËêCqíÌ+徧VïÎöê»jìÏzhç>«çRqÛ+ß[ ø+ºMï·!\’¬¥ðËitºèâ(ò2n–'“r®i:ëÅÎk›ÌÓMj¨,­œáb-À.úª¸¾§{²§ï&-þ¨²J¨†–rÙÊè#C2ßNÝ$' FÿÎ\ÖÚÆëÊ\«‹äm [l–^®ãª(íئòÙ®²àÌÔ›ªŒnvo°î’ÔÊ„pÜÊzo¼ÈmÙíÚþòŒ:òÆh1û²'#3+ŸÈÞ‹ÙÁò×F3×NsÏ]Þ~ªb./7kæšë<ãó/›1°’sóZò¡ÆÔGÊz˜ôÆ]‰Ähéªhr!ëh¢>´ñ:t)ó.´Óæq%'ðü†t™,ÌúoɽsÈI«½8k‚–F˜‚$É‘…æ™ †e´Èa¾5ÐüP<šA@™l.‘"` Ù-Å‰Ê !ߧûh"!ù ,CÈI«½8ë`´DER@wˆ‘$‹`H»Æˆ`¡ñA§ö”î;B·c% !í ‹] …¢á0¸ˆ?˜À@(lM°!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0 Effect frame 1 rotated 0°Effect frame 2 rotated 30°Effect frame 3 rotated 60°Effect frame 4 rotated 90°Effect frame 5 rotated 120°Effect frame 6 rotated 150°Effect frame 7 rotated 180°Effect frame 8 rotated 210° Effect frame 9 rotated 240° Effect frame 10 rotated 270° Effect frame 11 rotated 300° Effect frame 12 rotated 330°;./bb/bb19c/www/gifs/nb-yellow.gif0100644002342100007640000000051507616533076014423 0ustar bbbbGIF89aƒ3f™3Ì3ÿ3ÿfÌ™ÿ™ÿÌ!ù ,AÈI«½8c# ’ ˆZEâ¢(Té '\å¡¥‰^° â0°ìx&í4ä(NaaeœÂóâ¡j¾àI!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs/nb-red.gif0100644002342100007640000000042507616533076013662 0ustar bbbbGIF89a™ÿ!ù ,-„©«Âæˆ!À(E£0…Š£Rj©•¬ë’†,jž Wv ÅN÷ð‡!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs/arrow.gif0100644002342100007640000000015307616533076013643 0ustar bbbbGIF89a¢ÿÿÿŸÿÿ€€€`!ù,@0HºÜN"ÊIãX!ë­ex r…¤ð5UJäbµpŒÉNÄ*jÎæù8üÀ P2¢ Š4P;./bb/bb19c/www/gifs/bbnav4.gif0100644002342100007640000000044707616533076013673 0ustar bbbbGIF89a'ÄÿÿÿÒÒÒÍÍͽ½½¸¸¸¨¨¨”””ŠŠŠˆˆˆ€€€iiieeeKKK444+++''' !ù,'@¤à$Ždižh:)‡!p,ÏîÔ(ƒ£ŠlMÿ1Ñ-·+‘R8.•Ý®÷þ„8©ŠEXxÞ#{,›M Eã<jSÔ‰õj#O[Õ¹ K¼ûô{u}* ……5E†… lŽ;”•G••EiœMFœiƒpxŽn›¤ˆ;5¦~/G«v[¨¯|o(q©*°¢·³F»¶'ql¬[ÈžEÈ¡Á‘ÐÑ(!;./bb/bb19c/www/gifs/red-ack.gif0100644002342100007640000000011107616533076014011 0ustar bbbbGIF89a€ÿ!ù, „©‹ŒmiÎ5ëÎ=ø‘Œ.]ªn“c¾±g;./bb/bb19c/www/gifs/purple-ack.gif0100644002342100007640000000011107616533076014546 0ustar bbbbGIF89a€ÿÿ!ù, „©‹ŒmiÎ5ëÎ=ø‘Œ.]ªn“c¾±g;./bb/bb19c/www/gifs/nb-purple.gif0100644002342100007640000000043307616533076014416 0ustar bbbbGIF89a™™ÿÿ3!ù ,3„©Ëí„”lLDÃΰ™8j ¤#˜€Ø¢å°UghGÁ`ë!&5‘CÄ1A!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs/onebyone.png0100644002342100007640000000023107616533076014343 0ustar bbbb‰PNG  IHDR%ÛVÊgAMA¯È7ŠéPLTEÿÿÿ¥ÙŸÝtIMEÒ 3  !M×tEXtSoftwareXPaint 2.4.9P½z IDATxœch‚wÍr¶IEND®B`‚./bb/bb19c/www/psy/0040755002342100007640000000000007616533077011712 5ustar bbbb./bb/bb19c/www/psy/bbnav4.gif0100644002342100007640000000044707616533077013557 0ustar bbbbGIF89a'ÄÿÿÿÒÒÒÍÍͽ½½¸¸¸¨¨¨”””ŠŠŠˆˆˆ€€€iiieeeKKK444+++''' !ù,'@¤à$Ždižh:)‡!p,ÏîÔ(ƒ£ŠlMÿ1Ñ-·+‘R8.•Ý®÷þ„8©ŠEXxÞ#{,›M Eã<jSÔ‰õj#O[Õ¹ K¼ûô{u}* ……5E†… lŽ;”•G••EiœMFœiƒpxŽn›¤ˆ;5¦~/G«v[¨¯|o(q©*°¢·³F»¶'ql¬[ÈžEÈ¡Á‘ÐÑ(!;./bb/bb19c/www/psy/purple.gif0100644002342100007640000000316607616533077013713 0ustar bbbbGIF89a™™ÿÿ3!ÿ NETSCAPE2.0!ù ,4„©Ë7ÑŒ)ØÄ0B¯Ñy@&u™¡Hˆ¢(¬™åžIZW¬àtÊ`¥xŒ¢6Š!ù ,3„©Ëí›IŽØ‚ØÂÈÄmš±špvÁŠZ$uGÚÞ/p*‚Ž+ùP1Ù‚%R!ù ,5„©ËíïF@ž „šœt¢"ÂÀ¥dx Áë¹,übÞqrîûa]h22ædnD!ù ,4„©Ëí„„2ˆ'GMh[ }Á)]@pêzk„žÇÒ«­æQ¸)™“9†‰!ù ,3„©Ëí„”lLDÃΰ™8j ¤#˜€Ø¢å°UghGÁ`ë!&5‘CÄ1A!ù ,2„©ËÍ bлhÕÊ$láH)'† ¦ƒÉn\™ÉdV±Àð2¨ÒCÌ4²Æ+àH !ù ,6„©7›…;"Ø6!Q.É]šZÜ0R•µVž ¦!ÜqÕh¼øùvÓdÑ;&å¤!ù ,4„©Ë M†(–…bäô@yßQ^êsÙz±É ²X~Û¢ck\(¿†qq9*—‰!ù ,6„©Ë .âS!Äc'Š£z› BxQ &Y]蘢fÝ8¦‰-õ”!ÉÐjˆ£al(—Ìæ¡!ù ,6„©²9„tψâ\ „oQ\Ö™Ù|¢·6æ%’ÓÙDƒ±{·© dšŠEf ½’Ìf³!ù ,4„©Ë'#‚h@ 2»& ©\\4NÇeÁ*™I¤jÒ²¬‹dd¼´ÙiÀtGI*—†!ù ,3„©Ë0Z˜AXñRt¸ø ÖbU”À\Ôƒj¥É.f-¢bô ßÎ;\,¢ el(—!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0 Effect frame 1 rotated 359°Effect frame 2 rotated 329°Effect frame 3 rotated 299°Effect frame 4 rotated 269°Effect frame 5 rotated 239°Effect frame 6 rotated 209°Effect frame 7 rotated 179°Effect frame 8 rotated 149° Effect frame 9 rotated 119° Effect frame 10 rotated 89° Effect frame 11 rotated 59° Effect frame 12 rotated 29°;./bb/bb19c/www/psy/green.gif0100644002342100007640000000021207616533077013471 0ustar bbbbGIF89a³ ÿÿÿ&š) ˆ"v ÿ×tc!ù ,@70ÉI+%D„½±˜ ŽÅg¨„¤WÆu&UÌGmÇl®KXߧÐ+à¹^Å fÀl&-†¨4º«¢";./bb/bb19c/www/psy/clear.gif0100644002342100007640000000153607616533077013471 0ustar bbbbGIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¤Èðÿ¥ïÿŒÖÿ1{ÿ!cÿZÿRÿRÿRÿJïBçBÞB¿¿¿ÖBÖBÎc„Îc{ÎBkÎJÎ9ƽ½Æ{”Æ{ŒÆ9½9½1µ1­1œJcœ)”)Œ1J„1„)s1s!k!cZ!ZJJw3f™Ì3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿ3ÿfÿ™3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3ÌÿÿÌ3ÿ3ÿ33ÿf3ÿ™3ÿÌff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿ3ÿÿfÿfÿ3fÿffÿ™fÿÌ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿfÿÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3Ìff™ÿÿÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿ3ÿfÿ™ÿÌÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,;H° Áƒ&ìv€!C„ FT8p¢À‡Ý&Z”XpãF÷( Ùñà=’%G¢4ÈðäI‘0cÆ ;./bb/bb19c/www/psy/blue.gif0100644002342100007640000000026207616533077013325 0ustar bbbbGIF89a³3f™Ìÿ333f3™3Ì3ÿ!ù,@_H@­“DTù`‘X IWxé`N¦€ Ülbp ô ÓAHÑS°á4—W&0ünSË.•"È$!ò|Ã'Bñ£ ^:õ:á+ér/=œÓ]¥Y0;./bb/bb19c/www/psy/bkg2.gif0100644002342100007640000000734307616533077013232 0ustar bbbbGIF87a ÄüÊœÔÊÄìʬÜʼôʬôʤäÊ´ÜÊÄÌÊÌäʼüʤìÊ´ÔÎÌüÎœÔÎÄìάÜμôάôΤäδÜÎÄÌÎÌäμüΤìδ, ÿ`U!ãÈ hª¦gÕ¾/ù.ÍЕsêÌ]ÿ1nÇ@RÉt0ŸJgpê¬Jì5û¤±^ÇÁé`Í´úì…PÜñ’¦ ì‡YŸŸû!z‚ƒƒ€€„ˆ‰ƒŒŽ z •–— Ÿž¡œ£¤¥¦§¤¨©ªªœ ª­² ·ºº ¾À¿¿ÄÀÅÇÉÈÉÍÄÏÑÏÕáãââèèØééçíçñ óó óûú@P`Aƒ ô\Èa#BœØpâC‡\<¨Oã?ýþ‰lp=òäÿ±[ÉžËr°‹Ðí[ÌšÚ¬AÛ)g³ŸÍ1+&,˜€ GâZ +Ö¬ZO¶šúj•UV¥2Å”L˜(‰M0¶l$D‡ 2ô'PZµlÙêC—:pP8Ã7M_4tÄù2X —-O¬(¦eJc$“8!B¹Hå˜èМهg1\È-b‹¨Q” ºu Ö'b»6A"€f¶à®÷‰#¾s€ÖÍ€7hÛD4ÓHr£9ó%‘£La@áÆbÇ^²È^xÌöï~¼“ÀtìˆIOþûðë@Wú9òóÓqÏßÍÿv ~e Y¨`ÿ# :Èz$à “T(V+›P¨¡…“tå¡WºòÕ ˆh",SMe -M%EKRHMðS»ÔÈ‹`à‹PÄè8<Ò¤ 2Ü€Cd7ÖhÃLáxãä6PÆô$<)¡s<û\©%@\^)P$tϘ] QB e”æš Iä¦EpÂùfstÑ›j „¦G$Df>$¡Y–ä“<(%*Á•UÆ¥71I¥’8Ý´d5Efƒ¤‘Ðä©2Èèè#¨Ä c㩼ü£5¶rT,@‹T'NP+U¸’¨k‰™ðº«*]5Âá†BÈ„Æj‚lƒÛ ‚š(˜ %mrÿqdÛ|ä… î¸w”GxmÈ‘nyðå×n`ä7†RhgïwÞM6†uŽAÇË9'ðºWð ·!\pIÜV°qÓ0›l¢ÉFñl"°F[k©¡ ›Ä±½¶šï¶gËÕpo9\f™Ï!!ÜPs…1æ<#¦…xïŽ+GWˆwÑy¤×|þ+à„Ä¥!}È5õÕz<òˆ&ÊFV¯›lò¡(\_e¶V­¼¢Ú(ŠËŠ²Ö ŒIýb€QÃE SÄÜýÀŒ¥µÓ3„ëDNÞ™M¤05î;ë¤Cî¸TåIóZ€Iýl®@@tAÿš¤PE¨Û)gœ I„è uÔçG›×þјõÐè咣COKèÈS’ÜoMÆëTM5…WÓOÑì-}RCI_ÔÝ«Æ’KÜMÅí”,¶œxÕÚ«T5 Û©¢W•|eÉWÌj¿"oM-uZõ'r¿xjõ¡ÇÒè:ÿüB4þÑk^ðA`{¶ -\Á üºŽa¦„È Lfse 懑Œ7ÛŒntC›‘É@b;MÇTP‹ÍF.”MkXv›€¥ì Ì!q€“œäŒP9$ ¢ qc› æF2ƒ‚ƒ@ï„Á‰æ!L{ (˜÷´ç=CË{ÂUŸÿÈ?÷I`z´EÆÿmío~òK#ç§!aQbYÇjÖ°æM¨Dnô•uE•` ·ŠŠ- â=Í({.J$"‘2# å(pA:Æ7:%É#qªxH’É6´I&a#Ûø$@°‘zh.!÷¸RT‰|€‰•©Ä‡@4B¦5åI#Áe@êÄËÕÑÉ—ASžvÉ'>É’Lb’%,• &B„»k<µIÊu פԥf’$J^²’ÞT†¨HåHT¡ŠF7¢Û¬^¥‹Y…Ï{²(Ñ'øx«±yåW¾’c²ˆ5‰õ“BqtVÕ(¿e ”Õ²V·ª÷ȧ> $—ÐâP†uÝA>êrW¼àuÂÈÿ+gƒ¹—v£…™Ñ_ ƒmز€å°ˆÃ ¶0–ÝÐ8´)ÎÄ\óB®f53< l3â¬LdAENo„tƒ#Ô NŠ„Ç”ôfXÂbªÐÀÃ80 UÚFÇ“´¤é¡€|¡˜ÆÅ:ü‡guK[°VˆÑujjÔD†Ü­^µoëëŠV{ÀÖnC_ÛRDÈY©h{鼛݌’ aTGÊÜóœç¼ÃaÊ&Å[Ü8È1ŽÊ5©%¦•f=‚‡Úu®tyˆéd›ËÔ¥®—ÁHn B[ÒÄs³ëœk37¨z¨Öw½Cí4ÉL&nqÈSžN6ë“êãnÿ}ìފ¢*-¥{íäTÞ鶳q"œ0¬* ¿ô’⎪(ûÜ×>KLKZg‰Ú]ÏH ûUKi„ÿªöPt¡µ€6ø4ÚÑòø aÐc¸àœ(øF ^BT_¶AÑ4Œ`*ƒÙqjHš‹í@¦( *ÇV›ÒðT¨0DqNYCBÜÄô‡7<±M‹Ä•òfB!ScvÄJg Žq@H¿‘~'0`GÅ%˜pµa;Wü"ºÊ…-îç[[¤ƒìà™y@×úßðËÏ6÷òš±$äF5ëÎmÖû¬Vø*WöÄ=sµØÑb±Òª¢#FSGHQÿF¤GE !…sH6’¦0¹8Ń¢Ô$¤$ J)!ê(Á’åR½%3óK‚J“*…iLƒØ˜½Ä5DêL\ÞIM§ÔHí%lb«rscÚ’¢ºd(Þ9jJ¤,5&=ÙiL²H™ÎÆ7¶=$P¡“TÊ0çz±ªÁ¨Oq¬ºÓ6O’ÐUyw²š…GQ¼QÏê‹3…ð̬ƒZÀvþ'›ôßkùÌ%³{êÓP¼èGË1jàs…Ë£WÖNz˜Ìq:0Q0MOª@ÄùK9@fi‹˜™‚u°¦Gð! "fÓÇ4B!ÇDÆóÓÀ˜c¶1Èpˆ0›Û e=Ü͉ÿ•Zs§¼ˆ,·jbš ­võÁŒ½À³†-ìÁë`Ó®|ù%®ÿÓò]×b×µ'Bgég%6¶¿v Ÿ»:{ËFØ^•Í‚&ú¢2 wJEß=0$Ë*cômoÕÓQ1ªWŒÂ=/ËS(¹ùÜåÁd‘k’8VB¹v´–$÷àGð„í¹Úõv¿}ˆì rºÚÚ–·º®ˆë²§Ý‚—®W}HÝÌ‘`I%ìøðBkgϹÙ\œt§; ë o×…d3¸ Œìá¢F±¸‘ i…«óší|柊߿ÂþRKžòEV}/á¾ •EàÔÒ+ÛéÊßü¡Åô`p…vÿFnàP‘€~±`¥Q^aÓ!a&UEvaÖÁF*ut,Ó?Ô'ó¢ÑB'TB7,f‚&„b+s#c(DT4är8tƒÂA"tb)å>bÏ¡a:s^À%U/aORâ.ÞápkÕ„fbæemõeJÓeRø€pp %5kDPý†ü&$B ‚!ºR†x†,¸ân¸B!nh"ò„òFhT>9’6tƒHöH«â#|à ÇàHÈ`i‘äi×F<ÄÓi¢g<¢Dj‘²(ÎfÍÔ(»sllƆ»[·†[º6'¤èKº[ÉKÈôjÿdžz©–ÐT‰U‰T² Žh$ÕtM4¡)ÑõMÝfˆät »À*ãvNǸ‡12±ò=µB^ð6Oð§†â†rHoñågûÔOkhùf pD†ÿ¶f÷gWp å…guE[.ÇXñ8ñre‚á.ca/\r™UŽq3ˆ0þ2Cd@6S,çr;T¿ñSC8%S?'T3ö18c8ÇS¨AL5F%?SJµ2IP˜±S-UF„6&0xR&¥Ä@:ɱ÷ˆ/Wpë÷^éw äÇ ‡†n¬‚ É8YlÙ ˜ ã”Y@Q}˜g8ˆ“mÈã8Ôà|ì%½“Z±˜j'ñá9!¡L¡¦c'±µw{§Ø:ª³' \®çZôЀ’;§Ö%ÉÅ£§ŒzÐU)Ñå ÓÅ<àæ ÖóxË —w=}ø}àO´7å…~燼¹rÔ’ tçWw6Püö •l†ý\¤”„€V ee†`F3”H³uS˜WÖ3=C4ù8MÐ@JfD0¹Æ(UÍ¡t60“-D£1°aŸ>À1¦Q1©3Ôb?÷bÿ/$’34D ÅñCÄB'¦Áš±RótDTaA8^PußÁqV°„OÆ`Þé.AFYÖpúáPleZÔ„àr…l¡Žÿ‘fÖÂfÿT£ægo†G» ÓHGb&RgfØnÔØg¯‡Fš"O¡¤¶Ð=±"nèôm«òHà¦]@2I‡¸)šâi× mÌGmN¢aº UÂ%$q‰®´J—ØJËD&ŸóJŠ¸Ô˜¥¸:¥Èk¿æ:½`bkÍDlÈ&¦¨´©d9ÒT‹Á“ šä¥Ñ§‹½èiÇP FÒmˆˆ¥’FŒá6nQJnIanŒæ*Í>&>î&O'‡ðÅ+hœ FZo°À†¿‚†ò~Ç™œñcùf£'÷?]ÈPfÕeXfÞ©…à W¢íqQÔ“ FETTuù2a„d'U¡ÏÑRÚ’ï¹C9p0òéR*'d·a´ÁC>·b)0!;./bb/bb19c/www/psy/bkg-yellow.gif0100644002342100007640000000134407616533077014454 0ustar bbbbGIF89aæÿÿÿû¤õ§ ï¨è¯â«ß°ÜΊÆÂ~½{º|¶z´u°s­t«r¨s§p¤n¢lŸmi›h™k—e•f’g`ŽaŒ`‰^ˆ`…[„[[Y|WzVxTvQtPqNoNmKkKiJfIdFbE`B]A\?Z?X>U<T<R8P7N7L6J4I2G2F0D0B/A-?+>,=*;+:)8'7'5%4%3$1#0!/!- +*)('%$#"          !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/psy/bkg-red.gif0100644002342100007640000000133407616533077013712 0ustar bbbbGIF89aæÿÿÿûõ ï(è/â3ß6ÜÎƽº¶´°­«¨§¤¢Ÿ›™—•’ŽŒ‰ˆ…„|zxv t q o m k i f d b ` ] \ Z X U T R P N L JIGFDBA?>=;:8754310/-+*)('%$#"     ,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/psy/bkg-purple.gif0100644002342100007640000000134407616533077014450 0ustar bbbbGIF89aæÿÿÿÎûÒ õÎïÖèÑâÕß´ܯ΢ÆŸ›½›º›¶“´“°“­«¨Ž§Œ¤‡¢ŠŸ†„›…™—•’xyŽyŒw‰xˆq…s„rnl|lzhxfvetbqbo_m]k]iZfWdWbS`Q]N\NZNXKUJTFREPENCL@J>I?G<F<D:B8A6?7>5=5;3:1817.5.4-3+1)0)/(-%+%*$)#("' %$#"       !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/psy/bkg-green.gif0100644002342100007640000000134407616533077014241 0ustar bbbbGIF89aæÿÿÿsûpõ mïdè_â[ßdÜ]ÎZÆXÂV½TºR¶R´P°L­K«I¨I§H¤G¢EŸED›@™B—?•=’?<Ž;Œ:‰9ˆ8…8„654|3z1x2v1t0q-o.m-k,i)f*d)b)`&]'\&Z%X#U"T#R"P!NLJIGFDBA?>=;:8754310/-+*)('%$#"              !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/psy/bkg-clear.gif0100644002342100007640000000134407616533077014227 0ustar bbbbGIF89aæÿÿÿûûûõõõïïïèèèâââßßßÜÜÜÎÎÎÆÆƽ½½ººº¶¶¶´´´°°°­­­«««¨¨¨§§§¤¤¤¢¢¢ŸŸŸ›››™™™———•••’’’ŽŽŽŒŒŒ‰‰‰ˆˆˆ………„„„|||zzzxxxvvvtttqqqooommmkkkiiifffdddbbb```]]]\\\ZZZXXXUUUTTTRRRPPPNNNLLLJJJIIIGGGFFFDDDBBBAAA???>>>===;;;:::888777555444333111000///---+++***)))((('''%%%$$$###"""  !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/psy/bkg-blue.gif0100644002342100007640000000133407616533077014067 0ustar bbbbGIF89aæÿÿÿ.ß+â'èï õ û ™ ‰ § ¢ Ÿ › • ’ Ž Œ ˆ … „  | z x t o¶­«¤—vqmkifÎƽº´°¨db`]XUTÜ\ZRPNLJIGFDB>=;:A?8754310/-+*)(%$#" '    ,ÿ€‚7)*+,-./ !" #$%&'(012389456:;<=>?@ABCHIDEFGJKLMNOPQRRSTUV\WXYZ[[]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/psy/bigbrother.gif0100644002342100007640000002301007616533077014521 0ustar bbbbGIF87a°¦³€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ,°¦ÿÐÈsØ1ÕÃ69w}±]†©­ŒfY%‡da å™ €TNH˜%M²! <°„¤J“¥ÏYÍ"·SPÐ&ܘI˜ÆrpP^—J‚>D2*H=*R6462?)\[yY)68 =8h3'-"-skZ|²~{f0ˆ}yge+Á”?)¥2LÀ–AŸQÍ@‘Ê5Y‹ÚWY’’ Á­pin²p n|î!·v1­t0æ‚t“õh yÉKS,åhAFɤ*L>ââIE%Æ v‰ˆ’?Œ4ºÔ„€2KUªs¤X;c7gÍj‹e9\]#vÄ×k0ŒÅs¯\DhÛd¨XFѤe1b¶X"D¨Xº váLŠŒ ±hd9àu‹‘qd锓ÆX– ÔÅŠÌŠç^%£“C¨s‰tŸ)lØ{¨E‡…´ oM`.¿vztx]ÂAn[”µëꥬÛqß½yÕR.è²rá¥tòl+[2¡ËŠWÎBõ}03vÀ «¡¯h±{»ø¥–vÎmØ\^Äz1+aãFEטý©RAÿ;ÖMPVYÔÇÝ —=šw Q!‚524áXÖµñJ„¢”ç8HF…ù\ÖØ ‚ø ‡nøa,+–AŠè[LÐ]VÞƒ>GÒ|öt!Œfg#ý‰€ t$ ‡x^yˆÁzˆíøbö wˆpWA×_~rØX^’°Äq;8ö'—š” Ú•rV"I(hÈ‚þx`‹›òâxSŠ€JÌùc9Š2ÆàUŠRÈW†9¾E†u—ÁX‘l°dÂœµ †_X!i¦‡r]`•ó„ä!fb*¹ˆ,4–¨’ž=ÈA†ô§–W1½Zf†D"˜2™Ù‘gÒ –ÿo€–×fv0÷é³]!ê㶠NæÀ©Uê ¡ÐÝ Ù{rˆ×(Wo‰…'cµ‘Ë…2:œ'ѹr§!ëÙ#Žp©0šºK£>£õ„>ÿ“ôå°ú›á„æ‚ì ´ûL=c>K7â:n°—ð&:¼éÈ{(¸\ªŒ47µùëÚ\ÊÌ@•Èåøº‘Žx¢‚ jAf¯ëÚÏ —©g"_ë!šsØáÍ›;Ð,6óªúôJFvÂSJ$–¨Èô w[bÕÐñŸ8t0`ì vx•òÔˆozA<D)OLž`À=”ÿȯ Ò W("ÕK|Ù]ÖL’•É”,’‰ƒ)3Éhe2[•£xÁ9øÑYã'@<}­WZ‡^|ÈCúOŽ ¤"×ñÂ8àè-Àd"%ÉÉsÈq“°"]VŽQÎÍc~$å:D³«Ú5¾8‡.Î2’æ¬2ùH[Ì6B£ô$¸Ð†¦± ‚˜MùÍ—p#ˆNØ@ƒ ‚”'"ÌÀ0ù™PJæ:yLP?ÀâCu0Òt¦8G~ ^„cƒ† .2$(…'Â؃6™Q‰.lãÀ:aPÆ°ÌS>X‘•Ü¸—}|‡¡3ˆBÿ ŠÙÂ@ð”Rdà4èCCû’ŸÐš‡„OÑ*œaÍ2pCå§u³Ùa(Òt¤å‚êȇË|a‡_ £ ˆb£RÈ3+WøÇ vQ¨z"@P‚A¼*lã/çhÎrÆÖ™Ãû¸Cè<ÖÒ%xáÇT Ñ„ˆ"Y¥HÁ ”.f…ø’?|BŠkÐà Q€'pSƒÎpF#ÄzúRî²ñVP·Ùª"¤™â0lpˆ£¦Ä éTbðÕGZ(x”ßfòâJ¬4"@¨‚P ë¾Éú•'"]ðM¾ÀU6g‚ØÝôÉ ^+`z´VÐ@6üL‘Mÿ7!ñ²ø‘ æ0o3;n²‹­X"Lc YQÃ=k×¥N!"¨ö6²àõ—Ô‡¤u½U"[¡×ààÂ4|2ç–ÀÞâ M¨‡¥Æ‚t­Å®Sÿ¬lSɹ*(†·Zce06Èw¹Žý{WìBø8ˆ·°“êg`œ¥Ó¤5ÁÁ ådÅŽAƒö^-dØöÝ¡‚<Š …ÿ5ÃyÐã©D·ÈÁåÂ@þÿaÞð^ƒ±cþ§ÐüåDËZûí ,ëv¾¬ôÊ`>º è­h+`s¼û…¦4‘E€AàÅúgU^0HÕÅ:ªצ»èlžÁºlváúñ3G’›öââ_"{¿/(cFHú x”ÛìR rõð½V0hKíH”ÂåÕÆŽ=ß%d‚ ÁPÎJTTœhÂàø®V7]Ø?SÓV0ÙïU'{ëÚðk>¼ˆ§È4!G>h+á­";æï¥jYMè98ÐB­§ª<3’è[“ݶ=öÃÒ‹Îç 7ø#‰½yÕìa¦ÅYçü"lˆK?¿é͈.>êˆÿ$ì-¢#·q:÷hL·u8¦|Ô6IEí´yVE÷Lç±RØuÛ~ðdÅ€±7cfo¶–o»Pt<¡€³˜ô IB+ ñÅ–eœæyÕÅ|3htI·|f×{_¦)àg·RßVd§gð¤sšMíÄgh&`…V¸S7¤3Ï僡…[gWlš&L èi6iŽ·xæÆ]ò–xžWq50l=( lãUhZ$Ì ¢p])å‘wÿ•F§`¥Tñ–UßðyˆÐ yPf]Ð|©Öƒ ¨g!WªVv±&õOZU`Å D€Òÿ5D¥+ÕTÁt„-Flñ@wÖ¤X¨ àÖAvè_]g{“Ö&µ`·—÷¤]æ>ñÕA…ôÂÕO$U‚'wl˜iœ¶R´V„×_ÚôNg·ˆä—kÖf×ö‡™ùt!ŒD‡e&C¢"ZRö%4q]ŠµU»8YPihi^fjÁFL+ІøŠ^‡y…ågÖ YÄ `Ú5ZXÅ; —SÛ~R1/8vÈKg ze‰ßv ÐÇ6döƒD`¹µˆQð\Nõ³xƒö§tÓ¥‰s%IkÖV¥¤+¡)] NOµa…w—uãVZ1ÿpý%v1v6^¡XkÁµ`Öhì’°'t æ“gPU¦×74äm_¡}€“ž¡ ¸ÇGm](B(làpeà…Ð~…ÅNØÅu7ød^5s•˜^†$õz_O34"¾0u‰ð€O{ýåK‡fI^æaI˜áGM/wwdG yoCðr”s3WPh>À‚îÒ‚Úceµ r…SaõYƒ¹{^Õ—@GaåL7wsÀÆeÙøn=^A¶€דÇPŒ—ÍHgó¨Àr†òz°fWž´\}vmš7„¢õ‹øy’\Š@m„å™–h^bPÿvç'ÀiÐVL{à 0€)-REÁ)e~R~)n?Xw‡G‰S {Ò9|‰Pcµ¨]ÆqK·’s—W%wƒÛš†•fÆyeŽð[/!Õ<{tGð5K¶i™®è˜ —œçµháv€W@HõgÖgE8]:¦ ˜Px3ÕOdà’ }0äÝQgì88dæd GñY™†e‡’øõ´×hµ¨¤wŒø¥;×gšæ† 7m1ÕtFj:YyÈS(@r2Bc4ßÄEN÷OêbÓF È|L¦v•Á5š Wv½¦|‰åOáMÅ·]«•Ž“°2Ü£ ,ÿ# À1)b®†Skç Sé_Øôx•J]àÖ ‹ç`à]‡—‡·„U¢ ÷e‰e[˜ö“AFP÷Ä -! °-Ñ‘-­—Y¿X[sE8‰ŒO…'aÆçbŠ9‰hz&é†mw©u—ˆÔ9M”Z…€†VÄ…¬Êð5b¢‡óJuÄAå_ÉùhçG«Yrx‰¨&OkŠ]ˆÐRɦy^\W«åW7!~UÖuIxl–ŠuZM…h߈vEçucæ ηš)µZ7~ "aC?r&NÄ*FIg­6}d&§(|¸Xvéh‡Ÿ÷|×RŽ‰sËgO!‰ZËn\å¤ÙTe¶`»Y¡ 1R©B 5YäYT‘¬knð$˜mx‰Š¡—€™qÓÅ’ÄZ6÷‰¿ø¨äênÛhx‰à¶ù„V;Q$vãÙá±y¢ a :PuU’¥°…ß°g¾è·î·ZúeÒ ¡Š`¨Ÿ‹wâ _†ÿ¼CÁY´`"4ÎQgÖg:xxx{—hÙÐ_¯›g؈™;¼á[jS+¿ÚUµÄ¨•];¾ZRÕiµ +0»Œ›í°&•± JUDqš±Ç~\%Þyq¢]j›ÚGS†X’wz<ÉdñLêöbØ8¥zŒ‘ÄÐâƒÂoГuBRUÄAÚ—Ax¢vRIÈu~ñˆÕiFvÏP­äÊç©Udû¹Ž9¤–6«Ó=UB âtPm UŤZDl0ö¶Šé…Po[zûû‡ßzv‘fXN`9»,—]êÃÂÇò3""J”¡²Âð5 }Õ;›ÆïGÿU”º˜,¼Ž„fÀÔy¿‹QŽ|ÂXª6v£@Ë…–’‘FK´9šY UAÞØ æù‹5Œ¨“[S¹Pœ8’7q¦JRžˆÀÆ[º˜Í¯ÆªÎ¬/9² •ãE?Ai¶ ú¶<‘·yÄAјhhòª”Ãà–‚›Á•ÈX°ˆï„+G ÓÇAt%Kd¶å$Ф¥ôÔR|eœñO LkµŒ'¤Å UøUŸår–gýÅAgŵTgÁ²%Ô5eRb åÌÊbÏñŒzë§ÐLiÅE­¦m8%È[ƒUùÕÁ¡q¨Œ†F½Á$… ð _Sÿ$KIúª°Ë=y†/6G«…¡¿Ø*e»d–°Ó«¸]dÜ;Ïê1*§\V Ó·däÁ½µ ×qQ†A<ñªí%]xP™K©,ÃÓTEÓ k„uAf~Æ%eVýjå’É©2xÔwäE¢Ð÷µÓ~}±Æ Àa  Â$fÁñ²xÅŠ·È³[Xߨ!eÍA?³²Cå¤Sª4€"å×1ÖÙ¼™QcJ¥äj9,e'2k¼vc»Ç©rV¿-I ÂÅ ÇÍ(¾¢”~)¸”H«´¬FÔÌeEüÁn«Ó­bÙ¶ Øý‡€-ÆÁ×uqUÿŸ4€Q¬}YûäEeCᔕ-xm4&ÆH– ó*U®›Ã¥¬ÖçI gÃ}V…&dÿøZÒµQdÚ¥°{ êtß°“S&EY1æ„afÅÖ~MÄð¹Y{áK$p .ŽãÆv ‹¨ßVßÓˆ ¸í–ÇœIÜÑSp‚%meÐç4㌑1}ž‘½VÇ•^ûZ ©MØ~•OÉg ¡ na|‹d›åR…ma5àãCë5Þ-ð-–½PB„aXf`KjòPJ)žI5ÞÖyqK ov`ØRÏðmSç)ÛßÁÜ£½½‡y$Åç¥dE½ä)NâÔ'öÄ„þ‚ç,ÿeR†WÖY JñQäà؆ݖþ­Çž£Âj@õâÛ9Þl5À0$Û5çÿç›Ë’[‚ŸÀ÷‚Œø Ü` ‰Ô*ÚÆP¨2 >é ìŒËu¬·AK.håÁ£]SÔ¾oqÄÍÖKÌ€¾¤Á«n}¥~Â6NS&ÉÒµt40tHçÓ‘žÔ–Fk,̘yH¥h}¬b`CÑÓZàù†­VÍ»’mÆÌZíØ%R)¢C™Dbw”É‚îü­×7 ?«CI·ôºÞ üúv¹È`c[Ïp5\Ç¥¤´ Qœ2a±(rëÛ.£>Ðè­ÝRˆrrÿáìíÙ•žRE¡Cº¦FPÓ—ðÞ;(t†adtä$FG:E¥ÎÖ æ0¨…£!Kî tÇ4f a+… z ¥o[ÝŽÑ«ENè)HNßq>H\V*áP¿…”$Ïëç¤Pœ2¦½ðoéÙ­¾U(¨¤†£¾{Ø `[€¼°VI,âëV©ñèbÍ·†´N®< eN$žªJVâ_Ò£vyR!Lc]o9k‘ËAj²+ODL.Qo.îâÚ<ûŸ1S´:ÕñãmÞ<ç ¹ õûU…WF±¶§0–n%ÒIÝâ(ÿÂT†çG¦§–ÎW°†ÿ–ÓÁ9ð@¥+3R+ó‘Ô`H 5˜B€Î¢f¢ ¥ƒÀª2+Ï”(]ƒ)×BŠÃ@t9œƒ,—“Ý A¤©–«]•›#ÉP‹Ácv(“p?†6Ü”=§×«)¤™´=ƒ ÁcÎRIý2lÌ ³¡()¢  #¤ž#´,¬—0I¨Ë“¬+/$E°ÏO†¥§ÊJŒJʩ˸µ5¸:³K¾µ—‘@(ɘ³•œ„ž„ăÃV¢’²g©©ÉêÀš‚0®O!obƒM¬A§š2G½$Ž:¶ €À>•5›I>l9µ ¨*VlSZ1ÂäGF8 ôL5'0ÿžä™i‘£-80Êè¦Q‰hzœlù/¼6'È’Ça/*×XøSSÅIŒ{ )fpO$Ï ]­])6f³ðËÅ"çš¡£mÉHùBxáÇM˜&Ziâ…) jQÃe»™ñX2„D€\Q¨ö“ tDÚYdgP™ÅrÓËŒb¯rуC¼|}` €aÎÊ—/føqÙD»@ó8ÛyРŽ¹>Ü.µ1𣪼y¶9Ú£pn“¬#E­T¬~ze þÁ‚Êô)C­æ“ 9£*£"„} Órƒ±Ã$ölÔÒ©öl`|ÌÖ‚wÚ½($@Nñÿ3~ƒÈ]=ÑGn~ÔÀÄßL(¢¡JŒùIÁ/ÌÃáï†âœ&B¡”´Ù¦“Ž¶Á­Œ‚‰Æ·$hÂ6Z8Á è¥ÄIZJ©Šâ4€Q“&ø“O‹óT3­Á ró g&l% `†a ”!4br”g8¢'Êi,LÚi›xhGþª,ñ¤ k8©·3ä"c`»²Ò?Ùˆt¨¦™˜ÂíRÌÁ»˜,ŒñZq‰Æv\ÜO}|©r«æ(RB÷‚¡P‹Ó¾ˆS™Fvq£øL†€2,CˆPp+¯†G-3a2…ž.É|%ºÏ5òŸgy%— ÐÿQn†+âRæºe š±,L‰°¡iBbÂP>9¤˜,Ò9e…’Â(468«ˆ} ÈÏËáÀ•¥¹8þóQÿö¸˜%,¡DP} ;éòG<(ƒ¹<öúl¶$½”ãÕrç¢>ã2ÐBFá)WƒñfÅ Þ‚âô§ì~ü.)IF´ï>©kQžMEyéè Ñ@ºlQ 4{G©_‚¤ìƒÖ`¨BØÜ@)@AžY†Ï? 3B-iTèø†ÜxÎlÑ9“¼âˆÀ™‰:Ž~èù7,¸tŽ à bI¥´7Nl“Õ›^cTöbj’–À0Ä"»1ÂñQõÿ‚Ùa•¾âÇžÈ$§L} í9¡/6¹ @¿9N>L¬ðH•2š(Eb sÀ¶ ’;¥R%3Ûp…,­®Ùïŵ"û€ ˆ7{ŸUhŒŠrÊ»»Ÿ8:Œ©€0 ÃTXgêÜ&MÇ¡’tBú‰IKãÛ–@ ¸’h àþ—¸ñä× ŽáØieâ,°Û†{X„〱¸fA+&ßCèr2?pÅÁKÄ[fê+!¥bz˜~€÷„âàv+\ßî–ˆ¥=¥Yi„6$t—Âüi«ˆ] €…+éC ˜\¤’pFœaƒ&Ч†õ¹¢6b—ü’c$.ÿ S^èß\F$Rh"SêØZ(„ŠtÄI2¼¬ê1°`Lrq[ƒ¢J4‡ŠL*LUº]†¶ 1ÚÏÐW\JóGWˆ{‚kŠâ^"º¹d4X‰ Æ^R±U© ž™ÔeÌ“^ Q _©ÑÌ»8¢¤dÊ»šSc+‚qãc]Ç@ÀY¨"šÈKhzV¢~8êKäÀÐYHgxÒ‘ë<Œ!Š2˜ Ž^ðc*2N¸2Ͼ“úLÀÓp¶Ë80’¨Š]â¢-k2'•%$$°½ÄÉe檶¨6( ˆhôRgàiÌ|p†Ñïk‰–Ö‡sù¬îíJWÂ¥èôc49Y$UÆA‰Úà0œ9,­Ñ*E`3æó!f—x.÷ù’æàgbTNϬh9“õöWü_V3J<ó(³Õ²-YòD•ÏѤ¬TrY{¢ kŠs÷墥"›>k[ÑbfιDl…6ËØÚg Ø ñÙ“ÿ•# „l6,oÙ‡DsѯÐUŽ¬¿?›œƒ¿ä1†ï«ýAÌZ©MwÊW!œ`’ÇD±¹ÞJ·–´"ó<þL‡Ýó8Yÿx²û¸Oy‡›I¥@ˆ“ÊOñ‹o$ÃÚ‹~ƒ«©©•‹¶§#@v À^(¿tƒz’ƒzس'š˜8¢ŸÌb9†â’¼æƒ ‘j/³«±™(:µ²…60¯žÊÁø›¬k6Hb¢ÐÀ<ÌP/™h£âH̸Œ”(Ýi1´ÉŒâ‘Ý0‚ü˹ºË·…A. z9xx,Xp ¬c¢ÿߘFQ‚„«\™À= à"»±Ê² ÂD5KD˜(œÄé˜Èó¬~“«é¯çÀÄ“@o£A𛄛B3þ€ÃËš™i+5[:ãù¬2Œ7LÜ›ñº©‘¶«‘˜r¤Ùë¦ñöÉkwàŒu‘…߃9kx”Ÿã­*Y»³Ê¤³¥ â±–ã ~†…C‹Nœù¹ÀÇ9ÓA¦}«Gú« k( šÀÉ[49ÊŠ <ÝIŽË€NœŒb¤Ê"Þ02¯ ªºYó¬³a—[3ä¾óŒËJ1x2Ç€#•`™Ð¡:>cœØ-ÿ{Œ«ë ñ*4E Ä"i—tœYj6ç¦Eɤ¡‘Œvè)É°ºwr+Y»(bšŒrŠÂoË8àQ Kº±H› !è•«MLŸ¬ÌA/`¢ z¬¦*›Àä µd:3ðƒ¯d¤…ä «$²D4ƒ;Mb¦Œ§2<‡VzœÌ!ŽUƒ—eÜBÞºjÌ Tƒ”]¬±++¹áè [å’M&L0Ȳ ”h; ȲîüEÑÆqkŸ*“ ö ¡â9”@ ÿqã4Òc8d;,dù/ø¹“ü–r‡|¯(4ÈʨŸ©Â9T4‘#/Û‚¾ƒ*“@Y9§3*%É‹ÅÒæ ›f\˜ˆ:Ç¥Fo"ž2)F{¿}tw°Ç¶PÛ³'€·K@´´X‰=¢Ž«30‚ Kø8¹ ’2r ""›Ÿ‘ÌRÛpÉÐºÑ ùLG ²' É‚“Ll ¸‘Nê á{B{Qùˆ¬Úr, ºG)F§»Ï ¢ÆáK.3kEÌ€';ÜÓ µŒÂã;Ž/¥¨ŒÎ'd)Ä€—$7È @xÂE²H#Ù¡É!*—˜‚ßâ5¥”ú¬8í¸Æ¸ÿ/ñŠ‰P`B[S#a³ zÛJ­B°(XR9’±’ÙŠP3\U\ê8²²¸µ5©=+TO €¯ —¶ Õ!BRÚ¨€9 *ã 3Á¤ò®Û4¢³˜¡:®3]ÔV8°§r±ø™ÁûË:PµÀ/,Ô¶Ó€ßP tÑ.TÐåP2뻶î$šaü![’ðã!AÁ¬õKñp›b'sµ¸ÃÉ 6HŠ«Ú¼¨u²†wƒ,-Á )ÃÍYó)%Z> /ÆÜCÛ6Æm´”ÌÖ왑¶P•ÒOPølXš]Ÿ=„<û©3Í{ ¡¤Òo»AûȤ½Ø€s䬦„›eš§ËJù*9 ¬(æÃ)WЊ9tRvU9¥JGoKC†i¾¤ò–£‚¦,@ÝyRÂJXOšxm‰ó1ã¬K:‰Qœ¥¥¢¬:P‰U4+ ²\c–ú­#þ+E ˤï Úañ­øû>>999777222111000"""  !ù ,k@ÿ@…pH,ȤrÉl:¦ àó4º* Du[ŒN™^*WVT¤T×ý!h\Š«”uMNŠ’µ2pD+XZfR*qg.W.R'WxrB^ *ŠRz c§¨©ªIeC“jR ˜pq‡IW¦‡YBg BRrµ­q¯Œšµ !Ð,ÃR «ÚHˆÛÞßàᨠ_§'gâGäæJgxce.gXƒ ÷å r$$˜©H‹r½\$0ˆà‚3dS ÂD{h´pF ¦8Vp@ÐÔ‹ D4€¤ŒŽ!Qû«YD¾Ù•P0ÿ)C¢xäóÙ gV|J&ãÏ &¢FÍÀ JFÔθð2)н ( ʼnÔmÏuÝ[sÆí÷àÒ$‹Ó°(gxÅ‘s˜uª>L¸°áÈ«H@€@TbT‹VÆÅE>„)#‰ïï–2'ø¨¯‚XFÀ¡5;Œ1 I@]ÆUc‡þøàôI¬ùò€jÏŽÀcÛ€ лåUEر(Á»‡K7.ÂóÚ/BÐR;Ù˜°hbw(€€8l} Zû ØÖEF*Hp\µGL>P]ZºT WN?ÔÈ¡h |ĉKYÊ BÚÈfg s¢"{E‚Eí$aUbá¤PÇ}+žAÁ :¥À5QF ¤%8 i ¡$Œ¶G”£–|ØÌ3 R{ `ðâG÷tŤ€€¤0!Ø!§ŠœF‹FœÁ^Ò¼…'ºÌéçŸ=QV¡ˆ&ºM;./bb/bb19c/www/psy/bbnav3.gif0100644002342100007640000000101207616533077013543 0ustar bbbbGIF89a'Õ6ÿÿÿùùùïïïíííåååáááßßßÙÙÙÖÖÖÏÏÏÌÌÌÉÉÉ¿¿¿½½½¸¸¸´´´±±±¯¯¯©©©¤¤¤ŸŸŸ˜˜˜ŒŒŒ„„„€€€|||xxxpppkkkhhhccc```WWWTTTPPPOOOHHHCCC@@@???888000...&&& !ù6,'@ÿ@›pH,QH”ÌÈlYšÓ£ÑHVÌ‚`é$6 ͪ€bÒ*‘n7 F©ÆÔê•Eã!ºª.D n!xD, aUdM†B/XDbD%\‘—U",,'nžŸB)0D-Uišo¬j`­C4¸j,ŠL˜eȆ, ÈŒÊE»x”CÉB(#¿äåM2snëæC2"M, ”–ä›D* è#r"@¥_á¦IÓ`Ø ŽÒA¡‘M²2„† Šu™Œ|iflыܘ©¡QÀá%ia|áy„ÒF7#l4 '#7‰x ÷«Ä@n0…Ìø !þ¢Þ˜0B‚A>ðŒœ‚AT½OA;./bb/bb19c/www/psy/bbnav2.gif0100644002342100007640000000071207616533077013550 0ustar bbbbGIF89a'Õ.ÿÿÿùùùïïïíííáááßßßÖÖÖÏÏÏÉÉÉÁÁÁ¿¿¿½½½¸¸¸±±±¯¯¯¤¤¤ŸŸŸ˜˜˜”””ŒŒŒ€€€qqqppplllkkkgggddd```WWWTTTPPPHHHCCC@@@<<<;;;000... !ù.,'@ç@—pH,Èä©Âlª’DV0 æhd²••WÙ,›+¥ññÓ8»+ÀAì©ïx¤‡I0I+fvy# ‘(yDnI œtcLweŸ•§je P-|”^BL‘º„g¨ÀÀ*+Å ¬À& oL‘ÊjÏ'ÙšLœs©g^RL cÛL]c"Màw!Ô©³Á÷ø•¹j+ è®Bì Pg°@ª( ˆUá‹ $psá(†ÏDåcR‹1A;./bb/bb19c/www/psy/bbnav1.gif0100644002342100007640000000102707616533077013547 0ustar bbbbGIF89a'Õ8ÿÿÿùùùïïïíííßßßÖÖÖÑÑÑÏÏÏÌÌÌÉÉÉÁÁÁ¿¿¿½½½±±±¯¯¯­­­¬¬¬¨¨¨¤¤¤ŸŸŸ˜˜˜”””ŒŒŒ‡‡‡€€€xxxtttpppkkkiiihhh```WWWPPPOOOHHHCCC@@@???<<<888000...###  !ù8,'@ÿ@œpH,à Iœ,0š¨TªŽJDi8ˆ˜ÃÏ´Ášq¤€ÊhÊö€ßENqG./!ëþ`$3€!8$p(%lR‹F2 ypk œ1u H3d¡8 PQR-­0B«¡HK`_8*B¯¸»S +¸3uQŸbQkSÛ'8'$¦äåæE ç8¾8",C",,Þ‘ &\*b¢üI£C 60( T6N.Niøpã˜À  ¢;Ò-ŠÕÞ<Ó°ÈÈ(À¼€ ¡“‚$ÜéÔ€‹†GMÑ…c,4ò¢eœrF‡) bqª4îM7 O¢u¢°`Ù/©¸Øõ-‹†!Q>‰¡Á שÅ;./bb/bb19c/www/psy/bblogo.gif0100644002342100007640000002316407616533077013650 0ustar bbbbGIF89aX‚333fff™™™ÌÌÌÿÿÿ!ÿ NETSCAPE2.0!ù,XûXºÜþ0ÊI#¨8ë=Á-A„£HžfZŠkè–/ ¿´k÷‹žBxÀ pH 9ÈJ¨WøŸP“™¬>FÌt+ÔÁ 1¬šåg:|Ò·ÛÐ Æ3C 3Xk@L|b Fc|bv‰M"j ~ fz:‡ b_’ox}_g|›__“– >A!¡ŸeŽngwFX~|pÄ®¯ N²@a¶bÏy@f:pˆÒ½Ø»È>v™Ú#ÏϼNºÌ®|¦Š‰ªÞ®ÁàÉLéÎüÒmçR”åÉ&ÍO$zÇ^Åj„ß9k³–éÉŽ0SÚŒûáÂY®so‚43÷#³E}L»Ž‡ N¼nAlHrÒDIåÚUbá2¡%Ž8†™b†¦CW©hQ¢Ç;Ej‰ù˜'Ô>s‡0‚»ÔöÔ·iPuÚ±eJâ¹#,7 DYVƒËeÅbF;DÕ-\m¿&5+#í;`Åô!¦ÈZ›fÔ‘jÔgå²CyaeÊ’‹íš˜Øê¨tƬéPÆðòÖ´šÝ6jMoŒ“ÐR:~Ðb°o•õ Tåêl^1Oe+ñŽe°ƒ¿iœ‡0¤Åeïê¾.e¹V^!»VïF] ï”㑳ˆÞD\ëë±ãÛrÙ㞸ƒ¬f…OGŒz{ÿÆí¢ËH#ñMc”‚Ö vÃY+†Á_=uz’dáM4Y¥XC%å2Je’Ø1s0§r™¤((íéÃ…HBXw>I8ãŽGàˆÄ]<)äDiä‘Hî˜!ù ,XûH£ÔÛÌÁHÙºëlûþžLÑcJ%úl[¹pÌã0€ëùî÷@ž€°ȤrÉ\ÒštJ­R‹Ó3YqO§TÉöTXÏhÁ-«@¼­%ÿrê'™†›t8x|?Rkn6Co^wv$ae•|P;pCjxC‡F #‡£j• £4\a‘\y5QRjœ¸9œµY €¡¨¿—‹)rtP´P8ºŸ¸4˜V­ÉÁêå> iõIXëg=\7Œ²T÷í®V¥àèAoPZ•¹ÑƒãOðŽ€ê¸fü;")䃖¡ì$Ìq)nS1²4´âÛÿJ‡r»úÂHaòRqlʼágÕ¾t;Ú:£îv\^pùÊƪÏqUs_u‘ÏKgRúÝZÄVZ±HÔÛÖx¢h­ò£‘Á¿¿‰ú(à€XÏ ˜à‚ 2ØQƒL%ø „’ `Va†vè!„Bl(á3æ¨ ‚ÀTÓÝŠx †Þu/&£ƒ#>ˆá‰!rÈà3®Ø‰@¾Fcˆa5ˆ¤’WIb’PFÉâ«(I^w)ªxá“AæÌ”¢d)_–9f™Tú8Þ/XšI"0@f'$‹OºÉ&š.z‰¦|æW¥;¦IC!ù ,Xû8²Ü.ÊEH©ºvá¹ï`0AižhªšOë¾p,`ßx®ß&.U¿È”)b6 o–,Jg *:ݶÀDQ:5_aå8±Õn¤éâ´v>£QôlWó’Dqx ™âO+,YLj=u\fY bDH4”Tl;o)Œo€#Uu”`d||3J†PS~;)kx=jT\=#¨¨¥zŸ,*hŸ ÂµZo»²Y \,EÒ`Ì K˜U¬ØLŸÑÈiSŽ—ÙpP@f”(ØTð®Â”X›M†Ÿ²¯‡÷#ùªs\å#‡ï˜r’U»©Ü­wÏ Åu[’ŠzÈ­žEïSÏåéñúMIø]ø9ƒI`©;ÝB)¹öD‰±[J5$bëO¡‹3ûjlrf£GŽº>fÌÆO¤IŒ˜Âá3¹êäHP6\ÊÑJ‘§BάxÑJwr áŘ ¯ª\³ÇÈ3Ÿ’¬˜ gN“ÄB’5´‘ˆ¾‘¶@ ¦o¹¥óåìoéh•-ôÐ"·#¤¶šÅ­°xLR5Øš¢™´$ï]Hž…|3ìV]—<6¡ÅC'osáÌ-1;3L÷WËcajé)-¼Ê)Y§ôÌ t°X³gûY»++ßcÞ¬¹2ñ§zW®Œ9´nNõ.ò Í`=ÃaËóµ…T^Óm3Ì7ÐVé@7 ìgcУ_ë ƦÎ*Vè•&6]Ùò¼îÌÿºt‡½5…D€&ˆQí]”‚F’„Vø_!ù ,XûXºÜþ0ÊI#¨8ë=Á-Žb9†fJ®*Ѳ°Ç¢§\®ïKhƒ¼ A0jjœ3–LÂO¹Ñ Ê†@(à$~aÁÍ:ô^¹ßžxÈb§Â³½“¥6xx.dT…I|OŒrdj vO]˜d!v‘…t’@‡•v§ve8MšNa|€{8”BMBˆz€›_«6— ”D¨H´¶ ¢Š‹ «Äw7 ¹CzªÙ7³‰“•È£áWÙ«•aV6¹ÇwíY?ß¿qÝÏÁâ×Ö‡JÁ€ý#†Xo„tc¦c”%äòéàóp‰3C3ûjÜh( /ŽcÉÈßÈ“ §¡ †²Ê_ÊÄØ®–6™¨>Î\†#–+5Ä „4c< ƒ£,leN-†‰NV>–A³‹ß¾JÁD… 1:¹q-¡MMÄ-КëF5×iÂûíÊ4·ÓŠäü 0v\]V²ÙíãEC„1vî‹d›MþÞœfÓ  Î %G+lhk®@|/s¹Ìr2mšë‚ëÌ6[—¢gsN$ûó”loÅpmfÏAØà(ãMM0ÊÚT»ÚÍó·¡Ô´ ¶âtà3¨¬5­üùvô=r©›¾”‘ B7âTkèq®^/†g9MŸþA@û­SZo;h Lb°ñM=èàƒ>10Ti³@há…°è„ᆢ”!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ¢j»ªc,†%Ax Áí|¯ƒ·Ï Ç!†DWø%1@à™ 1š ˜!àæ6 HÍA€›Ó»…-Rr3™éçÍAzz6‚‚fXV‹‚jMA\ x?ZS’!œ–†CsKvˆšqxšxg:QŸ„‰— :f­UA9E‰RMy¡b‡®·¯G°© Š˜ÇtWE ³ ‰ŸŠxŸÞ †ѽº§Ìz×­kZ8uÎyð]|¼ÓâÁ³¯ êpËóã2‚Öd  CŽ9` ¨(“(ñY‰}(ûRÑèÇ CJY#²ä“%ù@ÉRd6fÿX6l ÒbGš4=ásEóÈ0œ} ÞÌÄÐV™I6fqQsô•-o‚¡+S¬-]êH¥SJ­Ã9‰f£Ø¶f²J˜£Ö±‚3Eñ…öMšº»•7Ú–—n_šÊX'[Þ1ƒÝ¶Ú ñ'Gƒ?1aÈ3¯äxó|¹SK1¿˜‰Ib÷áçW¼f¡•vûöòLÍ…¥aî-Š[Éœ9+Š}3G¤˜Ô1…DJÀxê$ Í¿)Øð¿m Ç‡ú^^X«¸kW‚ÓÀ` ¸›;0 ì«% ƒØ(”£©Qô3WÂYù^«¨PSÅ׎îØÅP&Hn|†Ô F(áGŸÔç?f¨áH?mèá‡-%!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ®j‹º*ë)gßøB3˜oƒÁ­–!†zÄf(‹ÌOR3¢ "($X¡@\®´ª7P³ ¼Ï[#ðˆQ…'h÷Ä=ww }…S"H€N;{qW uFVz!™q!<—sGr€hu¬«vX„N•MgbX=~´¤‰yebve}]u€¯³wU`¦œ5·p‹DÇ Â³F~u³Ü ’ºb¼Š§­Ã¯=NU3Q­5MB¸á‡Ä—¥”¿ŽÝ[E›ºjȼ¤Úqæ›Ux¨ý#wÃÛ“‹æhû\Üsñ¢3b€BŠI²ä™’(EžL™Ü–0Y^»·.¦.6Cf™³ç=HúpÂ#Ìç$$*[±a‚'أǮ@ ³ÇÊC/ÇBE]÷Å Í+æêy©RôÐD‘s"Ós5e—h-8äĬ£N Ú8q¥‡ÐœWíü£®Œª†•.ÅÑ;³“™B¢Dv§ØêdÇÕøWö#a¼L9]kSxí]ÒÛÍÔW…'iÒ³>X£%ølHÅMDWÂŒ×ôMÀ¬ÝÝÄ­‹ æØ«Wûñõ™F:"³$ƒxÓ¤ ô ºýl—ÛZê~Šô6±Ø€jq„õ®2̶løçu2=qK”uIè¶"6‹9õaÕ¢CÕ½KXDщBžxPk´-WžQf˜jðt”*i8RY"¢4‹fwÔ6C‰,¶X ‰.Æ(cL !ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ¢j»nLz ÁÝx¾ˆ4¨sœ-¨ õl¿ÌHfxäfBWÅ`[ P€™‰^l`æ? sîyÞ`ÁÃ/Ðé]||cR0GAŒK~…KU‘z~_M|^z{4¡>—oZƒD–VA–d6KM~s„£˜6cDO“5„LLq‚–´t››P …µqE¹†‡ ° „´H“Ÿ´Ì ˆÓ¼Ñ>‹ ’=˘]M“¡–6‹åùQ4´&œê"GßpZøàÒÖç%`¸­YÖFC9TNÆû9Ù¨[Ž;7 %¨¤É“()¥\)hK”A¼œ™’›«/4§ÁÊ)¨#ÏŸÇpáyÅåÏ‘%+áš%†./tŠbÑ7«F«0"`UrU‰×—¥ƒ`X©W(W½1qFVkž&„ 1ªâgŒ\$™0ÅIû¥V;€®" ¦²Ó§  {ˆDôƒXg³L¨É<6™bN{!^[Ì&¤‚“çgh`¶º–}cÚóÌ:5Óú°­–'³%Ï^- $êØ6{¯Ö):öÐÙž=¿ó÷Ϧ´L}moáiâÂd­Io¶Tý¹4ؤ…%>v-w ÝeU \rV"!56®zv¯.Mc’uÅcM(ˆL ‘Œw|àD2-4XZ2üm¢œ¿Ô…®4xÄ Æ´”!9õR'k‘XÖ?¶è¢I`˜øâŒ4•!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ®j‹–®¹z ÁÝx¾ êœÎ&ÀØ@½Ïˆ̌ȷÜ@‹BaR¡¶KQ!låsA0Ý„|Z3x|žÁýYOz.utO uUSJEwPˆ{ON ˆ“”ˆN<„‘[oq†cN˜EN—Dƒ“|‚lx6u«Š{5§ ¼~ Ÿ\G½±[Pu²¥aJ4¨IÂG³ ‡P?Ós^¶5Ù[¼·cRÁ᎚¼íkègW¤I¢èBÆ›TÖ“°Qá0Ë™M ±!Gƒ@Á<èxƒ¸&À/ £Tû »vÒ6ÅüàHŒÞ£av”¼&a‘6&y¢ÈDò¯Í›8sÒɳСž:3J4§·X°Š¦³¤”Y;?M•Þé³ÆšÕœ£æ9Õ¦) ü±ÇS§³LµápΈYž^™ö‰¥°˜˜öSµ%±Ï òúBÃã¥Iu¦Û²ŒËÈLÑï;É“Óš„ô#qR‘$DÀQ•t MÌvžÎ|¢¨ïΘtç~*û—˜F&thÀmþüaÓmªÝêõTœ­ãz£$êœ^ÞÆ?°>½ÖÑZÒ}kfVµ–ñ£Ù/Wx«XºOàÉ.'Âø®b®E/¶R ÁNkRÕ° ÝüD2Z gÝ-Z¨N›Á>ã|ä€lB1’´á454‹_%c‡ªdâ|Ô”øŒ]dXv‡K jåâ‹=Y4ÀB]é×â8úc JÉF”abå¸:0i¤Mtøxä’Lº˜!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ¢j»®KžBpx®/a î@Ç B„4"ß0XLLï³dÒU«';I~ç`ôyO €õ¸ ìõ³pu·›©m"¶ƒ¯lOub`b7lpvdtj‚[i`]’ ”ŠNžj7NP‹kzxl˜RW{b q€rdWC¥4‰¹¥6g¹Àn\0Jº>š——[¿¡¦6°«X‹®ªÙ³§ÖÙ vEnŠÑWSCWbœ•É}î’C£ }t}Åk´Å:à6afsü1Bd¡q>Bùqtâ7]ªûÃq&J/ÉI²¤É“(OnKÉr$-2ŸZ^ë#s‹Æš81²yù2'J‰ ø”d Â'£ŠÄ1b´€57Š” QîÉP2›ìÁÜäÅj‘¡‚ùd5æMhÏ¢RsË¿@ׂ 0<6ÂeYphB H½OXJ‚jY‹5†B†‚B~†ˆU”]^”q‹[ƒ™X_”¡¢N¥”c[…;V‹ –®cªFj•Š”i• N™T‡[4X¸•ºI[F¥ƒNÆ–Çýq‰µ³·ÜN Äݽ‹Š¬Æ£ÈßóŠkÍ£ž<Ü‘#J°n–,™D²wÍ:>œzúÀMa¸‚êû‘ T&¡zìò¶OB;}|q£’娔/­ˆøÂऎ”'Å5ÐG)‘ÏŸ@ƒ Jth‹*]Ê´i röœ:F£Ô¡<¯:íc¨j$­Ar ô*I¥HÔÎJ{61k»ŒVíÌW³lî¾%k÷)Éde€¥¦\(‚“Ԕ˘âòì<ª)J%=ZòÖŒQð­ð(9œ'1åÇ«ãE‰‹Q°:žѪ1! Wð·(ÑúRM3˜éÜgºl\ƒMTÒlŠWùû—íѹE Œæèot‚ bçÌèIO„9Õd=4pÔsåÑÉÌKœèú戊‰³è#YÙcS_+A½‹ç¯5b^5¾Íe è1Üm\T£Pu¨•‚QÑEJ¸YUÙW29fÚ5Îq§Ü~à”×Ñxm bÖUlµ¢‹/¦Ø '`Õhã8æ¨c!ùÈ,XûXºÜþ0ÊI#¨8ë=Á-A„£HžfZ®(«¶ð+»«é)„§ï|ïÿÀ p¸ Ý 9¢rÉlòDÇsJ­êFÇd0 °ú ê 4~´@nÁÛ ªdú‘þ‚A|íäu‚†‚~…`o}z€~…ƒzch=Xgw` o ‚–†]8Ÿ`Rj ‚ž } —j‚j‹ÇÊ\`¹ÇÙ£Î]G‰º~rÊsvµ=ؤk¡Çjqqº‚õíä|ÙnéÒ³nT™iëxX›÷¡Ñ/O9¬«Ç˘€… Ëá¹iÇ.á„v0!à©#.]Š£Î_˜TÍàÛsqX˜ÞáÔ±„Ƹ`£ineŽ_ÆàéfSYEBT후°N´uÈ«`Ã^Ñ9U¬=]§ÐÚivŠ‚FVè°dsHÑŽ<̬ZET‡M&xlL½ÇJ^1—pÅH;,¦”d ªõP²ß¯W)Ê,p›ÄpÞü’el™çPÊÜøLÚËÚ²M4KªnÁìb|/G!HÌ[öÀyrH 1•¿lÝZ6èJ˾•ç*ÎÒ6ÞÞêÒn`ßν»w !ù ,XûH£ÔÜËÅ¥£ß™ù¶à²ß•™¢j˾kì:9 ä»Îÿ¾`o$ ‹È£Ò8jgmJ­Z¯Ø¬vËÞ ß®xL.Wà7 0oR·  C´]cš‹ïø|<57q:~}‚|‰qWh6jW†‚ ‚sjl$ ‚pƒ¤"ts&ZvX¥lj‡˜9¯ ¶O =¯´£¦ž=£–89a°R ”UŸ5Í›˜:pl#¡œmpÍPÔ"Ö5âu”Ê•»ƒÚÔµ"³"`œ_´{êN×۪ǑÉtVœì!vCÒª'«Aë¯p¥ÞÅ+—F #+ÜûdÙqqPG@]$EÑH²¤;üLªô‚C¥È”$ é ’çbÆŒ±¹4÷Ïä A–*ì°WŠá+“/—!eWÐ;YN‡Žøuã£WJ.Üõo—µÔ…ù…4Lé¾ê”¥é±£8K¢Tª•8b_¥D Í$¹þè®Äw0;†+nı±ãÇDž,™reÇ>8f¾Yx°eÈGxlμùrfg3 ò”õjF©š ”ÐjÖ¦5ë&}ÙÎÚÎrb¡ [µpξGcÖͼ¹ïÖœ;Æ…þÚuãÒ±kn^º4j›®sR·­=¸pñ±­Û\ïÛüñÆÏe¿†žxz÷àãßÆÏ~?î@éÝ—ØvˆÛc5$!ù ,Xû8²Ü­.>É ½Òâ `(Ždižhª† @n,Ïtmßx®ËBç)º@kGüùŠ2¡7„Õ@—²×JAÒ%•ãâB©ÕïË`úÊ5¯``ìöÊpÝ)sÕ˪pð­mMIkYZ=]| . aZ|{1ŽJrK@7Ck˜4šQS\™Ž¥‡?Rs‡£‡ž{~f‚H¶·¸i˜h¹½9¤¾¨N¾]}c™V™¬XtÄŠˆŸÄÎvlˆdmÀ½Ò¾¦J/Ÿ¦£YÏgµÜÖ¡×ÈŠÖ ÖŠGܘ‘èúû1X?  H° À5"È¡Cƒ#ôÄFÆ‹3ûjÜ ?Z )> ¤É’(Mâ[—¤Ÿ=—/Y) eÊ›'sZè˜ËŽÂ)BõB%‘Dè\Š“ÏJi–„Hõ¦´v¨XiÝÕ”iN®y¦BQÚWUÀåÙÕÉkהݬ*}ye¬²u—=º­é[•`çN%z„‹JXêïk·žž&#©O20`°ÈK(òÍ€~ijx‚žzßL–c×îŸvýDûÉÔ¦”BU[Ç¢UY°ážzp³«¦'¢Õç»,Z§M=·ÎSM„¸|N¯ÛíB^¾çßéy}zq{…w„ƒŠŒ‹Žu‚‹~ƒ‰‚‰•…„žŸ ¡¢£Ÿž¦¦¨ ¨««§°¢ª©´¡œžnZ:–‘˜—w©œz¹¦ ˜ͽš™¾Œ|Å$Ϧ1 ÏÚ˦|ÚÔÀ†ê”ɈÆÄzèÑøôˆùz$]F‰ ´L¸%„ð Z+ÏNqcS˜~èûp1‰]0J°Å‰b8“âL–Gò_¹< B 3Î<_AþG›*”ŠbÒ“=—úd¦»Isߣ9QûTl(J‡&¹ÄĪ©;q›,Ì·)uÍ-¤ãÖÂE*](ÖEãÀÙjq¤=Éúl á㊟8ó¸? ç²çoAø¸»Û,OëÍ«_Ͼ½{epüJMÓøóßãú£¡ï!ÝÆ•GgöÞNÔܲH`1‚  :ß]ö'H‚‡0(ƒ}aMBÀcÛ°Ll‚´0 7‘$Ú‡ã, â[ˆ# *¾q§â) |pM(C.ã|@À‹>Åxš¿9% 0ÈZñä(ÐvðÄôR“OÂ@Ž%ðà܃l'A9’| ‚s–T@7%\0ÒØ7Ž—ÀUøši¹æ’9Ò†§l8ÕV¡w§IB‚ˆ¦XlŠöÑ^”ÇœT…×OB*)]¹%•pÚ§…’Â3€…°°i"e†âÀ8(øŽÖ]Êé®Â*ë’YZ07ºŒ¡7|C*‰Ú @( ø¨¯í ç)Ô²7„ ,à£.Tëí·à†;H ;./bb/bb19c/www/psy/bb-na.gif0100644002342100007640000000152207616533077013355 0ustar bbbbGIF89aX‚333fff™™™ÌÌÌÿÿÿ!ù,XûXºÜþ0ÊI#¨8ë=Á-A„£HžfZŠkè–/ ¿´k÷‹žBxÀ pH 9ÈJ¨WøŸP“™¬>FÌt+ÔÁ 1¬šåg:|Ò·ÛÐ Æ3C 3Xk@L|b Fc|bv‰M"j ~ fz:‡ b_’ox}_g|›__“– >A!¡ŸeŽngwFX~|pÄ®¯ N²@a¶bÏy@f:pˆÒ½Ø»È>v™Ú#ÏϼNºÌ®|¦Š‰ªÞ®ÁàÉLéÎüÒmçR”åÉ&ÍO$zÇ^Åj„ß9k³–éÉŽ0SÚŒûáÂY®so‚43÷#³E}L»Ž‡ N¼nAlHrÒDIåÚUbá2¡%Ž8†™b†¦CW©hQ¢Ç;Ej‰ù˜'Ô>s‡0‚»ÔöÔ·iPuÚ±eJâ¹#,7 DYVƒËeÅbF;DÕ-\m¿&5+#í;`Åô!¦ÈZ›fÔ‘jÔgå²CyaeÊ’‹íš˜Øê¨tƬéPÆðòÖ´šÝ6jMoŒ“ÐR:~Ðb°o•õ Tåêl^1Oe+ñŽe°ƒ¿iœ‡0¤Åeïê¾.e¹V^!»VïF] ï”㑳ˆÞD\ëë±ãÛrÙ㞸ƒ¬f…OGŒz{ÿÆí¢ËH#ñMc”‚Ö vÃY+†Á_=uz’dáM4Y¥XC%å2Je’Ø1s0§r™¤((íéÃ…HBXw>I8ãŽGàˆÄ]<)äDiä‘Hî˜!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/psy/bb-diag.gif0100644002342100007640000003730007616533077013666 0ustar bbbbGIF89aNd÷€€€€€€€€€ÀÀÀÀÜÀ¤ÈðwŸ3f™Ì3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿ3ÿfÿ™ÿÌ3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3ÌffÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿ3ÿfÿ™ÿÌÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌðwß1kk!„!1!!!)J)!)!k))c1)1!ÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ,Ndþÿ H° Áƒ*\È°¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ JT$€£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶ìU•G‹ª]˶­Û·h˜L ·®Ý»xóÚ•;’¯Þ¿€ ÌÒ/HăÄǸ±c|KVL¹òCÄ1[ÞLñ±@ÏAƒæLš³æ§K«V8ztÆÖŽWË&œcíÙ¸ÿÁn:ögß¹ƒß½]‘¸ðÒ»ÿVNÐ5Âä—O6èZ²uæºyg·.ÝùqáÆ'þ†ÿnºôÚ³žü|såÀÝË÷½öúäq¸?bóÛEv }Ø¥—ž|º‡_ƒú7[—I˜›hìÝG n a¸`†Ìƒ"2ˆàˆZhÚa*Îv݆±¥˜Ð‹#ž8Ÿ‚映†:¸`‹¥Qè@â`Œ?2dà‹ïíHà€4v‡#wE®F$CWV Wuöažþ êõ)A³ÆÊ“¨lâéjwe¢zi“´j«5ªº«­yÕ*²Èâtä””R'â¥Ô›ä°¹º:f³€1Ë,·5Ñ觰HšÊ¤±0>ˆí—×½ +¸ny ï¼ôÖ«‘¼öæ«ï¾ áËï¿×ëoÀ êÀ'¬p‹/ìðÃÁ5 ñÄo&qÅgÜ-‹wìq²,òÈk]LòÉ(ãdrÊ,·ìÒÊ.Ç,3I0Ÿ4˜¯µG'~8+: ÂÑgeÈ0]KÒ€[þH(¨Hû—ªj5›dt¤ç±[ìgdªf—Ž6Š©¯ä® +®èîI죽þIu˜*-×W ›uvҦ롯V—zuþ±T®«£©öµZµ”xw]wLQ—d´Öè½xãÏMÚ¶ãXÓÝ(ãObN.ãtO>ãÜ\Bιç˜Zn¦èZãù¸èÐvÈ7ß”Ûö}Ò²>jç¸ãŽf°ss~ùŽ”“;à¶7—ºš¦¯~:°ˆíÒâ·Wî;Š¬Iþz/¯ûôÊ/7u ƒ¾;‡ ½öºk_~ù’£þ\æìsyÖ×?~þê¹›?<ïX‡ˆ¿êä£ÞzâG@Þot}šIâŽÖ#m–ëõ6ç9~­réê^à¾>Úѯ~Ñ!<ÌQ¯€ aQ@ìÑ/xòƒ¡ÿôW½î }Ù{àm(Béå/‡þ{Zó>ò-ˆ,nv,|}èï4°ÌàñX%A2MiœÜøþ'Åìm1‹³[âü2§E~Omü‹!±ˆ@ãý‡½¢•„Åè†Ê¡ìR²@‘@oƒ0lßüL4Ã@B‘|$üZŽ~èBÎN€Lä­:éÁgT_$yF*æGµ³ß…C8~ò’ê#  (I Š)•m,ŒóXòÇ R….L##-h¸VzÑq{ŒâÓ¤øÊ-rr”ÈSžñJ¹ÄŸÓŒŸcÞ1YÙBdš«‹ŒÝ2«˜Fq1”r;P0QÒÇ(…=Œ"7™;cRÒ˜Œ§Ãh¶vΑ¾þTcé”iËiæR‡øTc8»éNS+¨cøLH…šßœd5D“r.FA;oY?Þ¢úLæ.‹×M~F”•Z„§H;êÑA¦N¢¿zß$-ÉRúŒ6õ¦æ ùPAv¡ßTß<É9˖茦^[ØtJ8jí¯‚oKS×Σ­U‹DeÃã*õ”T7¦í}NÍ#á®9POêiPת#ªÐš¦¥¾­Š  ŸÂê5aŽs.E™^÷š™¼òõ¯€¥ˆEKØÂþc°†Mì^«ØƺŒ±ŽìÉ +ÙÊzŒ²–ÍlÅ0«ÙÎ:Œ³ž mÁ@+Ú”¼«´#¢Æ„ÆÀ´žÖuUmþÈk1Ò3ð 026Ì-U‡0ÒrKˆ#©ÏÒèXOâw£ë]R'ñª¦ó-²@©8KñöŽq»nu{ V:â„%\dǤk+±FU|±ìß\7‡¶6yOW¼jD꨷»K­ñ%Þ;÷›^ˆ‘7VìY&ðø$£çQuк ¹ÞyEÎVš¼sÔ~ ¼¾®’¾\+W5ö_ ×À^¬Vž@¬áOª—·ý›”L§]vZ±®wâ/Eá¦ß ˸®ëpyAI*çM˜ôÔ0E¹»bû8•ËÕågãƒ8ŽL¾oªzü`€é¸P€ªd†Ÿl[GšË.¦²­–IžåÊ(N3þ•Lå­}ÕÆ9ö«Á”Çù‘­3™#µ§çú3FçûÓ ºÒ8¦§q“ η˜Ñr&XžgȤHçÃ\í%|VHj ªÌUðM-i!³ú]™ÒÖ£êT ožµR{•R µO]kÖ5»ÜZ0éÃøuqÚbJd³F×(¨ ÷eRDq›ÛMå^VºÏÍîüЯ펷¾ÞMN³ØûÞøη¾÷Íï~ûûßx¾åMð‚üàO¸ÂÎð†;üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{üã ¹ÈþGNò’›üä(O¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@ºÐ‡Nô¢ýèHOºÒ—Îô¦;ýéPºÔ§Nu-åãêXχC°®¬„ëZÿ׿~õƒg½ìA;EÀ¾“±ËíaßzÜ¢vÀ=îu{Þ ~÷´Ï="}oûßϽ÷†ž {‡û@Ü.v½#\í‡÷ˆâ_ðÉëòc/ûáv¼;Þ»è?¿x°wÞíg?ýà†ùËã=õš}齎øÎ×þôŸÇ<îÿNûÞËÞ ´ýê5{vÐç^ë¢g|é’wäÛ¾ùÎw¼î•ïúè^ñ‘OXßþozãWßùÑ>寧úÜ“Ÿñ²ÿý÷ÅoþìKÖòÜŸ{÷ÙOwÏKßûË_þõ¿ýðoßîS~äç}ñç¸Ç|ö÷zØx Hzùg|ûGš€¨}È{HvÀ—»ç€xW{Âw€±W|ˆ~Ç—‚—÷uú‡z ~ ¨H‚ü§zÔçY7€‚"€­Ç€™‡‚/Xƒì—~ò7cuç{,8‚4ȃ8„Qø€Rèƒè¢ÕzHø|øƒWˆ|SH„Ö§‚÷g„é×€ H1œw(H…bXEØxM8ƒáGƒeØ‚gÈ‚–‡÷‡Lax8ˆ }&(ƒþzˆƒ¨ˆ¸ˆÉ—|³—öÆÁ7‚Ø‚£çz|T¸xd—Ÿh‰ø‰I8|p±n=ŠCá~t˜ƒÑhpˆ !‹$£Š;a‹@ÁŠ ¨‹üal«1ƒ Œ#ƒ‹9AŒ=Q‰ Œ÷â‹¿èŠÈ‹cŒ7!â_1ÔhsÙXQq¶,¶U7$PÓ‡uXZQŽÞŽX2Ž›Žô6$ra긎A¬¨Œ³¡ÈGîhŽUQŽò.øèŒ1aq€8‰±ºÈöhŠtg…~§†ð&è(ŽñŽðRx¨¹ˆ²e(’rxø‘-!ïØi1þyƒÇ(‘†2’$9&)w*È…¯W|º‡‰1ø“B …é‘—x{ªg~Z“îH!1É‘‚Á‰C”šè{»çˆ(|\‰…PX”Bè+X‡_ˆ@¡9©“ É’ë§~ˆ}Œx…Çç„Õ§…6x„?Y~(é’P¹‘éñ7€p9—@(˜«÷ˆa)ŠÈè–°'ƒy¸~­X—wÈh™–`Ñ/ –ÜGÿ–È”KYˆkˆ†‡9Š (ÿˆš2 i…¶—ˆ“—•ô÷„%(”oš$ȃ=ùšvHñ‚“–阙’c™•A(€ÅyÇy—{ˆêg„+ØœÁ—Y‘‘Ûxý†šþ8†Ûé•Ë9‡X(šci‰‰y~vh–AQ™ÁÙÃ)ˆ|ø™"øœÉžÌÙ™ÐÙ†ß)ò—Å!•Ñš+‰”³—„M™ŸâɄ繕çGšxh“D¡žë¹íŒfX›µ™ºYœeè…ʉ‰zøƒò™…pø¡±š‚åŸzÑ…@È¡tÈ•Ý)˜`ø¢I :0HzýÇ¢Lù› ˆB±Úu™Ui•û‡•)¸› x{)Š„Ù”û)çh¢yAˆDé¢^‡¤É‘H›†8È™ š‰dYŠC¤;Y()y™Yº.y¢T:/mºq/úoq¢Awªèù‘þžrššÀ‰¦ÞX§ÍB¨*a¨ùžA¨I˜Tù„ª‰‹³¯ú¯ Kœºy·9z˜ú·si£C9 › £cê¥yû«…k¸Q¸©¸b»võI¶Mê³’{—­ ¸÷y°Ó‰¨RA+抹ÜZ·â¹ºë‚PÛƒÆɺ"Ÿ_8‡»Ûº/þóº°ëq¬´««‘p8˜¨¶9š…Ÿ›ˆj½œº¹`K©Â «°ë½Èû™4Z¾Û +™2zžú¤Ò+±f¸µž’½éúµØ¶ò;¶DI¦^Y²7J˜&ø¡ lƒ¬Zì‹%hz¬ðk¸ ¼üŠÜžˆ¥lˤÎi¨®z¹”ùz½\KÀ±+»îÛÁv­®{ÁršÁÅ‹ñK¼-¼Ìkg:·Üû’>ì­Ü6|ÃRZr;À{šÄ¹±­&<3›¦LÃ7Û½G\—ꌼœ»Åë)Ÿ1ªKœW>šžYÜÅPÌÅ°:¬‹ê±cܾp¼wLÄü2ÄX¬¹ZlÇþFܯrÜı¬ܯ3Ü’¬ÇûÂÇ?ÚÆq|À~É ·9•OLƲšÇ¨åÈl<É”<»l¼ƒÜ±ÃkÈ;üÆ£ÌG‹ÜÉWüÈ ,È’|Ǥ¼0ä ³‹‘u<Ë«\o éÊ/ÜË*ɲœ¹µJŽ ·I È›ÜÊùÄ?úÊŸL˵l̲k0·ü¹šÉÌŒªÎLÐœžÒ|–Ä\Í¢|Ìí8ÇÃë½ÜÌËÍüË/A±š‰ˆFúœ¦÷– 9Î?‘Èn¬É×á•\á ^¼¹]ß~ß~ÑþÝcÂyáÿá'.à)®ÉÈ­½•ºâLál¼ .ã°á½7Ê|¡ãý<Èîã^ëÍŒCMäEî̇BÝ´q¹TmâAN·S«Sþáò[åݘÁ1IdnÊ ãÔìÝ;¾áCŽÒ_^Ñ¥¬½‘vŽŽwžçx¾Áþ1îä¾¾o.ÕqÎÖsná.­ç~‰èyä|¾æ ¾åbè6>èè,æé¬èŒŽé{ŽÈMN3.ß’~ÛiMèB½ÑVþØ‹žê©®è$Ú/óéý]ã¢Ër^ê|ê7¹êº¬é‰Þèe â€ÞåïÝç5ÔŒêu®ë™®ì›ÎäQ ìÈNŽR=ê•ìþõªzÎìwÞêž–NçÒnãÔ>œ—yéÌ®í»îëÁùí†.ì§}‹ûMȵìÙÎëÍÎÃÂ,À=îîhM뤞ï,CïªnïÇîì' åýî:aì…þXØ>ðè^ð¸.âÄ=àÓîïÕ^X¿í?ßi n²îÎÔÍð îþðèñ÷Þ¹ìê"?î;9ñþ±ñénïÜþñ+Ïï?ÍÿÞz%ó½Nóa|ðûî³®óßæ“õðòÖ9p™¡Ã7Oô-ñäíÃx®i®¨gžõfNñHoõâõÏÜÃîèÓïçø1þ•\>ömŸÎýnôU/ä¾õZ_æh®õ"_ä Ïòîò9î¯ø­é(_ððHŒfß÷8/îTÿòÕ©öJ?ó'O$ÄöO3Ïørÿò‚_÷çÞñ%ÉÓ}ùêùEïÓµžöƒÿùLß)aQŒ¦?õ›øt?ä„úŸ"'D ó¨÷¨¿óšë¶ìó{ô®íÅûßø9ü«þ½Y?¯ë…?ÇÖÞùB¬üç”îµÑ5voæxÏõ'º¿ðØ¿ÆIþ&Ýÿõý ¶í_ñ°òËÏþ¹þYÁ_T¤ïõÛÿ~Ÿý,ÿ$XÐàA„ .dØð‡%N¤XÑâÅ„ "܈‘cÆŽ5Ž$YÒäI”)OzÄ’åK˜1e¾tIp¥Áš3uçO AúHÔ£Q‘=…:D ´éR¨Q½Yð©T¬6³nåZéUŠM7‚ Jv¦Ù®iÕjåhrèZ¸ãÎU«Òî]¼x{æåÛ×-W´t ¥ú×ê`Àˆ/fÜøb`Ç‘½‚,ùVrÙË™5o^ ™óg¶þC ‡¶ê×ôiÔUƒfÝÚõÑ×±®Œ³mjܹó~”ÝÛ·oÏ¿Ó&i§näÉG“ÞܹäàÏi¼´rìÈyKçÞntïq©k´n3ûyÔ Á‡gß>¬{ÐãsúD_߯zø±ùíçoqÿKþþ{n=¯Ð“N¾òŠ²oÁ»ðËϵûã*B›#P"òvÊP8mAUóðAÖ*4QÂþpE~þAQ [,èD‚^ŒÑEq¬±By„ê†6œ ȹ:\í¸å +.#[£ÇSŒF)Ì‘Bƒ|”Å)Ÿ„òÄ,kÉÉlÍHæL2²Ú¶k’3+³¬2Æ9©þ¬Jñ SÔQý˜ßD6—¤sQ>y¤”Y^UÊüPâá(VÊâæ¼dHgøˆ=Ù&†þ&·#qƒî©e˜uIškZ.œ…ûwgJ£†I£Ÿ‹2úè¡…7¤¢‡n\¥#eÚfÆžÛêüðC¡|Š›í£ÂþÚëÀÞÚî¼µ~ùµèèƒwbV_¥›1·W2e®æ»ï‡üo×W–3µ¿,qÍ~<ïÏA_7t¬‘¶™Ñ^,óÎã¼uÅJ_xvÚ¿^{)ËS/|^´o‡ý¢×LöÚ‹G¸áøP?{÷G‘wVx¸‚‡^º[áêˆxƶéÂR#ÑÚ1.B­&u<]Dæ÷4;Žqy\$åÈG®q5c91ôĴݱ‘01ã&'BÉH*…~å ÉH˜9–ï”aѤ'=ÒIW2åfZÌ"gÙÅaY’Žæ £[K‹À˜@þ\%fvyHÕÅ®wïcf}§Ça*©;¦Ád"£ØºbD˜Ñ _6§²'îÒŠÄæ3¹É»i¦OpŒW2§óKºy³ Û<'©YÈÂ5 ™´&a'O‚гžîºgå¹´ë R™äì@"ЖɡI,ÖàÉÏ…^³¡æŒ¨½ãFV ²šõg9ÑŽ2k¢g±å:Ù‰E…¾“¡š[)JSºÃ‚—½4ý29SÅÕš7¥ÞJeB–}6Ó™f£)G‰Z¤œž)• Uª}T§>•˜F-U«j ¦bõ¤CÕꡢʞ¤~;W=œP˺U«¥U­Éak<³úV÷qµ«==þëøþyW¼ÚS¯[Af:Mª›¶%}ý(¬+À*V¢Å e…uXÄ$V²¬d¬a¿ˆÙÁhv³ê¬g›dYðu´•-­.D3Ô†/²«Rl æœ þUµ´ÅF èXÝ"–¬¼Õoóc[ —°³%îQÛ³¹F×ÏrksUªÜŒ»Ða®uiÒZš>7&Ó`u½Û’™!‘¼ï÷Ì{^ù™²½Ð[+ß[‘|ä7Ñï~u¢_„¸ nH~…`;Á¶"Å[ÀBm7~¡.E, ˜%°ùËá…\ØÃÿõ/ˆÂ`ÇWHë ¯te¦Áûâ÷#±þ†1’âgx¿8>1OP\ã—È>$‹ÅÚAÆØÂ9æï‡wÜß3Ã"Þ1“3”ÓŒâ@ÑfVs–Ñh=êUÂ(ÜíE¶\g,gúÇRþó µ>LJyómO8½XIÃ9—n:º¡xþsøR|“v—šš~u0·>LWPXÇ𨫇è’2¹…jNá°òÁv=èo¨¾\¨³çå'9«.“ ³¹¼¥¥õ”¾uÑ>éÏkjÜ£R÷¥äœÙA7Lr®ö±¶Mbù;×ãˆt§¯óíÇrwW—ÇÛ½ñŽÿ<ä7þ/[Íë…MgïÞͧô;ÃþîÌÎ;Ý˼çç{ãÇFõès r|;÷ô¨w-}[.‘Œ·б7ô¢Œh€+_÷÷Öö¹c¯lë7ÿÜé¾YgnUŸwžôžÞw¼5=û»ÃϘF÷µÛoî÷ºÜ®þwé!Ÿvn‚¿¡FµÇM}júó¿|C3oÓ1ò;ÀLó·þ󽺉<üÃýÛ¿>8‰û?ìë6]72ë5øk´T7Ü@û#-|@õ‰Àˆ5‹K¿€S>ø7Š+¿ê9;Á}+¿ùcÁ$¸‚c=T›‹ Ù{>~#·‘“8˶Œ3„¸+B?Ó>/ÛµdŠDþ«<ªã›6©½´¨BÁòÁ,d"û1/|‰3ÌŠ+Œµ³—îƒ!œ30ôˆ¼Œ4$¬+¼˜‚ ’„ð`Yˆ=¬ˆùC@¼’¸Ú´kCß DpêCm™š†`ĉ¹I<.D ;Eì ŒÑ’þØJ|D!‚ṑAù’~áP¡‘|±‘Ñ•@<“LŒºM” ?Ü”JñDQlÅ(Ù•P´’_4ÄPÑaÔ_AF:IÅB¿1¼Ž7ñÅXÜ=Ù–~qÅ€Ù–'±ÆnAÅ9©ÆpÌn¼–< ©EÍ0À9œ¦<ÔCl!Go¡N±Y$€¹zì˜j´–lùÇOþéF]¬DàPÇÌ赨yGx¼Fyä–}ŒÇ^QÆ€ìE}üE¹HlHoÈ‘™Åä)C߸Ãð¸E\Eq”Goä{´HžAI–Ü—“œH4ÇN4; Ûû=*œB<Â4s´Ý{84£;d@BQÈ{¡HX¤‚‘“W<ÆpŒJkôE‘9F•¬È{䀱IhTCÛK¾(“¾ùÀ¬6¬Aú›BæÛ¾0œÆªñ—ÿEpœÇS¬K»\E—ŒGŒXÈsìKNa·›ÄIz#·=²ì2Mk¼Ã„Âd?<„À˜pFëŠÃà½k3´ T@ÄŒ>Æ´7êCÀB«‹7¬:˜¸DÚ²Lþ6vdËÑ[<4À±„·\›¸õë&ÉÔ\­ª/3œ¾jS¿óËÁ_SA´4K;ãɯdÇÎ(M²‰F „»ä¢CÙ«N¡ìIàëÌ%ä¶"ôL‘“MÒtÎÛ‚N2<”¢Î«CäkÇÄ#¦ýOK­é´´Ò»·õLÀ¹XC÷yOòŒNΣ+\ZÏÇSφC ‘Ä©þ´/ù?JMøLP$3OQJ?rPݤÞ\#´08—R¬½PJ“ÐH¢&HúÐ1Qeà %Y*Q åϽ$â{#µ«ÐÑBJ,ŒQCZѾâÐ ,IÝÑMŠmPÉ‚¤ÜÒÙàQ&BÒ$EQcbþÒF,RÜ°Ñ(…0*mÒ"U)-È Ò-­+Ó|$ …R¼:¹CS¯«,Iš 4}+eS8tÒ”ÛMR#¥ÓÊPQº*RêP­RR>M2'£<ÍÒBíS;eº@ýÑüã%#¼E-<%T¯zÔ—¨Ý›@ ÓÞøÒ%-LmQA­'äa#3Qm?5Óô@Òï£Ð ª SC:}UM “RrÕJ¥TÂÐÐXåÕgS- VH}ÎRåCY=VwlÕóÜ0‘+ЄPOãÉŽ[Œ%>RÝÔ&}VIPí9j…ÌC3Ì5嬾HælÕÏÍæÌLtÅÄÍdcþäzufؽLü²àݵÛóÝvö](ô3È´bm=äîþ|e>Æe.çS Õg%dÿ¤‹v¼sÒÔdç÷Ub v»¤ QnŽ‚Æ`T%ÖÓßfèvè–ZÖÍ"Ð.$âøôhYã…nÎNfbÍ[`=%i>4i>Ê”U®h–Æœ.i,%g6g‡©é›Òœ~é>éðdæÊÁÓ®³éÉêÿD#…Ži‰Bêƒ-¥¡f;Å°ã<öb9äA`ÚáÅS©î­™nf3aê÷` ÄU°9ì[O2¹Üˆê“²†VvBk¹u×Ídk 毞ֻžk•¢êL¼^\ M'¤Ø+Ná|g^]úØÀþcî#l¿²ÛY¶eµ&å–¥YL\þ ‹>ŠÅ½‰&;ÀÖZvi©ºeMg;ìfålØ´}µ¤MÀe«äÓ®\ž5¸-òmÊ¥¢kÆlœ6RUÅå5Mì2{LÖ]VC6Ûä5Ü»½îëî£ù Pâ¦kãnªÚèöì^~n\›M±Ø³µníþÔìÆn±ìÚúnz•ÃnÇÄÌÐ^¿5,JäDÛkŽ´?Õî÷&ðø¶ì£ïy<ÞªV£%íÜ讽ÅCB!~æŸßö¥ßäTpiÒl冯Þ,JÚð _ÞŸU_½;ºûö/äà§:ñ÷Nq_]Ömq º¼äq|u ^YpøÆñìÕÚ™ãþñ•ÓÙ†Îe§6¦ ·ñ)‡éÍÆ®ï'Ó(ÿ&Gòí®ìúÎòçÙò6ír/¯r0Or»¶åT­$3gr4'R5¯r÷fí÷_×k¬žs)Ïð57éãæ认_}:?ÿs·ó0ïU2§^9/ºDÇÙ:ó¢t•~r Ÿô"¢ò#gô6R8ŠÚg¡‹ß+ÿ)°âô*ííàÎ%Vn>7nDÁÚt|s8Ç™R‰ó:Õ«ïHçòƒÝS8Rê çuU_uà†õdõK¯R"-bš. =t7ìcçJu¸f]v$vŸ6WíèõI÷t·ô õpëmUÚöž!w7ÑuFýrFþÿ_ÓK.uŸ[Å[R—ô ¥UdûståíS³M3/NÛŸgƒÖ]2­oÚ­aæ|ô8d¦Ê™–d~Ü©ñèK¥S¯n*jÁü’Â轶ð¹ve¾o¾v÷áã»ÊÆúýÝŦ߻¿Ûûv_ú»Ñç¿þùQË è\€MæŸq—!¸ ƒ™)†w}ýtÞn~ý&–wÎÆß}n¦Øj ¥gŸKåé·‰ð‰¢z-jˆ cÉ ØœdÏ8 Ž9ê¸þ#:’¤`ƒA ‰Õƒ9E_iªÒzÄ™EZzà)é!cQ6™ß”¹ñ¥ÞkTj™%_‰Áå"‡¼YcdÌøtEõø&œqÎXÔuÚy•M+F8P(Îd&mú‰å`ÊU}íõ'[Šñö(~ jÉ%‹eŽxšR-÷XmÞ('¨¡æø㥚zša©Ô‹9•–Ó’ööª•sÙ:+e(ÖÔ¡}ø¡j"“Žþzë–)¦e© ëI£¨Êhc€ÍJ+çt§Z{­¦Øj»mT—rkíZuÊæ§ÓšËcµßª îºír[Ÿ»w2+í³žF{.¾8¦/¿ Ù/Àêpó¢þË©šãÊ謼 “J0ÄK<1ÅvfÕ¦k†ëÔ¦ ¯YoÅ!‹<2É%eðŽ4‚¼ðÇBvü°É1Ë<3Íë¢ì#ÂH)üãËuö rÍA =4ÑÔ]|•ÆÐrì°ÏL]4ÉÿB=5ÕÙB§Ê6²,µ?+]5Å\ƒ=6ÙGWµ³›N»¬¶½dK,¶Ûq}ó¨<¯Ì3Û zݶÜÃÝ7à3ÓM­Öx·\pÞŽ­â‹;òÆX¡]nãÑíMîãñVž9ç~#7íÝi®wâkn:ê%›Yè”—zùæ©û+;ía˜UÒ| øzâ×}ïÏ¿/½;åN Ÿsðso¼¾ÅûÞüò£þ×>=À«k:9ð¼;õÝ{/·õc?<÷šÁþ=ú飾R¹cN¾ö –¯>ýõ›ÌþÉã#ÿ¾öû¯m¾º áo(îÛÿšó¿pbóã×àâÔºìyL~ ¼à©(/¡Ei„_û‡ÁêÍüš ': Ræ|$|a ßvB¾¥ÐS ¡a¨Ã®™€(¬Ê÷‡C˜í°ˆ–ëaÍ:Dºnˆt2"9³5 ˆ‚‹^¨‚H<‹•.Š^ÄÌ©˜/+ÊŒ…0»!·÷Å52&Œb<cfÆ'¾Oˆi´ óˆ;ýŽ9Lb‚¾¶Å¦©Q†l û8À8Þoiþ{¤³")ɤDnCrá!3i@>&‘ª»ÚÊQŠ’”6䤟¦ÉU òrþê" M)ÊYš²–•tå‚0ÉÊ]ÖÑ’k+d,i)LY‚’’­ÌÛ+ÉKV¢‘x &1‡YJZ’«™—„å2WiÍ_>“fÆ”f4‹yÊ*’^̦&·‰8e^1œàü&›nYNs‰zT'éØYFq¾s”¶<æ<ÍéI{~ŸÉìf;û Îê. ‹¤#A iÐ\b3¡î$&C{)=ÆE4“…QE÷yÑ…RSž§ë¨DQyÇz6r¤-é!ˆÒ”®°“µ¨Bÿ9͘žt¦lüh×B*G~º4£stþYúz´¥Â¨˜jKs:L£"±v¸td¹vÕ¤ªÔ™,ý¤K§ Söë¨ÜÜFó'¹´zÏ©g‚*X¥ªÓxbQŒKÍíØz²µZƬnskut™Ð„鬰œä8YC0âu},Ô+§Àè?À ®Q $Y…R9¿ÞÔq=Û^ÍÇYªQvY–% {XÃfÌ9Oq¨C;7ÚÈÚ ³\­i*yŠZ¢æ4£â›íR>›9මÄaWzNœ†•®;]«pqÝáò0³æ»mr½º\‘ʦÏÝ 2Å5]Η‰E_i-wZ‘Á³»â¬£xø¿ò>‹¾Ö5]z´^Èñö¢¾µLþ h_ÝJñ{ù•â~ÃÖÞæÚò±ž,r§wà»ê3j;uï‚Cù@ ؇Cë0{»zÍ Cn2ˆ=1a [ÍòqØ~ Þ „EÌͯ¾Í*œµqìZ\¿Ã8¯2^'B¼ÝÊ\fº:V_gÕç3È“Þ5ûZØ2¿`K2Ä&,ZWOjQ6`)-–:,+YvZÎŒ`³Ü>Ûj¾1”mÙ|Œ[å‚Tnòî =òþÕÌL>(=úB2gÐÏäÔs•;»KB{8ÎcN$¢VçC2Ú›}«t»Üé㘦;v_Ÿ£åYHošÓ÷¥4ý¶U¨½,¼S[XO³‰i&uÖbN[¬þ—ik¿íšÖŽ~rÑå*©‡Øò™4Ÿçj;G2ØÂÖJ±;ólE?š½ž]Y;´<¹FB©φìr©˜ ;°úS´ÁzÁkèªAûS Vƒ—ÁG$ÅÙK¹Ñ²¨yF¤#d7¦Ü]3xÇ*8¾ V˜Î¢’|ï;Üù°i-™Öñr à-5M"I9üܬ!Œ¢ä’ï-ý¥U¦°ò&nqÉ‘v±V[–ÆE¤—VñÇDÀAb 2ò^Íü-ʪiÝÚ¿Úå;/Ѹ}p0!kص*J¤…+KýS£ m5–ÚG‚Yë\‡9«1^Ť3 Dô&¿/4(ìIŽ*¸¿Õþ[[×Ήî7"”·¨¼#‚£nö_Èc¬cÝ[>_i;±À}( WýîYíÕiy†±òt·ïÊÛ}­Ì«+ÝBé·Ñ©{ñ¹ãØî’¼ã…^ ÓŸ©ï›GŸçqÞFCW–ôË›¼d¶¾zÕã>—®g×÷b_¢¯ï­¸~¼îMßûݧõšg¯Ø£¿ê¦V{ô©W¾é dùÔùò‘~Å8o4OÃù­Ð»|ÇПþ½““ù'ú•ÉŸì‹K|Ê:“|k¯îêžQœ+â·š¤EÜá]úÉŸè…ßÿuÚI ß-•½O¶“••˜çðWžùRe`îQž>N‚Y†N€i`þ} ã•_AÁŸÏÚ›<ѺV. ^–Þšó`M½¤Œ›A‘ôý ýÊW]×ÑùTÕÔànÝ` fàš!aËý ^›mF!>áûu»(!²™ßá²Zûh}±•«R¡†ÖÎMÆáS©UÿùÞ"ÒàÌ©íáÚ`¦a•þ%LΟÙMË$Ïó”žÖ¥¡*[¾DÁöá©Õ–öµÚîüº!Ïíbóì™ÞaÁ°Ü9Q¢% ¢òá÷YÝò9_pížåaöéž-BV%RÛìd\c+ª›”}Ÿ-^ 2žžúÅbmÉbþÖÚðˆNèA"*±b1žœí­^#®ï!8J™Þu”#Ó`àùZ.Q6Jâ6Jà-2#/²Þ2z=æãÖ£û-#Þü£¢â›¥Éžic<ÆÒ<âc#Ö"2z_2†#òá^òeäAc@Š`$J–¤Œ„R>å?0åDPeW8¥PX¥LíÐ/²¤:àFF R"eV:Y…TNeZ&åZªåAœåY¾e\2Æ\¾¥Y¶åVRþŸ1²!X%Àe]V¥\…TæPÔ%`ÞåZ>¥ajE`&^æ% u¥W‚šÁ#ÁŒåbfT2&^b¥fVåc~faš¥[Ê%dÎ%Vª¥gÞåi*fkÆ¥Vn eªKm~!Òõ¥Š¥jæi:%b¦&S¶&IŒ&Tþ¦[&¦kÂ%p&gdræj§mZÜñåPîffB¦o†&k¾¦kv§r>gdúæT¦vÎ&wv¦y’&j"gyvá¿u$êæ)B g¾fzj'Tê§f&b~çyâg[Þçogpn§g6&m®Õ]ãe†eQž'NhqR¨‚Â¥€Úewz§lJç}rç~"¨wþÚÙdÝf Uaf¿@g:g€.ç‡*§hÂèr~gr’§snhÞ(ŒJhiv™‰"7’¡}gZR¥zn¨bhjVhs–'h†§‘ªfs²¨‘蓙$à,¢+þZL&¡¶õ:zÓŠ]˜Nú_š¶i÷¬)x¹©œ.ٲͩªàØÀéîéƒæ)Ÿþ%’Î&eª’.)[ÚÉjbéx.aüýi„ÎhI,jS.*•Jj…šf4æ…N!‘:*¿0¦`¢åURªlŽ(UXªthª¤¢jY%!ÅžüvL›ƒ ¬Þ‰‡.é•Bé‘2'¯꯶§°&igjé&*j6i’æhþˆB§p²&«~‹žb'ÄÜêTXë¯ f`+èiK®k•èzªçs"§”&+žë”jèv‚k¸šj~f(ˆªY§JLáGŸ(œÚñ\±ðF¾2‰¸•\â‘\Àl˜$œ°8&¦þ¨…–fº>kqšçzŽk‹VìÃ’&ögŒ^êƶ¨‚Â'V È-†˜øœÚ l£ ¬vðÇika¼ÝŠÄ,bÌlVô*¯ú*´‚ª¯2çcJ,ˆÆ«ÇÚl‡Fj‚Ú,³RéÄ-ŽÒëV+¾Ž‰yÈÜðÉÛÉêkxÔ”4œZ ™pm¿nÅb+€&¨ˆÊ+¨.lÇ>¬ˆª-¤*jˆæèv,ÜFk¦5þ­Ó~‰—ìŠÓym‰ä«˜t­ÔæÞJ¤ø¤(,¤&æX2«Ò"hØ’g¼Æ(Ùç·–*´Ú¥äòèÄ’ëŽ.®í`›e¾êÓ.’ÜÓå¤4~¬Hášá–ËÊ*Zöæ°†'–Ú(†ªp’­ã‚§±òì€Rî„m¥k±æ,ÝÖm»a^ÉD]¥ì‡—0²ŒÈÈvm—tÜç) àÛ×.ž§.è–ךº‡®”¬ë ÷ºën¯`(޳ٽɬvÐ,­~oŵÞ#^çÈ$JÔÙÊ͹ÝâÍDÏ®¬ÞJ· ,Éú­ìÚ¯ßéWe– O°™ùÕ¿|gpõ™j¤þ0~qØßÔ¡ ‚° “×x9â3žÍ´ž0[&ïa¢*²VÆ ¿ð›Š ’#·° Ÿ* g%«~,Ø°ÑÞp÷ݘڨ°ìÄ^G[ºÁ õñfHqÍñÒ¶ÕJªW/PËêCqíÌ+徧VïÎöê»jìÏzhç>«çRqÛ+ß[ ø+ºMï·!\’¬¥ðËitºèâ(ò2n–'“r®i:ëÅÎk›ÌÓMj¨,­œáb-À.úª¸¾§{²§ï&-þ¨²J¨†–rÙÊè#C2ßNÝ$' FÿÎ\ÖÚÆëÊ\«‹äm [l–^®ãª(íئòÙ®²àÌÔ›ªŒnvo°î’ÔÊ„pÜÊzo¼ÈmÙíÚþòŒ:òÆh1û²'#3+ŸÈÞ‹ÙÁò×F3×NsÏ]Þ~ªb./7kæšë<ãó/›1°’sóZò¡ÆÔGÊz˜ôÆ]‰Ähéªhr!ëh¢>´ñ:t)ó.´Óæq%'ðü†t™,ÌúoɽsÈI«½8k‚–F˜‚$É‘…æ™ †e´Èa¾5ÐüP<šA@™l.‘"` Ù-Å‰Ê !ߧûh"!ù ,CÈI«½8ë`´DER@wˆ‘$‹`H»Æˆ`¡ñA§ö”î;B·c% !í ‹] …¢á0¸ˆ?˜À@(lM°!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0 Effect frame 1 rotated 0°Effect frame 2 rotated 30°Effect frame 3 rotated 60°Effect frame 4 rotated 90°Effect frame 5 rotated 120°Effect frame 6 rotated 150°Effect frame 7 rotated 180°Effect frame 8 rotated 210° Effect frame 9 rotated 240° Effect frame 10 rotated 270° Effect frame 11 rotated 300° Effect frame 12 rotated 330°;./bb/bb19c/www/psy/nb-yellow.gif0100644002342100007640000000051507616533077014307 0ustar bbbbGIF89aƒ3f™3Ì3ÿ3ÿfÌ™ÿ™ÿÌ!ù ,AÈI«½8c# ’ ˆZEâ¢(Té '\å¡¥‰^° â0°ìx&í4ä(NaaeœÂóâ¡j¾àI!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/psy/nb-red.gif0100644002342100007640000000042507616533077013546 0ustar bbbbGIF89a™ÿ!ù ,-„©«Âæˆ!À(E£0…Š£Rj©•¬ë’†,jž Wv ÅN÷ð‡!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/psy/nb-purple.gif0100644002342100007640000000043307616533077014302 0ustar bbbbGIF89a™™ÿÿ3!ù ,3„©Ëí„”lLDÃΰ™8j ¤#˜€Ø¢å°UghGÁ`ë!&5‘CÄ1A!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/psy/red.gif0100644002342100007640000000200007616533077013140 0ustar bbbbGIF89a‚3f™Ìÿÿ3!ÿ NETSCAPE2.0!ù ,ºÜþ0ÊIW¸3ˆ!‚„AR0\)¬^V½p%!ù ,ºÜþ0ÊI_)êJ øÆ•q¢C‚Uª®,”!ù ,ºÜþ0Ê©Š³°`-9ðF‘G^›x­Të¾m!ù ,ºÜþ0ºé¼Õ›Õ–~£&Nft+[p, !ù ,)ºÜþ®@%Y¯Œ¡ömC¡…Dz¥yrºµ¢kÆ'4vaf76ýÀE!ù ,/ºÜþ®@%Y©cÐjK¾Ç WéA¤y:©×jÍû>m ³êÚ€ia°Ën“!ù ,.ºÜþ®@%Y¯Œ¡ömC¡…PšÚ²Ýëœé:‹žÝŒñ·ø¿ÝD5, !ù ,&ºÜZÎÁ×´õ2X:¯@÷hh‘X™I™fFæËz «à…Ú “!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0Effect frame 1 rotated 0°Effect frame 2 rotated 30°Effect frame 3 rotated 60°Effect frame 4 rotated 90°Effect frame 5 rotated 120°Effect frame 6 rotated 150°  Clipboard  Clipboard;./bb/bb19c/www/psy/arrow.gif0100644002342100007640000000015307616533077013527 0ustar bbbbGIF89a¢ÿÿÿŸÿÿ€€€`!ù,@0HºÜN"ÊIãX!ë­ex r…¤ð5UJäbµpŒÉNÄ*jÎæù8üÀ P2¢ Š4P;./bb/bb19c/www/gifs-bb13/0040755002342100007640000000000007616533100012537 5ustar bbbb./bb/bb19c/www/gifs-bb13/arrow.gif0100644002342100007640000000015307616533077014371 0ustar bbbbGIF89a¢ÿÿÿŸÿÿ€€€`!ù,@0HºÜN"ÊIãX!ë­ex r…¤ð5UJäbµpŒÉNÄ*jÎæù8üÀ P2¢ Š4P;./bb/bb19c/www/gifs-bb13/red.gif0100644002342100007640000000472607616533077014023 0ustar bbbbGIF89aƒ3f™Ìÿ33f3™3Ì3ÿ3!ÿ NETSCAPE2.0!ù ,ZH@­3Ó`„ ¶ À ž ÑòMàÐ*Þ¡%¸…`®›œ0ØšY„¥PA8€@ˆ¤”é\E· f•U*O=é ;G§,ºGS{®¢Í…ž§ô#!ù ,\È)½4h|ƒðòY™! ¡— QÌê8yj¡(EL$À‰À›Í  0HŸ½F# Bg i¥Z¼²,šÕ¨ $6•”¬H@ ÐKÜ8߶P,[‡:åìÁ!ù ,^ÈI«•!ƒp·C hUö!zŒIÃã$¢D¡+Årà ÁÓ鈚‡P4C˜@"çá'Q´Ö8šA"ÆÃJoSŠp$œoâ1jÃW6`}$BbK!ù ,ZÈI«•䋃‚wy‡0œß† ‘¼E‚ˆHJ¡!h“K§SðB“q©¤Z…³0ËØ¢L…b€ô(§>•)#Ã5!!zf©Ö€LT+“›ÆIU"!ù ,aÈI«¥áâÀ{®0 ˆ ߈H‘DÉIœ IQÅ8Óž® ÐŸ!Q$*€:wˆY``u"wŦL°&6ø­¸LÞ뢉á7ÓQ{ Su!ù ,ÈI«½8ëÍgø[ B  „BZ0d+ÌfØÝxžE!ù ,$ÈI«½8ëÍq„°DaZi„&¬f½ë ϬÍÝ]ïÿœ!ù ,[ÈI«!‡KµÀ™¥ !ZCB‰nRF…‚Ã\³ œPCý‚¤Is è’8"b³" ¡<Úª”K!›µ‹s¥WÎ:QN$W¢GëdXôº 0¸%!ù ,^È)½Ó†ñÂç€ BjQ…Bá lBÀJ1#¶M‚ЃÅh`lC•AÂÉ£iR*,‘¬E£ •9̦ŠÞ ZÍŒ.Û[š¹P[[€PÍ;7!ù ,bÈI«•!ƒpwÈqT ÚÄ ¡A +¬…ÒׄF@+ŠÄ@€ ¤dÇ£’$¢GB¢UÅgÂâM ®êàg´!„ABK›/+ŸƒJ%Y>U}$ƒ!ù ,aÈ)°4‡mq® œ7m#A ‡°Qè@Šººg€Já+‰Äàu |H!³Œ’ÈÚÀPTõ ¡à¢›Akˆ-wøVÄÍQF&¸“‘ T…M‘} þpZ.&\D!ù ,^È)½4h‹ç l—† ‘ˆ‚‘©¢©È¼¢ŠoÈ# 4¸ŒX˜F³GáƒéÐDfÈè¼CßóvE$ ‰øÓêÙ î‚£’:e!ù ,cÈI½3h`1ÂWa’"tÙA$¡¬Ã+ia@…OPÚ!À$0áÚ e’eÑ¥@b(¢ÊAÇy•„Œ7¨-‰WG#8Î ˆl æõƒƒ†!ù ,ÈI«½8ëÍgø[ B  „BZ0d+ÌfØÝxžE!ù ,$ÈI«½8ëÍq„°DaZi„&¬f½ë ϬÍÝ]ïÿœ!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0Effect frame 1 rotated 0°Effect frame 2 rotated 30°Effect frame 3 rotated 60°Effect frame 4 rotated 90°Effect frame 5 rotated 120°Effect frame 6 rotated 150°  Clipboard  Clipboard Effect frame 7 rotated 180° Effect frame 8 rotated 210° Effect frame 9 rotated 240° Effect frame 10 rotated 270° Effect frame 11 rotated 300°Effect frame 12 rotated 330°  Clipboard  Clipboard;./bb/bb19c/www/gifs-bb13/purple.gif0100644002342100007640000000341107616533077014546 0ustar bbbbGIF89aƒ3f3f3™f™f̙̙ÿÌÿÿÌÿÿ!ÿ NETSCAPE2.0!ù ,>ÈI«½8ã$S*& Éb.HXÇ¢˜%jy/ìrU¼Ä%žŸ»a¶Ósˆ Ž4ëÁR˜‚„0ø.•fË¥D!ù ,;ÈI«½¸ŽLSA—,ä’pä¨$§…Œ)LTBiÇT(fJ¾Ømª°L£dË¢$"2ˆPôI„8Ø, !ù ,?ÈI«½xŽ\B @dÉb*eVªéªkeÂîƺKi‚T‚(9\ÂPàr:„å k©l½”ëë|9GÅéz+!ù ,>ÈI«½8ãR"Þ†,ʲ$ÈpæÙvVrÊmbÄ­k"Ví'*J¢d’¡©(ƒUZ±€ x“e`³aL¨©UÙ¬êSÀéz+!ù ,@ÈI«½˜Ž<“AI˜ ಠHq%ˆ¹„obÁî{Êá&ñ;Û5_%¡°ñL8J ¸Pˆ*¤Zñ¸ 0–€CIr¿Ü!ù ,;ÈI«½8ã‘PIÐ-$’!È’$*¶ª*»VCJÞä<0¬$Ê ‡T9VÎdY)ze.Tû„$ƒë5!ù ,<ÈI«½8ë”4HH²„ß"K*rÖÀ-/|X(,¦©P·º(¤ ׃µˆ1S iy%Ä áƒ@ <“+6!ù ,>ÈI«½8ç¤iBI˜X‘,è’‚õ©ç¢,`õ±ÌQžæÄ/¥²r°¢MˆÊ.j†`B„PµÃíF!ù ,>ÈI«½8ë„–I¸ _²(K’!æâºjÕš-\i.E…ì¯b@Iüh)‘20¾`1 ë½Y„ YÕZ"!ù ,>ÈI«½8k‘´LÇ‚tÝ•œ‹²,'¶¾ï`¡l-ÊS‚Ø6R%+JQ¢y¬ bfÌcË4@ƒ©¦èÁD!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0 Effect frame 1 rotated 0°Effect frame 2 rotated 30°Effect frame 3 rotated 60°Effect frame 4 rotated 90°Effect frame 5 rotated 120°Effect frame 6 rotated 150°Effect frame 7 rotated 180°Effect frame 8 rotated 210° Effect frame 9 rotated 240° Effect frame 10 rotated 270° Effect frame 11 rotated 300° Effect frame 12 rotated 330°;./bb/bb19c/www/gifs-bb13/nb-yellow.gif0100644002342100007640000000051507616533077015151 0ustar bbbbGIF89aƒ3f™3Ì3ÿ3ÿfÌ™ÿ™ÿÌ!ù ,AÈI«½8c# ’ ˆZEâ¢(Té '\å¡¥‰^° â0°ìx&í4ä(NaaeœÂóâ¡j¾àI!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs-bb13/nb-red.gif0100644002342100007640000000042507616533077014410 0ustar bbbbGIF89a™ÿ!ù ,-„©«Âæˆ!À(E£0…Š£Rj©•¬ë’†,jž Wv ÅN÷ð‡!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs-bb13/nb-purple.gif0100644002342100007640000000043307616533077015144 0ustar bbbbGIF89a™™ÿÿ3!ù ,3„©Ëí„”lLDÃΰ™8j ¤#˜€Ø¢å°UghGÁ`ë!&5‘CÄ1A!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs-bb13/green.gif0100644002342100007640000000016607616533100014326 0ustar bbbbGIF89a¢ÿÿÿÀÀÀIøI«5>€&>Y'8ÿ!ù,@;ºÜz$ÊBëiGèÁ¯{å}0Œ˜¦r,@“E>î|ÔNfž¤¾µŒŒa8dABE”‹p ÈsF]$;./bb/bb19c/www/gifs-bb13/clear.gif0100644002342100007640000000153607616533100014316 0ustar bbbbGIF89a÷€€€€€€€€€ÀÀÀÀÜÀ¤Èðÿ¥ïÿŒÖÿ1{ÿ!cÿZÿRÿRÿRÿJïBçBÞB¿¿¿ÖBÖBÎc„Îc{ÎBkÎJÎ9ƽ½Æ{”Æ{ŒÆ9½9½1µ1­1œJcœ)”)Œ1J„1„)s1s!k!cZ!ZJJw3f™Ì3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿ3ÿfÿ™3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3ÌÿÿÌ3ÿ3ÿ33ÿf3ÿ™3ÿÌff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿ3ÿÿfÿfÿ3fÿffÿ™fÿÌ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿfÿÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3Ìff™ÿÿÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿ3ÿfÿ™ÿÌÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ!ù,;H° Áƒ&ìv€!C„ FT8p¢À‡Ý&Z”XpãF÷( Ùñà=’%G¢4ÈðäI‘0cÆ ;./bb/bb19c/www/gifs-bb13/blue.gif0100644002342100007640000000026207616533100014152 0ustar bbbbGIF89a³3f™Ìÿ333f3™3Ì3ÿ!ù,@_H@­“DTù`‘X IWxé`N¦€ Ülbp ô ÓAHÑS°á4—W&0ünSË.•"È$!ò|Ã'Bñ£ ^:õ:á+ér/=œÓ]¥Y0;./bb/bb19c/www/gifs-bb13/bkg2.gif0100644002342100007640000000734307616533100014057 0ustar bbbbGIF87a ÄüÊœÔÊÄìʬÜʼôʬôʤäÊ´ÜÊÄÌÊÌäʼüʤìÊ´ÔÎÌüÎœÔÎÄìάÜμôάôΤäδÜÎÄÌÎÌäμüΤìδ, ÿ`U!ãÈ hª¦gÕ¾/ù.ÍЕsêÌ]ÿ1nÇ@RÉt0ŸJgpê¬Jì5û¤±^ÇÁé`Í´úì…PÜñ’¦ ì‡YŸŸû!z‚ƒƒ€€„ˆ‰ƒŒŽ z •–— Ÿž¡œ£¤¥¦§¤¨©ªªœ ª­² ·ºº ¾À¿¿ÄÀÅÇÉÈÉÍÄÏÑÏÕáãââèèØééçíçñ óó óûú@P`Aƒ ô\Èa#BœØpâC‡\<¨Oã?ýþ‰lp=òäÿ±[ÉžËr°‹Ðí[ÌšÚ¬AÛ)g³ŸÍ1+&,˜€ GâZ +Ö¬ZO¶šúj•UV¥2Å”L˜(‰M0¶l$D‡ 2ô'PZµlÙêC—:pP8Ã7M_4tÄù2X —-O¬(¦eJc$“8!B¹Hå˜èМهg1\È-b‹¨Q” ºu Ö'b»6A"€f¶à®÷‰#¾s€ÖÍ€7hÛD4ÓHr£9ó%‘£La@áÆbÇ^²È^xÌöï~¼“ÀtìˆIOþûðë@Wú9òóÓqÏßÍÿv ~e Y¨`ÿ# :Èz$à “T(V+›P¨¡…“tå¡WºòÕ ˆh",SMe -M%EKRHMðS»ÔÈ‹`à‹PÄè8<Ò¤ 2Ü€Cd7ÖhÃLáxãä6PÆô$<)¡s<û\©%@\^)P$tϘ] QB e”æš Iä¦EpÂùfstÑ›j „¦G$Df>$¡Y–ä“<(%*Á•UÆ¥71I¥’8Ý´d5Efƒ¤‘Ðä©2Èèè#¨Ä c㩼ü£5¶rT,@‹T'NP+U¸’¨k‰™ðº«*]5Âá†BÈ„Æj‚lƒÛ ‚š(˜ %mrÿqdÛ|ä… î¸w”GxmÈ‘nyðå×n`ä7†RhgïwÞM6†uŽAÇË9'ðºWð ·!\pIÜV°qÓ0›l¢ÉFñl"°F[k©¡ ›Ä±½¶šï¶gËÕpo9\f™Ï!!ÜPs…1æ<#¦…xïŽ+GWˆwÑy¤×|þ+à„Ä¥!}È5õÕz<òˆ&ÊFV¯›lò¡(\_e¶V­¼¢Ú(ŠËŠ²Ö ŒIýb€QÃE SÄÜýÀŒ¥µÓ3„ëDNÞ™M¤05î;ë¤Cî¸TåIóZ€Iýl®@@tAÿš¤PE¨Û)gœ I„è uÔçG›×þјõÐè咣COKèÈS’ÜoMÆëTM5…WÓOÑì-}RCI_ÔÝ«Æ’KÜMÅí”,¶œxÕÚ«T5 Û©¢W•|eÉWÌj¿"oM-uZõ'r¿xjõ¡ÇÒè:ÿüB4þÑk^ðA`{¶ -\Á üºŽa¦„È Lfse 懑Œ7ÛŒntC›‘É@b;MÇTP‹ÍF.”MkXv›€¥ì Ì!q€“œäŒP9$ ¢ qc› æF2ƒ‚ƒ@ï„Á‰æ!L{ (˜÷´ç=CË{ÂUŸÿÈ?÷I`z´EÆÿmío~òK#ç§!aQbYÇjÖ°æM¨Dnô•uE•` ·ŠŠ- â=Í({.J$"‘2# å(pA:Æ7:%É#qªxH’É6´I&a#Ûø$@°‘zh.!÷¸RT‰|€‰•©Ä‡@4B¦5åI#Áe@êÄËÕÑÉ—ASžvÉ'>É’Lb’%,• &B„»k<µIÊu פԥf’$J^²’ÞT†¨HåHT¡ŠF7¢Û¬^¥‹Y…Ï{²(Ñ'øx«±yåW¾’c²ˆ5‰õ“BqtVÕ(¿e ”Õ²V·ª÷ȧ> $—ÐâP†uÝA>êrW¼àuÂÈÿ+gƒ¹—v£…™Ñ_ ƒmز€å°ˆÃ ¶0–ÝÐ8´)ÎÄ\óB®f53< l3â¬LdAENo„tƒ#Ô NŠ„Ç”ôfXÂbªÐÀÃ80 UÚFÇ“´¤é¡€|¡˜ÆÅ:ü‡guK[°VˆÑujjÔD†Ü­^µoëëŠV{ÀÖnC_ÛRDÈY©h{鼛݌’ aTGÊÜóœç¼ÃaÊ&Å[Ü8È1ŽÊ5©%¦•f=‚‡Úu®tyˆéd›ËÔ¥®—ÁHn B[ÒÄs³ëœk37¨z¨Öw½Cí4ÉL&nqÈSžN6ë“êãnÿ}ìފ¢*-¥{íäTÞ鶳q"œ0¬* ¿ô’⎪(ûÜ×>KLKZg‰Ú]ÏH ûUKi„ÿªöPt¡µ€6ø4ÚÑòø aÐc¸àœ(øF ^BT_¶AÑ4Œ`*ƒÙqjHš‹í@¦( *ÇV›ÒðT¨0DqNYCBÜÄô‡7<±M‹Ä•òfB!ScvÄJg Žq@H¿‘~'0`GÅ%˜pµa;Wü"ºÊ…-îç[[¤ƒìà™y@×úßðËÏ6÷òš±$äF5ëÎmÖû¬Vø*WöÄ=sµØÑb±Òª¢#FSGHQÿF¤GE !…sH6’¦0¹8Ń¢Ô$¤$ J)!ê(Á’åR½%3óK‚J“*…iLƒØ˜½Ä5DêL\ÞIM§ÔHí%lb«rscÚ’¢ºd(Þ9jJ¤,5&=ÙiL²H™ÎÆ7¶=$P¡“TÊ0çz±ªÁ¨Oq¬ºÓ6O’ÐUyw²š…GQ¼QÏê‹3…ð̬ƒZÀvþ'›ôßkùÌ%³{êÓP¼èGË1jàs…Ë£WÖNz˜Ìq:0Q0MOª@ÄùK9@fi‹˜™‚u°¦Gð! "fÓÇ4B!ÇDÆóÓÀ˜c¶1Èpˆ0›Û e=Ü͉ÿ•Zs§¼ˆ,·jbš ­võÁŒ½À³†-ìÁë`Ó®|ù%®ÿÓò]×b×µ'Bgég%6¶¿v Ÿ»:{ËFØ^•Í‚&ú¢2 wJEß=0$Ë*cômoÕÓQ1ªWŒÂ=/ËS(¹ùÜåÁd‘k’8VB¹v´–$÷àGð„í¹Úõv¿}ˆì rºÚÚ–·º®ˆë²§Ý‚—®W}HÝÌ‘`I%ìøðBkgϹÙ\œt§; ë o×…d3¸ Œìá¢F±¸‘ i…«óší|柊߿ÂþRKžòEV}/á¾ •EàÔÒ+ÛéÊßü¡Åô`p…vÿFnàP‘€~±`¥Q^aÓ!a&UEvaÖÁF*ut,Ó?Ô'ó¢ÑB'TB7,f‚&„b+s#c(DT4är8tƒÂA"tb)å>bÏ¡a:s^À%U/aORâ.ÞápkÕ„fbæemõeJÓeRø€pp %5kDPý†ü&$B ‚!ºR†x†,¸ân¸B!nh"ò„òFhT>9’6tƒHöH«â#|à ÇàHÈ`i‘äi×F<ÄÓi¢g<¢Dj‘²(ÎfÍÔ(»sllƆ»[·†[º6'¤èKº[ÉKÈôjÿdžz©–ÐT‰U‰T² Žh$ÕtM4¡)ÑõMÝfˆät »À*ãvNǸ‡12±ò=µB^ð6Oð§†â†rHoñågûÔOkhùf pD†ÿ¶f÷gWp å…guE[.ÇXñ8ñre‚á.ca/\r™UŽq3ˆ0þ2Cd@6S,çr;T¿ñSC8%S?'T3ö18c8ÇS¨AL5F%?SJµ2IP˜±S-UF„6&0xR&¥Ä@:ɱ÷ˆ/Wpë÷^éw äÇ ‡†n¬‚ É8YlÙ ˜ ã”Y@Q}˜g8ˆ“mÈã8Ôà|ì%½“Z±˜j'ñá9!¡L¡¦c'±µw{§Ø:ª³' \®çZôЀ’;§Ö%ÉÅ£§ŒzÐU)Ñå ÓÅ<àæ ÖóxË —w=}ø}àO´7å…~燼¹rÔ’ tçWw6Püö •l†ý\¤”„€V ee†`F3”H³uS˜WÖ3=C4ù8MÐ@JfD0¹Æ(UÍ¡t60“-D£1°aŸ>À1¦Q1©3Ôb?÷bÿ/$’34D ÅñCÄB'¦Áš±RótDTaA8^PußÁqV°„OÆ`Þé.AFYÖpúáPleZÔ„àr…l¡Žÿ‘fÖÂfÿT£ægo†G» ÓHGb&RgfØnÔØg¯‡Fš"O¡¤¶Ð=±"nèôm«òHà¦]@2I‡¸)šâi× mÌGmN¢aº UÂ%$q‰®´J—ØJËD&ŸóJŠ¸Ô˜¥¸:¥Èk¿æ:½`bkÍDlÈ&¦¨´©d9ÒT‹Á“ šä¥Ñ§‹½èiÇP FÒmˆˆ¥’FŒá6nQJnIanŒæ*Í>&>î&O'‡ðÅ+hœ FZo°À†¿‚†ò~Ç™œñcùf£'÷?]ÈPfÕeXfÞ©…à W¢íqQÔ“ FETTuù2a„d'U¡ÏÑRÚ’ï¹C9p0òéR*'d·a´ÁC>·b)0!;./bb/bb19c/www/gifs-bb13/bkg-yellow.gif0100644002342100007640000000134407616533100015301 0ustar bbbbGIF89aæÿÿÿû¤õ§ ï¨è¯â«ß°ÜΊÆÂ~½{º|¶z´u°s­t«r¨s§p¤n¢lŸmi›h™k—e•f’g`ŽaŒ`‰^ˆ`…[„[[Y|WzVxTvQtPqNoNmKkKiJfIdFbE`B]A\?Z?X>U<T<R8P7N7L6J4I2G2F0D0B/A-?+>,=*;+:)8'7'5%4%3$1#0!/!- +*)('%$#"          !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs-bb13/bkg-red.gif0100644002342100007640000000133407616533100014537 0ustar bbbbGIF89aæÿÿÿûõ ï(è/â3ß6ÜÎƽº¶´°­«¨§¤¢Ÿ›™—•’ŽŒ‰ˆ…„|zxv t q o m k i f d b ` ] \ Z X U T R P N L JIGFDBA?>=;:8754310/-+*)('%$#"     ,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs-bb13/bkg-purple.gif0100644002342100007640000000134407616533100015275 0ustar bbbbGIF89aæÿÿÿÎûÒ õÎïÖèÑâÕß´ܯ΢ÆŸ›½›º›¶“´“°“­«¨Ž§Œ¤‡¢ŠŸ†„›…™—•’xyŽyŒw‰xˆq…s„rnl|lzhxfvetbqbo_m]k]iZfWdWbS`Q]N\NZNXKUJTFREPENCL@J>I?G<F<D:B8A6?7>5=5;3:1817.5.4-3+1)0)/(-%+%*$)#("' %$#"       !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs-bb13/bkg-green.gif0100644002342100007640000000134407616533100015066 0ustar bbbbGIF89aæÿÿÿsûpõ mïdè_â[ßdÜ]ÎZÆXÂV½TºR¶R´P°L­K«I¨I§H¤G¢EŸED›@™B—?•=’?<Ž;Œ:‰9ˆ8…8„654|3z1x2v1t0q-o.m-k,i)f*d)b)`&]'\&Z%X#U"T#R"P!NLJIGFDBA?>=;:8754310/-+*)('%$#"              !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs-bb13/bkg-clear.gif0100644002342100007640000000134407616533100015054 0ustar bbbbGIF89aæÿÿÿûûûõõõïïïèèèâââßßßÜÜÜÎÎÎÆÆƽ½½ººº¶¶¶´´´°°°­­­«««¨¨¨§§§¤¤¤¢¢¢ŸŸŸ›››™™™———•••’’’ŽŽŽŒŒŒ‰‰‰ˆˆˆ………„„„|||zzzxxxvvvtttqqqooommmkkkiiifffdddbbb```]]]\\\ZZZXXXUUUTTTRRRPPPNNNLLLJJJIIIGGGFFFDDDBBBAAA???>>>===;;;:::888777555444333111000///---+++***)))((('''%%%$$$###"""  !ù,ÿ€‚  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\\]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs-bb13/bkg-blue.gif0100644002342100007640000000133407616533100014714 0ustar bbbbGIF89aæÿÿÿ.ß+â'èï õ û ™ ‰ § ¢ Ÿ › • ’ Ž Œ ˆ … „  | z x t o¶­«¤—vqmkifÎƽº´°¨db`]XUTÜ\ZRPNLJIGFDB>=;:A?8754310/-+*)(%$#" '    ,ÿ€‚7)*+,-./ !" #$%&'(012389456:;<=>?@ABCHIDEFGJKLMNOPQRRSTUV\WXYZ[[]^_`abbcdefghijklmnnopqrstuûûtúÿü ô§O Á€ &ìw°¡B‡ !J”è¡E‡ 'ä—‘cćCŠÔøQdE“ž¬Ó1%K”$_2léò¢LŒ*1ŽäHÓbÏ7mmø$QC“*MJ³èÑ 9—> 2cG§O7B´*TfA¬%)Š•ªlØ­FɪE;ö'Ö«:AÏve»v*RªtcÞý*7®Â¢fó$Ût,K³ µ ¾‹7-Ó¾ûÂ…\÷há¡\ —äËxdÔœœf{YíJÇú;./bb/bb19c/www/gifs-bb13/bigbrother.gif0100644002342100007640000002301007616533100015346 0ustar bbbbGIF87a°¦³€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿ,°¦ÿÐÈsØ1ÕÃ69w}±]†©­ŒfY%‡da å™ €TNH˜%M²! <°„¤J“¥ÏYÍ"·SPÐ&ܘI˜ÆrpP^—J‚>D2*H=*R6462?)\[yY)68 =8h3'-"-skZ|²~{f0ˆ}yge+Á”?)¥2LÀ–AŸQÍ@‘Ê5Y‹ÚWY’’ Á­pin²p n|î!·v1­t0æ‚t“õh yÉKS,åhAFɤ*L>ââIE%Æ v‰ˆ’?Œ4ºÔ„€2KUªs¤X;c7gÍj‹e9\]#vÄ×k0ŒÅs¯\DhÛd¨XFѤe1b¶X"D¨Xº váLŠŒ ±hd9àu‹‘qd锓ÆX– ÔÅŠÌŠç^%£“C¨s‰tŸ)lØ{¨E‡…´ oM`.¿vztx]ÂAn[”µëꥬÛqß½yÕR.è²rá¥tòl+[2¡ËŠWÎBõ}03vÀ «¡¯h±{»ø¥–vÎmØ\^Äz1+aãFEטý©RAÿ;ÖMPVYÔÇÝ —=šw Q!‚524áXÖµñJ„¢”ç8HF…ù\ÖØ ‚ø ‡nøa,+–AŠè[LÐ]VÞƒ>GÒ|öt!Œfg#ý‰€ t$ ‡x^yˆÁzˆíøbö wˆpWA×_~rØX^’°Äq;8ö'—š” Ú•rV"I(hÈ‚þx`‹›òâxSŠ€JÌùc9Š2ÆàUŠRÈW†9¾E†u—ÁX‘l°dÂœµ †_X!i¦‡r]`•ó„ä!fb*¹ˆ,4–¨’ž=ÈA†ô§–W1½Zf†D"˜2™Ù‘gÒ –ÿo€–×fv0÷é³]!ê㶠NæÀ©Uê ¡ÐÝ Ù{rˆ×(Wo‰…'cµ‘Ë…2:œ'ѹr§!ëÙ#Žp©0šºK£>£õ„>ÿ“ôå°ú›á„æ‚ì ´ûL=c>K7â:n°—ð&:¼éÈ{(¸\ªŒ47µùëÚ\ÊÌ@•Èåøº‘Žx¢‚ jAf¯ëÚÏ —©g"_ë!šsØáÍ›;Ð,6óªúôJFvÂSJ$–¨Èô w[bÕÐñŸ8t0`ì vx•òÔˆozA<D)OLž`À=”ÿȯ Ò W("ÕK|Ù]ÖL’•É”,’‰ƒ)3Éhe2[•£xÁ9øÑYã'@<}­WZ‡^|ÈCúOŽ ¤"×ñÂ8àè-Àd"%ÉÉsÈq“°"]VŽQÎÍc~$å:D³«Ú5¾8‡.Î2’æ¬2ùH[Ì6B£ô$¸Ð†¦± ‚˜MùÍ—p#ˆNØ@ƒ ‚”'"ÌÀ0ù™PJæ:yLP?ÀâCu0Òt¦8G~ ^„cƒ† .2$(…'Â؃6™Q‰.lãÀ:aPÆ°ÌS>X‘•Ü¸—}|‡¡3ˆBÿ ŠÙÂ@ð”Rdà4èCCû’ŸÐš‡„OÑ*œaÍ2pCå§u³Ùa(Òt¤å‚êȇË|a‡_ £ ˆb£RÈ3+WøÇ vQ¨z"@P‚A¼*lã/çhÎrÆÖ™Ãû¸Cè<ÖÒ%xáÇT Ñ„ˆ"Y¥HÁ ”.f…ø’?|BŠkÐà Q€'pSƒÎpF#ÄzúRî²ñVP·Ùª"¤™â0lpˆ£¦Ä éTbðÕGZ(x”ßfòâJ¬4"@¨‚P ë¾Éú•'"]ðM¾ÀU6g‚ØÝôÉ ^+`z´VÐ@6üL‘Mÿ7!ñ²ø‘ æ0o3;n²‹­X"Lc YQÃ=k×¥N!"¨ö6²àõ—Ô‡¤u½U"[¡×ààÂ4|2ç–ÀÞâ M¨‡¥Æ‚t­Å®Sÿ¬lSɹ*(†·Zce06Èw¹Žý{WìBø8ˆ·°“êg`œ¥Ó¤5ÁÁ ådÅŽAƒö^-dØöÝ¡‚<Š …ÿ5ÃyÐã©D·ÈÁåÂ@þÿaÞð^ƒ±cþ§ÐüåDËZûí ,ëv¾¬ôÊ`>º è­h+`s¼û…¦4‘E€AàÅúgU^0HÕÅ:ªצ»èlžÁºlváúñ3G’›öââ_"{¿/(cFHú x”ÛìR rõð½V0hKíH”ÂåÕÆŽ=ß%d‚ ÁPÎJTTœhÂàø®V7]Ø?SÓV0ÙïU'{ëÚðk>¼ˆ§È4!G>h+á­";æï¥jYMè98ÐB­§ª<3’è[“ݶ=öÃÒ‹Îç 7ø#‰½yÕìa¦ÅYçü"lˆK?¿é͈.>êˆÿ$ì-¢#·q:÷hL·u8¦|Ô6IEí´yVE÷Lç±RØuÛ~ðdÅ€±7cfo¶–o»Pt<¡€³˜ô IB+ ñÅ–eœæyÕÅ|3htI·|f×{_¦)àg·RßVd§gð¤sšMíÄgh&`…V¸S7¤3Ï僡…[gWlš&L èi6iŽ·xæÆ]ò–xžWq50l=( lãUhZ$Ì ¢p])å‘wÿ•F§`¥Tñ–UßðyˆÐ yPf]Ð|©Öƒ ¨g!WªVv±&õOZU`Å D€Òÿ5D¥+ÕTÁt„-Flñ@wÖ¤X¨ àÖAvè_]g{“Ö&µ`·—÷¤]æ>ñÕA…ôÂÕO$U‚'wl˜iœ¶R´V„×_ÚôNg·ˆä—kÖf×ö‡™ùt!ŒD‡e&C¢"ZRö%4q]ŠµU»8YPihi^fjÁFL+ІøŠ^‡y…ågÖ YÄ `Ú5ZXÅ; —SÛ~R1/8vÈKg ze‰ßv ÐÇ6döƒD`¹µˆQð\Nõ³xƒö§tÓ¥‰s%IkÖV¥¤+¡)] NOµa…w—uãVZ1ÿpý%v1v6^¡XkÁµ`Öhì’°'t æ“gPU¦×74äm_¡}€“ž¡ ¸ÇGm](B(làpeà…Ð~…ÅNØÅu7ød^5s•˜^†$õz_O34"¾0u‰ð€O{ýåK‡fI^æaI˜áGM/wwdG yoCðr”s3WPh>À‚îÒ‚Úceµ r…SaõYƒ¹{^Õ—@GaåL7wsÀÆeÙøn=^A¶€דÇPŒ—ÍHgó¨Àr†òz°fWž´\}vmš7„¢õ‹øy’\Š@m„å™–h^bPÿvç'ÀiÐVL{à 0€)-REÁ)e~R~)n?Xw‡G‰S {Ò9|‰Pcµ¨]ÆqK·’s—W%wƒÛš†•fÆyeŽð[/!Õ<{tGð5K¶i™®è˜ —œçµháv€W@HõgÖgE8]:¦ ˜Px3ÕOdà’ }0äÝQgì88dæd GñY™†e‡’øõ´×hµ¨¤wŒø¥;×gšæ† 7m1ÕtFj:YyÈS(@r2Bc4ßÄEN÷OêbÓF È|L¦v•Á5š Wv½¦|‰åOáMÅ·]«•Ž“°2Ü£ ,ÿ# À1)b®†Skç Sé_Øôx•J]àÖ ‹ç`à]‡—‡·„U¢ ÷e‰e[˜ö“AFP÷Ä -! °-Ñ‘-­—Y¿X[sE8‰ŒO…'aÆçbŠ9‰hz&é†mw©u—ˆÔ9M”Z…€†VÄ…¬Êð5b¢‡óJuÄAå_ÉùhçG«Yrx‰¨&OkŠ]ˆÐRɦy^\W«åW7!~UÖuIxl–ŠuZM…h߈vEçucæ ηš)µZ7~ "aC?r&NÄ*FIg­6}d&§(|¸Xvéh‡Ÿ÷|×RŽ‰sËgO!‰ZËn\å¤ÙTe¶`»Y¡ 1R©B 5YäYT‘¬knð$˜mx‰Š¡—€™qÓÅ’ÄZ6÷‰¿ø¨äênÛhx‰à¶ù„V;Q$vãÙá±y¢ a :PuU’¥°…ß°g¾è·î·ZúeÒ ¡Š`¨Ÿ‹wâ _†ÿ¼CÁY´`"4ÎQgÖg:xxx{—hÙÐ_¯›g؈™;¼á[jS+¿ÚUµÄ¨•];¾ZRÕiµ +0»Œ›í°&•± JUDqš±Ç~\%Þyq¢]j›ÚGS†X’wz<ÉdñLêöbØ8¥zŒ‘ÄÐâƒÂoГuBRUÄAÚ—Ax¢vRIÈu~ñˆÕiFvÏP­äÊç©Udû¹Ž9¤–6«Ó=UB âtPm UŤZDl0ö¶Šé…Po[zûû‡ßzv‘fXN`9»,—]êÃÂÇò3""J”¡²Âð5 }Õ;›ÆïGÿU”º˜,¼Ž„fÀÔy¿‹QŽ|ÂXª6v£@Ë…–’‘FK´9šY UAÞØ æù‹5Œ¨“[S¹Pœ8’7q¦JRžˆÀÆ[º˜Í¯ÆªÎ¬/9² •ãE?Ai¶ ú¶<‘·yÄAјhhòª”Ãà–‚›Á•ÈX°ˆï„+G ÓÇAt%Kd¶å$Ф¥ôÔR|eœñO LkµŒ'¤Å UøUŸår–gýÅAgŵTgÁ²%Ô5eRb åÌÊbÏñŒzë§ÐLiÅE­¦m8%È[ƒUùÕÁ¡q¨Œ†F½Á$… ð _Sÿ$KIúª°Ë=y†/6G«…¡¿Ø*e»d–°Ó«¸]dÜ;Ïê1*§\V Ó·däÁ½µ ×qQ†A<ñªí%]xP™K©,ÃÓTEÓ k„uAf~Æ%eVýjå’É©2xÔwäE¢Ð÷µÓ~}±Æ Àa  Â$fÁñ²xÅŠ·È³[Xߨ!eÍA?³²Cå¤Sª4€"å×1ÖÙ¼™QcJ¥äj9,e'2k¼vc»Ç©rV¿-I ÂÅ ÇÍ(¾¢”~)¸”H«´¬FÔÌeEüÁn«Ó­bÙ¶ Øý‡€-ÆÁ×uqUÿŸ4€Q¬}YûäEeCᔕ-xm4&ÆH– ó*U®›Ã¥¬ÖçI gÃ}V…&dÿøZÒµQdÚ¥°{ êtß°“S&EY1æ„afÅÖ~MÄð¹Y{áK$p .ŽãÆv ‹¨ßVßÓˆ ¸í–ÇœIÜÑSp‚%meÐç4㌑1}ž‘½VÇ•^ûZ ©MØ~•OÉg ¡ na|‹d›åR…ma5àãCë5Þ-ð-–½PB„aXf`KjòPJ)žI5ÞÖyqK ov`ØRÏðmSç)ÛßÁÜ£½½‡y$Åç¥dE½ä)NâÔ'öÄ„þ‚ç,ÿeR†WÖY JñQäà؆ݖþ­Çž£Âj@õâÛ9Þl5À0$Û5çÿç›Ë’[‚ŸÀ÷‚Œø Ü` ‰Ô*ÚÆP¨2 >é ìŒËu¬·AK.håÁ£]SÔ¾oqÄÍÖKÌ€¾¤Á«n}¥~Â6NS&ÉÒµt40tHçÓ‘žÔ–Fk,̘yH¥h}¬b`CÑÓZàù†­VÍ»’mÆÌZíØ%R)¢C™Dbw”É‚îü­×7 ?«CI·ôºÞ üúv¹È`c[Ïp5\Ç¥¤´ Qœ2a±(rëÛ.£>Ðè­ÝRˆrrÿáìíÙ•žRE¡Cº¦FPÓ—ðÞ;(t†adtä$FG:E¥ÎÖ æ0¨…£!Kî tÇ4f a+… z ¥o[ÝŽÑ«ENè)HNßq>H\V*áP¿…”$Ïëç¤Pœ2¦½ðoéÙ­¾U(¨¤†£¾{Ø `[€¼°VI,âëV©ñèbÍ·†´N®< eN$žªJVâ_Ò£vyR!Lc]o9k‘ËAj²+ODL.Qo.îâÚ<ûŸ1S´:ÕñãmÞ<ç ¹ õûU…WF±¶§0–n%ÒIÝâ(ÿÂT†çG¦§–ÎW°†ÿ–ÓÁ9ð@¥+3R+ó‘Ô`H 5˜B€Î¢f¢ ¥ƒÀª2+Ï”(]ƒ)×BŠÃ@t9œƒ,—“Ý A¤©–«]•›#ÉP‹Ácv(“p?†6Ü”=§×«)¤™´=ƒ ÁcÎRIý2lÌ ³¡()¢  #¤ž#´,¬—0I¨Ë“¬+/$E°ÏO†¥§ÊJŒJʩ˸µ5¸:³K¾µ—‘@(ɘ³•œ„ž„ăÃV¢’²g©©ÉêÀš‚0®O!obƒM¬A§š2G½$Ž:¶ €À>•5›I>l9µ ¨*VlSZ1ÂäGF8 ôL5'0ÿžä™i‘£-80Êè¦Q‰hzœlù/¼6'È’Ça/*×XøSSÅIŒ{ )fpO$Ï ]­])6f³ðËÅ"çš¡£mÉHùBxáÇM˜&Ziâ…) jQÃe»™ñX2„D€\Q¨ö“ tDÚYdgP™ÅrÓËŒb¯rуC¼|}` €aÎÊ—/føqÙD»@ó8ÛyРŽ¹>Ü.µ1𣪼y¶9Ú£pn“¬#E­T¬~ze þÁ‚Êô)C­æ“ 9£*£"„} Órƒ±Ã$ölÔÒ©öl`|ÌÖ‚wÚ½($@Nñÿ3~ƒÈ]=ÑGn~ÔÀÄßL(¢¡JŒùIÁ/ÌÃáï†âœ&B¡”´Ù¦“Ž¶Á­Œ‚‰Æ·$hÂ6Z8Á è¥ÄIZJ©Šâ4€Q“&ø“O‹óT3­Á ró g&l% `†a ”!4br”g8¢'Êi,LÚi›xhGþª,ñ¤ k8©·3ä"c`»²Ò?Ùˆt¨¦™˜ÂíRÌÁ»˜,ŒñZq‰Æv\ÜO}|©r«æ(RB÷‚¡P‹Ó¾ˆS™Fvq£øL†€2,CˆPp+¯†G-3a2…ž.É|%ºÏ5òŸgy%— ÐÿQn†+âRæºe š±,L‰°¡iBbÂP>9¤˜,Ò9e…’Â(468«ˆ} ÈÏËáÀ•¥¹8þóQÿö¸˜%,¡DP} ;éòG<(ƒ¹<öúl¶$½”ãÕrç¢>ã2ÐBFá)WƒñfÅ Þ‚âô§ì~ü.)IF´ï>©kQžMEyéè Ñ@ºlQ 4{G©_‚¤ìƒÖ`¨BØÜ@)@AžY†Ï? 3B-iTèø†ÜxÎlÑ9“¼âˆÀ™‰:Ž~èù7,¸tŽ à bI¥´7Nl“Õ›^cTöbj’–À0Ä"»1ÂñQõÿ‚Ùa•¾âÇžÈ$§L} í9¡/6¹ @¿9N>L¬ðH•2š(Eb sÀ¶ ’;¥R%3Ûp…,­®Ùïŵ"û€ ˆ7{ŸUhŒŠrÊ»»Ÿ8:Œ©€0 ÃTXgêÜ&MÇ¡’tBú‰IKãÛ–@ ¸’h àþ—¸ñä× ŽáØieâ,°Û†{X„〱¸fA+&ßCèr2?pÅÁKÄ[fê+!¥bz˜~€÷„âàv+\ßî–ˆ¥=¥Yi„6$t—Âüi«ˆ] €…+éC ˜\¤’pFœaƒ&Ч†õ¹¢6b—ü’c$.ÿ S^èß\F$Rh"SêØZ(„ŠtÄI2¼¬ê1°`Lrq[ƒ¢J4‡ŠL*LUº]†¶ 1ÚÏÐW\JóGWˆ{‚kŠâ^"º¹d4X‰ Æ^R±U© ž™ÔeÌ“^ Q _©ÑÌ»8¢¤dÊ»šSc+‚qãc]Ç@ÀY¨"šÈKhzV¢~8êKäÀÐYHgxÒ‘ë<Œ!Š2˜ Ž^ðc*2N¸2Ͼ“úLÀÓp¶Ë80’¨Š]â¢-k2'•%$$°½ÄÉe檶¨6( ˆhôRgàiÌ|p†Ñïk‰–Ö‡sù¬îíJWÂ¥èôc49Y$UÆA‰Úà0œ9,­Ñ*E`3æó!f—x.÷ù’æàgbTNϬh9“õöWü_V3J<ó(³Õ²-YòD•ÏѤ¬TrY{¢ kŠs÷墥"›>k[ÑbfιDl…6ËØÚg Ø ñÙ“ÿ•# „l6,oÙ‡DsѯÐUŽ¬¿?›œƒ¿ä1†ï«ýAÌZ©MwÊW!œ`’ÇD±¹ÞJ·–´"ó<þL‡Ýó8Yÿx²û¸Oy‡›I¥@ˆ“ÊOñ‹o$ÃÚ‹~ƒ«©©•‹¶§#@v À^(¿tƒz’ƒzس'š˜8¢ŸÌb9†â’¼æƒ ‘j/³«±™(:µ²…60¯žÊÁø›¬k6Hb¢ÐÀ<ÌP/™h£âH̸Œ”(Ýi1´ÉŒâ‘Ý0‚ü˹ºË·…A. z9xx,Xp ¬c¢ÿߘFQ‚„«\™À= à"»±Ê² ÂD5KD˜(œÄé˜Èó¬~“«é¯çÀÄ“@o£A𛄛B3þ€ÃËš™i+5[:ãù¬2Œ7LÜ›ñº©‘¶«‘˜r¤Ùë¦ñöÉkwàŒu‘…߃9kx”Ÿã­*Y»³Ê¤³¥ â±–ã ~†…C‹Nœù¹ÀÇ9ÓA¦}«Gú« k( šÀÉ[49ÊŠ <ÝIŽË€NœŒb¤Ê"Þ02¯ ªºYó¬³a—[3ä¾óŒËJ1x2Ç€#•`™Ð¡:>cœØ-ÿ{Œ«ë ñ*4E Ä"i—tœYj6ç¦Eɤ¡‘Œvè)É°ºwr+Y»(bšŒrŠÂoË8àQ Kº±H› !è•«MLŸ¬ÌA/`¢ z¬¦*›Àä µd:3ðƒ¯d¤…ä «$²D4ƒ;Mb¦Œ§2<‡VzœÌ!ŽUƒ—eÜBÞºjÌ Tƒ”]¬±++¹áè [å’M&L0Ȳ ”h; ȲîüEÑÆqkŸ*“ ö ¡â9”@ ÿqã4Òc8d;,dù/ø¹“ü–r‡|¯(4ÈʨŸ©Â9T4‘#/Û‚¾ƒ*“@Y9§3*%É‹ÅÒæ ›f\˜ˆ:Ç¥Fo"ž2)F{¿}tw°Ç¶PÛ³'€·K@´´X‰=¢Ž«30‚ Kø8¹ ’2r ""›Ÿ‘ÌRÛpÉÐºÑ ùLG ²' É‚“Ll ¸‘Nê á{B{Qùˆ¬Úr, ºG)F§»Ï ¢ÆáK.3kEÌ€';ÜÓ µŒÂã;Ž/¥¨ŒÎ'd)Ä€—$7È @xÂE²H#Ù¡É!*—˜‚ßâ5¥”ú¬8í¸Æ¸ÿ/ñŠ‰P`B[S#a³ zÛJ­B°(XR9’±’ÙŠP3\U\ê8²²¸µ5©=+TO €¯ —¶ Õ!BRÚ¨€9 *ã 3Á¤ò®Û4¢³˜¡:®3]ÔV8°§r±ø™ÁûË:PµÀ/,Ô¶Ó€ßP tÑ.TÐåP2뻶î$šaü![’ðã!AÁ¬õKñp›b'sµ¸ÃÉ 6HŠ«Ú¼¨u²†wƒ,-Á )ÃÍYó)%Z> /ÆÜCÛ6Æm´”ÌÖ왑¶P•ÒOPølXš]Ÿ=„<û©3Í{ ¡¤Òo»AûȤ½Ø€s䬦„›eš§ËJù*9 ¬(æÃ)WЊ9tRvU9¥JGoKC†i¾¤ò–£‚¦,@ÝyRÂJXOšxm‰ó1ã¬K:‰Qœ¥¥¢¬:P‰U4+ ²\c–ú­#þ+E ˤï Úañ­øû>>999777222111000"""  !ù ,k@ÿ@…pH,ȤrÉl:¦ àó4º* Du[ŒN™^*WVT¤T×ý!h\Š«”uMNŠ’µ2pD+XZfR*qg.W.R'WxrB^ *ŠRz c§¨©ªIeC“jR ˜pq‡IW¦‡YBg BRrµ­q¯Œšµ !Ð,ÃR «ÚHˆÛÞßàᨠ_§'gâGäæJgxce.gXƒ ÷å r$$˜©H‹r½\$0ˆà‚3dS ÂD{h´pF ¦8Vp@ÐÔ‹ D4€¤ŒŽ!Qû«YD¾Ù•P0ÿ)C¢xäóÙ gV|J&ãÏ &¢FÍÀ JFÔθð2)н ( ʼnÔmÏuÝ[sÆí÷àÒ$‹Ó°(gxÅ‘s˜uª>L¸°áÈ«H@€@TbT‹VÆÅE>„)#‰ïï–2'ø¨¯‚XFÀ¡5;Œ1 I@]ÆUc‡þøàôI¬ùò€jÏŽÀcÛ€ лåUEر(Á»‡K7.ÂóÚ/BÐR;Ù˜°hbw(€€8l} Zû ØÖEF*Hp\µGL>P]ZºT WN?ÔÈ¡h |ĉKYÊ BÚÈfg s¢"{E‚Eí$aUbá¤PÇ}+žAÁ :¥À5QF ¤%8 i ¡$Œ¶G”£–|ØÌ3 R{ `ðâG÷tŤ€€¤0!Ø!§ŠœF‹FœÁ^Ò¼…'ºÌéçŸ=QV¡ˆ&ºM;./bb/bb19c/www/gifs-bb13/bbnav3.gif0100644002342100007640000000101207616533100014370 0ustar bbbbGIF89a'Õ6ÿÿÿùùùïïïíííåååáááßßßÙÙÙÖÖÖÏÏÏÌÌÌÉÉÉ¿¿¿½½½¸¸¸´´´±±±¯¯¯©©©¤¤¤ŸŸŸ˜˜˜ŒŒŒ„„„€€€|||xxxpppkkkhhhccc```WWWTTTPPPOOOHHHCCC@@@???888000...&&& !ù6,'@ÿ@›pH,QH”ÌÈlYšÓ£ÑHVÌ‚`é$6 ͪ€bÒ*‘n7 F©ÆÔê•Eã!ºª.D n!xD, aUdM†B/XDbD%\‘—U",,'nžŸB)0D-Uišo¬j`­C4¸j,ŠL˜eȆ, ÈŒÊE»x”CÉB(#¿äåM2snëæC2"M, ”–ä›D* è#r"@¥_á¦IÓ`Ø ŽÒA¡‘M²2„† Šu™Œ|iflыܘ©¡QÀá%ia|áy„ÒF7#l4 '#7‰x ÷«Ä@n0…Ìø !þ¢Þ˜0B‚A>ðŒœ‚AT½OA;./bb/bb19c/www/gifs-bb13/bbnav2.gif0100644002342100007640000000071207616533100014375 0ustar bbbbGIF89a'Õ.ÿÿÿùùùïïïíííáááßßßÖÖÖÏÏÏÉÉÉÁÁÁ¿¿¿½½½¸¸¸±±±¯¯¯¤¤¤ŸŸŸ˜˜˜”””ŒŒŒ€€€qqqppplllkkkgggddd```WWWTTTPPPHHHCCC@@@<<<;;;000... !ù.,'@ç@—pH,Èä©Âlª’DV0 æhd²••WÙ,›+¥ññÓ8»+ÀAì©ïx¤‡I0I+fvy# ‘(yDnI œtcLweŸ•§je P-|”^BL‘º„g¨ÀÀ*+Å ¬À& oL‘ÊjÏ'ÙšLœs©g^RL cÛL]c"Màw!Ô©³Á÷ø•¹j+ è®Bì Pg°@ª( ˆUá‹ $psá(†ÏDåcR‹1A;./bb/bb19c/www/gifs-bb13/bbnav1.gif0100644002342100007640000000102707616533100014374 0ustar bbbbGIF89a'Õ8ÿÿÿùùùïïïíííßßßÖÖÖÑÑÑÏÏÏÌÌÌÉÉÉÁÁÁ¿¿¿½½½±±±¯¯¯­­­¬¬¬¨¨¨¤¤¤ŸŸŸ˜˜˜”””ŒŒŒ‡‡‡€€€xxxtttpppkkkiiihhh```WWWPPPOOOHHHCCC@@@???<<<888000...###  !ù8,'@ÿ@œpH,à Iœ,0š¨TªŽJDi8ˆ˜ÃÏ´Ášq¤€ÊhÊö€ßENqG./!ëþ`$3€!8$p(%lR‹F2 ypk œ1u H3d¡8 PQR-­0B«¡HK`_8*B¯¸»S +¸3uQŸbQkSÛ'8'$¦äåæE ç8¾8",C",,Þ‘ &\*b¢üI£C 60( T6N.Niøpã˜À  ¢;Ò-ŠÕÞ<Ó°ÈÈ(À¼€ ¡“‚$ÜéÔ€‹†GMÑ…c,4ò¢eœrF‡) bqª4îM7 O¢u¢°`Ù/©¸Øõ-‹†!Q>‰¡Á שÅ;./bb/bb19c/www/gifs-bb13/bblogo.gif0100644002342100007640000002316407616533100014475 0ustar bbbbGIF89aX‚333fff™™™ÌÌÌÿÿÿ!ÿ NETSCAPE2.0!ù,XûXºÜþ0ÊI#¨8ë=Á-A„£HžfZŠkè–/ ¿´k÷‹žBxÀ pH 9ÈJ¨WøŸP“™¬>FÌt+ÔÁ 1¬šåg:|Ò·ÛÐ Æ3C 3Xk@L|b Fc|bv‰M"j ~ fz:‡ b_’ox}_g|›__“– >A!¡ŸeŽngwFX~|pÄ®¯ N²@a¶bÏy@f:pˆÒ½Ø»È>v™Ú#ÏϼNºÌ®|¦Š‰ªÞ®ÁàÉLéÎüÒmçR”åÉ&ÍO$zÇ^Åj„ß9k³–éÉŽ0SÚŒûáÂY®so‚43÷#³E}L»Ž‡ N¼nAlHrÒDIåÚUbá2¡%Ž8†™b†¦CW©hQ¢Ç;Ej‰ù˜'Ô>s‡0‚»ÔöÔ·iPuÚ±eJâ¹#,7 DYVƒËeÅbF;DÕ-\m¿&5+#í;`Åô!¦ÈZ›fÔ‘jÔgå²CyaeÊ’‹íš˜Øê¨tƬéPÆðòÖ´šÝ6jMoŒ“ÐR:~Ðb°o•õ Tåêl^1Oe+ñŽe°ƒ¿iœ‡0¤Åeïê¾.e¹V^!»VïF] ï”㑳ˆÞD\ëë±ãÛrÙ㞸ƒ¬f…OGŒz{ÿÆí¢ËH#ñMc”‚Ö vÃY+†Á_=uz’dáM4Y¥XC%å2Je’Ø1s0§r™¤((íéÃ…HBXw>I8ãŽGàˆÄ]<)äDiä‘Hî˜!ù ,XûH£ÔÛÌÁHÙºëlûþžLÑcJ%úl[¹pÌã0€ëùî÷@ž€°ȤrÉ\ÒštJ­R‹Ó3YqO§TÉöTXÏhÁ-«@¼­%ÿrê'™†›t8x|?Rkn6Co^wv$ae•|P;pCjxC‡F #‡£j• £4\a‘\y5QRjœ¸9œµY €¡¨¿—‹)rtP´P8ºŸ¸4˜V­ÉÁêå> iõIXëg=\7Œ²T÷í®V¥àèAoPZ•¹ÑƒãOðŽ€ê¸fü;")䃖¡ì$Ìq)nS1²4´âÛÿJ‡r»úÂHaòRqlʼágÕ¾t;Ú:£îv\^pùÊƪÏqUs_u‘ÏKgRúÝZÄVZ±HÔÛÖx¢h­ò£‘Á¿¿‰ú(à€XÏ ˜à‚ 2ØQƒL%ø „’ `Va†vè!„Bl(á3æ¨ ‚ÀTÓÝŠx †Þu/&£ƒ#>ˆá‰!rÈà3®Ø‰@¾Fcˆa5ˆ¤’WIb’PFÉâ«(I^w)ªxá“AæÌ”¢d)_–9f™Tú8Þ/XšI"0@f'$‹OºÉ&š.z‰¦|æW¥;¦IC!ù ,Xû8²Ü.ÊEH©ºvá¹ï`0AižhªšOë¾p,`ßx®ß&.U¿È”)b6 o–,Jg *:ݶÀDQ:5_aå8±Õn¤éâ´v>£QôlWó’Dqx ™âO+,YLj=u\fY bDH4”Tl;o)Œo€#Uu”`d||3J†PS~;)kx=jT\=#¨¨¥zŸ,*hŸ ÂµZo»²Y \,EÒ`Ì K˜U¬ØLŸÑÈiSŽ—ÙpP@f”(ØTð®Â”X›M†Ÿ²¯‡÷#ùªs\å#‡ï˜r’U»©Ü­wÏ Åu[’ŠzÈ­žEïSÏåéñúMIø]ø9ƒI`©;ÝB)¹öD‰±[J5$bëO¡‹3ûjlrf£GŽº>fÌÆO¤IŒ˜Âá3¹êäHP6\ÊÑJ‘§BάxÑJwr áŘ ¯ª\³ÇÈ3Ÿ’¬˜ gN“ÄB’5´‘ˆ¾‘¶@ ¦o¹¥óåìoéh•-ôÐ"·#¤¶šÅ­°xLR5Øš¢™´$ï]Hž…|3ìV]—<6¡ÅC'osáÌ-1;3L÷WËcajé)-¼Ê)Y§ôÌ t°X³gûY»++ßcÞ¬¹2ñ§zW®Œ9´nNõ.ò Í`=ÃaËóµ…T^Óm3Ì7ÐVé@7 ìgcУ_ë ƦÎ*Vè•&6]Ùò¼îÌÿºt‡½5…D€&ˆQí]”‚F’„Vø_!ù ,XûXºÜþ0ÊI#¨8ë=Á-Žb9†fJ®*Ѳ°Ç¢§\®ïKhƒ¼ A0jjœ3–LÂO¹Ñ Ê†@(à$~aÁÍ:ô^¹ßžxÈb§Â³½“¥6xx.dT…I|OŒrdj vO]˜d!v‘…t’@‡•v§ve8MšNa|€{8”BMBˆz€›_«6— ”D¨H´¶ ¢Š‹ «Äw7 ¹CzªÙ7³‰“•È£áWÙ«•aV6¹ÇwíY?ß¿qÝÏÁâ×Ö‡JÁ€ý#†Xo„tc¦c”%äòéàóp‰3C3ûjÜh( /ŽcÉÈßÈ“ §¡ †²Ê_ÊÄØ®–6™¨>Î\†#–+5Ä „4c< ƒ£,leN-†‰NV>–A³‹ß¾JÁD… 1:¹q-¡MMÄ-КëF5×iÂûíÊ4·ÓŠäü 0v\]V²ÙíãEC„1vî‹d›MþÞœfÓ  Î %G+lhk®@|/s¹Ìr2mšë‚ëÌ6[—¢gsN$ûó”loÅpmfÏAØà(ãMM0ÊÚT»ÚÍó·¡Ô´ ¶âtà3¨¬5­üùvô=r©›¾”‘ B7âTkèq®^/†g9MŸþA@û­SZo;h Lb°ñM=èàƒ>10Ti³@há…°è„ᆢ”!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ¢j»ªc,†%Ax Áí|¯ƒ·Ï Ç!†DWø%1@à™ 1š ˜!àæ6 HÍA€›Ó»…-Rr3™éçÍAzz6‚‚fXV‹‚jMA\ x?ZS’!œ–†CsKvˆšqxšxg:QŸ„‰— :f­UA9E‰RMy¡b‡®·¯G°© Š˜ÇtWE ³ ‰ŸŠxŸÞ †ѽº§Ìz×­kZ8uÎyð]|¼ÓâÁ³¯ êpËóã2‚Öd  CŽ9` ¨(“(ñY‰}(ûRÑèÇ CJY#²ä“%ù@ÉRd6fÿX6l ÒbGš4=ásEóÈ0œ} ÞÌÄÐV™I6fqQsô•-o‚¡+S¬-]êH¥SJ­Ã9‰f£Ø¶f²J˜£Ö±‚3Eñ…öMšº»•7Ú–—n_šÊX'[Þ1ƒÝ¶Ú ñ'Gƒ?1aÈ3¯äxó|¹SK1¿˜‰Ib÷áçW¼f¡•vûöòLÍ…¥aî-Š[Éœ9+Š}3G¤˜Ô1…DJÀxê$ Í¿)Øð¿m Ç‡ú^^X«¸kW‚ÓÀ` ¸›;0 ì«% ƒØ(”£©Qô3WÂYù^«¨PSÅ׎îØÅP&Hn|†Ô F(áGŸÔç?f¨áH?mèá‡-%!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ®j‹º*ë)gßøB3˜oƒÁ­–!†zÄf(‹ÌOR3¢ "($X¡@\®´ª7P³ ¼Ï[#ðˆQ…'h÷Ä=ww }…S"H€N;{qW uFVz!™q!<—sGr€hu¬«vX„N•MgbX=~´¤‰yebve}]u€¯³wU`¦œ5·p‹DÇ Â³F~u³Ü ’ºb¼Š§­Ã¯=NU3Q­5MB¸á‡Ä—¥”¿ŽÝ[E›ºjȼ¤Úqæ›Ux¨ý#wÃÛ“‹æhû\Üsñ¢3b€BŠI²ä™’(EžL™Ü–0Y^»·.¦.6Cf™³ç=HúpÂ#Ìç$$*[±a‚'أǮ@ ³ÇÊC/ÇBE]÷Å Í+æêy©RôÐD‘s"Ós5e—h-8äĬ£N Ú8q¥‡ÐœWíü£®Œª†•.ÅÑ;³“™B¢Dv§ØêdÇÕøWö#a¼L9]kSxí]ÒÛÍÔW…'iÒ³>X£%ølHÅMDWÂŒ×ôMÀ¬ÝÝÄ­‹ æØ«Wûñõ™F:"³$ƒxÓ¤ ô ºýl—ÛZê~Šô6±Ø€jq„õ®2̶løçu2=qK”uIè¶"6‹9õaÕ¢CÕ½KXDщBžxPk´-WžQf˜jðt”*i8RY"¢4‹fwÔ6C‰,¶X ‰.Æ(cL !ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ¢j»nLz ÁÝx¾ˆ4¨sœ-¨ õl¿ÌHfxäfBWÅ`[ P€™‰^l`æ? sîyÞ`ÁÃ/Ðé]||cR0GAŒK~…KU‘z~_M|^z{4¡>—oZƒD–VA–d6KM~s„£˜6cDO“5„LLq‚–´t››P …µqE¹†‡ ° „´H“Ÿ´Ì ˆÓ¼Ñ>‹ ’=˘]M“¡–6‹åùQ4´&œê"GßpZøàÒÖç%`¸­YÖFC9TNÆû9Ù¨[Ž;7 %¨¤É“()¥\)hK”A¼œ™’›«/4§ÁÊ)¨#ÏŸÇpáyÅåÏ‘%+áš%†./tŠbÑ7«F«0"`UrU‰×—¥ƒ`X©W(W½1qFVkž&„ 1ªâgŒ\$™0ÅIû¥V;€®" ¦²Ó§  {ˆDôƒXg³L¨É<6™bN{!^[Ì&¤‚“çgh`¶º–}cÚóÌ:5Óú°­–'³%Ï^- $êØ6{¯Ö):öÐÙž=¿ó÷Ϧ´L}moáiâÂd­Io¶Tý¹4ؤ…%>v-w ÝeU \rV"!56®zv¯.Mc’uÅcM(ˆL ‘Œw|àD2-4XZ2üm¢œ¿Ô…®4xÄ Æ´”!9õR'k‘XÖ?¶è¢I`˜øâŒ4•!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ®j‹–®¹z ÁÝx¾ êœÎ&ÀØ@½Ïˆ̌ȷÜ@‹BaR¡¶KQ!låsA0Ý„|Z3x|žÁýYOz.utO uUSJEwPˆ{ON ˆ“”ˆN<„‘[oq†cN˜EN—Dƒ“|‚lx6u«Š{5§ ¼~ Ÿ\G½±[Pu²¥aJ4¨IÂG³ ‡P?Ós^¶5Ù[¼·cRÁ᎚¼íkègW¤I¢èBÆ›TÖ“°Qá0Ë™M ±!Gƒ@Á<èxƒ¸&À/ £Tû »vÒ6ÅüàHŒÞ£av”¼&a‘6&y¢ÈDò¯Í›8sÒɳСž:3J4§·X°Š¦³¤”Y;?M•Þé³ÆšÕœ£æ9Õ¦) ü±ÇS§³LµápΈYž^™ö‰¥°˜˜öSµ%±Ï òúBÃã¥Iu¦Û²ŒËÈLÑï;É“Óš„ô#qR‘$DÀQ•t MÌvžÎ|¢¨ïΘtç~*û—˜F&thÀmþüaÓmªÝêõTœ­ãz£$êœ^ÞÆ?°>½ÖÑZÒ}kfVµ–ñ£Ù/Wx«XºOàÉ.'Âø®b®E/¶R ÁNkRÕ° ÝüD2Z gÝ-Z¨N›Á>ã|ä€lB1’´á454‹_%c‡ªdâ|Ô”øŒ]dXv‡K jåâ‹=Y4ÀB]é×â8úc JÉF”abå¸:0i¤Mtøxä’Lº˜!ù ,XûXºÜþ0ÊI#¨8ë=Á-ŽbIžfŠ¢j»®KžBpx®/a î@Ç B„4"ß0XLLï³dÒU«';I~ç`ôyO €õ¸ ìõ³pu·›©m"¶ƒ¯lOub`b7lpvdtj‚[i`]’ ”ŠNžj7NP‹kzxl˜RW{b q€rdWC¥4‰¹¥6g¹Àn\0Jº>š——[¿¡¦6°«X‹®ªÙ³§ÖÙ vEnŠÑWSCWbœ•É}î’C£ }t}Åk´Å:à6afsü1Bd¡q>Bùqtâ7]ªûÃq&J/ÉI²¤É“(OnKÉr$-2ŸZ^ë#s‹Æš81²yù2'J‰ ø”d Â'£ŠÄ1b´€57Š” QîÉP2›ìÁÜäÅj‘¡‚ùd5æMhÏ¢RsË¿@ׂ 0<6ÂeYphB H½OXJ‚jY‹5†B†‚B~†ˆU”]^”q‹[ƒ™X_”¡¢N¥”c[…;V‹ –®cªFj•Š”i• N™T‡[4X¸•ºI[F¥ƒNÆ–Çýq‰µ³·ÜN Äݽ‹Š¬Æ£ÈßóŠkÍ£ž<Ü‘#J°n–,™D²wÍ:>œzúÀMa¸‚êû‘ T&¡zìò¶OB;}|q£’娔/­ˆøÂऎ”'Å5ÐG)‘ÏŸ@ƒ Jth‹*]Ê´i röœ:F£Ô¡<¯:íc¨j$­Ar ô*I¥HÔÎJ{61k»ŒVíÌW³lî¾%k÷)Éde€¥¦\(‚“Ԕ˘âòì<ª)J%=ZòÖŒQð­ð(9œ'1åÇ«ãE‰‹Q°:žѪ1! Wð·(ÑúRM3˜éÜgºl\ƒMTÒlŠWùû—íѹE Œæèot‚ bçÌèIO„9Õd=4pÔsåÑÉÌKœèú戊‰³è#YÙcS_+A½‹ç¯5b^5¾Íe è1Üm\T£Pu¨•‚QÑEJ¸YUÙW29fÚ5Îq§Ü~à”×Ñxm bÖUlµ¢‹/¦Ø '`Õhã8æ¨c!ùÈ,XûXºÜþ0ÊI#¨8ë=Á-A„£HžfZ®(«¶ð+»«é)„§ï|ïÿÀ p¸ Ý 9¢rÉlòDÇsJ­êFÇd0 °ú ê 4~´@nÁÛ ªdú‘þ‚A|íäu‚†‚~…`o}z€~…ƒzch=Xgw` o ‚–†]8Ÿ`Rj ‚ž } —j‚j‹ÇÊ\`¹ÇÙ£Î]G‰º~rÊsvµ=ؤk¡Çjqqº‚õíä|ÙnéÒ³nT™iëxX›÷¡Ñ/O9¬«Ç˘€… Ëá¹iÇ.á„v0!à©#.]Š£Î_˜TÍàÛsqX˜ÞáÔ±„Ƹ`£ineŽ_ÆàéfSYEBT후°N´uÈ«`Ã^Ñ9U¬=]§ÐÚivŠ‚FVè°dsHÑŽ<̬ZET‡M&xlL½ÇJ^1—pÅH;,¦”d ªõP²ß¯W)Ê,p›ÄpÞü’el™çPÊÜøLÚËÚ²M4KªnÁìb|/G!HÌ[öÀyrH 1•¿lÝZ6èJ˾•ç*ÎÒ6ÞÞêÒn`ßν»w !ù ,XûH£ÔÜËÅ¥£ß™ù¶à²ß•™¢j˾kì:9 ä»Îÿ¾`o$ ‹È£Ò8jgmJ­Z¯Ø¬vËÞ ß®xL.Wà7 0oR·  C´]cš‹ïø|<57q:~}‚|‰qWh6jW†‚ ‚sjl$ ‚pƒ¤"ts&ZvX¥lj‡˜9¯ ¶O =¯´£¦ž=£–89a°R ”UŸ5Í›˜:pl#¡œmpÍPÔ"Ö5âu”Ê•»ƒÚÔµ"³"`œ_´{êN×۪ǑÉtVœì!vCÒª'«Aë¯p¥ÞÅ+—F #+ÜûdÙqqPG@]$EÑH²¤;üLªô‚C¥È”$ é ’çbÆŒ±¹4÷Ïä A–*ì°WŠá+“/—!eWÐ;YN‡Žøuã£WJ.Üõo—µÔ…ù…4Lé¾ê”¥é±£8K¢Tª•8b_¥D Í$¹þè®Äw0;†+nı±ãÇDž,™reÇ>8f¾Yx°eÈGxlμùrfg3 ò”õjF©š ”ÐjÖ¦5ë&}ÙÎÚÎrb¡ [µpξGcÖͼ¹ïÖœ;Æ…þÚuãÒ±kn^º4j›®sR·­=¸pñ±­Û\ïÛüñÆÏe¿†žxz÷àãßÆÏ~?î@éÝ—ØvˆÛc5$!ù ,Xû8²Ü­.>É ½Òâ `(Ždižhª† @n,Ïtmßx®ËBç)º@kGüùŠ2¡7„Õ@—²×JAÒ%•ãâB©ÕïË`úÊ5¯``ìöÊpÝ)sÕ˪pð­mMIkYZ=]| . aZ|{1ŽJrK@7Ck˜4šQS\™Ž¥‡?Rs‡£‡ž{~f‚H¶·¸i˜h¹½9¤¾¨N¾]}c™V™¬XtÄŠˆŸÄÎvlˆdmÀ½Ò¾¦J/Ÿ¦£YÏgµÜÖ¡×ÈŠÖ ÖŠGܘ‘èúû1X?  H° À5"È¡Cƒ#ôÄFÆ‹3ûjÜ ?Z )> ¤É’(Mâ[—¤Ÿ=—/Y) eÊ›'sZè˜ËŽÂ)BõB%‘Dè\Š“ÏJi–„Hõ¦´v¨XiÝÕ”iN®y¦BQÚWUÀåÙÕÉkהݬ*}ye¬²u—=º­é[•`çN%z„‹JXêïk·žž&#©O20`°ÈK(òÍ€~ijx‚žzßL–c×îŸvýDûÉÔ¦”BU[Ç¢UY°ážzp³«¦'¢Õç»,Z§M=·ÎSM„¸|N¯ÛíB^¾çßéy}zq{…w„ƒŠŒ‹Žu‚‹~ƒ‰‚‰•…„žŸ ¡¢£Ÿž¦¦¨ ¨««§°¢ª©´¡œžnZ:–‘˜—w©œz¹¦ ˜ͽš™¾Œ|Å$Ϧ1 ÏÚ˦|ÚÔÀ†ê”ɈÆÄzèÑøôˆùz$]F‰ ´L¸%„ð Z+ÏNqcS˜~èûp1‰]0J°Å‰b8“âL–Gò_¹< B 3Î<_AþG›*”ŠbÒ“=—úd¦»Isߣ9QûTl(J‡&¹ÄĪ©;q›,Ì·)uÍ-¤ãÖÂE*](ÖEãÀÙjq¤=Éúl á㊟8ó¸? ç²çoAø¸»Û,OëÍ«_Ͼ½{epüJMÓøóßãú£¡ï!ÝÆ•GgöÞNÔܲH`1‚  :ß]ö'H‚‡0(ƒ}aMBÀcÛ°Ll‚´0 7‘$Ú‡ã, â[ˆ# *¾q§â) |pM(C.ã|@À‹>Åxš¿9% 0ÈZñä(ÐvðÄôR“OÂ@Ž%ðà܃l'A9’| ‚s–T@7%\0ÒØ7Ž—ÀUøši¹æ’9Ò†§l8ÕV¡w§IB‚ˆ¦XlŠöÑ^”ÇœT…×OB*)]¹%•pÚ§…’Â3€…°°i"e†âÀ8(øŽÖ]Êé®Â*ë’YZ07ºŒ¡7|C*‰Ú @( ø¨¯í ç)Ô²7„ ,à£.Tëí·à†;H ;./bb/bb19c/www/gifs-bb13/bb-na.gif0100644002342100007640000000152207616533100014202 0ustar bbbbGIF89aX‚333fff™™™ÌÌÌÿÿÿ!ù,XûXºÜþ0ÊI#¨8ë=Á-A„£HžfZŠkè–/ ¿´k÷‹žBxÀ pH 9ÈJ¨WøŸP“™¬>FÌt+ÔÁ 1¬šåg:|Ò·ÛÐ Æ3C 3Xk@L|b Fc|bv‰M"j ~ fz:‡ b_’ox}_g|›__“– >A!¡ŸeŽngwFX~|pÄ®¯ N²@a¶bÏy@f:pˆÒ½Ø»È>v™Ú#ÏϼNºÌ®|¦Š‰ªÞ®ÁàÉLéÎüÒmçR”åÉ&ÍO$zÇ^Åj„ß9k³–éÉŽ0SÚŒûáÂY®so‚43÷#³E}L»Ž‡ N¼nAlHrÒDIåÚUbá2¡%Ž8†™b†¦CW©hQ¢Ç;Ej‰ù˜'Ô>s‡0‚»ÔöÔ·iPuÚ±eJâ¹#,7 DYVƒËeÅbF;DÕ-\m¿&5+#í;`Åô!¦ÈZ›fÔ‘jÔgå²CyaeÊ’‹íš˜Øê¨tƬéPÆðòÖ´šÝ6jMoŒ“ÐR:~Ðb°o•õ Tåêl^1Oe+ñŽe°ƒ¿iœ‡0¤Åeïê¾.e¹V^!»VïF] ï”㑳ˆÞD\ëë±ãÛrÙ㞸ƒ¬f…OGŒz{ÿÆí¢ËH#ñMc”‚Ö vÃY+†Á_=uz’dáM4Y¥XC%å2Je’Ø1s0§r™¤((íéÃ…HBXw>I8ãŽGàˆÄ]<)äDiä‘Hî˜!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com;./bb/bb19c/www/gifs-bb13/bb-diag.gif0100644002342100007640000003730007616533100014513 0ustar bbbbGIF89aNd÷€€€€€€€€€ÀÀÀÀÜÀ¤ÈðwŸ3f™Ì3333f3™3Ì3ÿff3fff™fÌfÿ™™3™f™™™Ì™ÿÌÌ3ÌfÌ™ÌÌÌÿÿ3ÿfÿ™ÿÌ3333f3™3Ì3ÿ3333333f33™33Ì33ÿ3f3f33ff3f™3fÌ3fÿ3™3™33™f3™™3™Ì3™ÿ3Ì3Ì33Ìf3Ì™3ÌÌ3Ìÿ3ÿ3ÿ33ÿf3ÿ™3ÿÌ3ÿÿff3fff™fÌfÿf3f33f3ff3™f3Ìf3ÿffff3fffff™ffÌffÿf™f™3f™ff™™f™Ìf™ÿfÌfÌ3fÌffÌ™fÌÌfÌÿfÿfÿ3fÿffÿ™fÿÌfÿÿ™™3™f™™™Ì™ÿ™3™33™3f™3™™3Ì™3ÿ™f™f3™ff™f™™fÌ™fÿ™™™™3™™f™™™™™Ì™™ÿ™Ì™Ì3™Ìf™Ì™™ÌÌ™Ìÿ™ÿ™ÿ3™ÿf™ÿ™™ÿÌ™ÿÿÌÌ3ÌfÌ™ÌÌÌÿÌ3Ì33Ì3fÌ3™Ì3ÌÌ3ÿÌfÌf3ÌffÌf™ÌfÌÌfÿ̙̙3Ì™fÌ™™Ì™ÌÌ™ÿÌÌÌÌ3ÌÌfÌÌ™ÌÌÌÌÌÿÌÿÌÿ3ÌÿfÌÿ™ÌÿÌÌÿÿÿ3ÿfÿ™ÿÌÿ3ÿ33ÿ3fÿ3™ÿ3Ìÿ3ÿÿfÿf3ÿffÿf™ÿfÌÿfÿÿ™ÿ™3ÿ™fÿ™™ÿ™Ìÿ™ÿÿÌÿÌ3ÿÌfÿÌ™ÿÌÌÿÌÿÿÿ3ÿÿfÿÿ™ÿÿÌðwß1kk!„!1!!!)J)!)!k))c1)1!ÿûð  ¤€€€ÿÿÿÿÿÿÿÿÿÿÿÿ,Ndþÿ H° Áƒ*\È°¡Ã‡#JœH±¢Å‹3jÜȱ£Ç CŠI²¤É“(Sª\ɲ¥Ë—0cÊœI³¦Í›8sêÜɳ§ÏŸ@ƒ JT$€£H“*]Ê´©Ó§P£JJµªÕ«X³jÝʵ«×¯`ÊK¶ìU•G‹ª]˶­Û·h˜L ·®Ý»xóÚ•;’¯Þ¿€ ÌÒ/HăÄǸ±c|KVL¹òCÄ1[ÞLñ±@ÏAƒæLš³æ§K«V8ztÆÖŽWË&œcíÙ¸ÿÁn:ögß¹ƒß½]‘¸ðÒ»ÿVNÐ5Âä—O6èZ²uæºyg·.ÝùqáÆ'þ†ÿnºôÚ³žü|såÀÝË÷½öúäq¸?bóÛEv }Ø¥—ž|º‡_ƒú7[—I˜›hìÝG n a¸`†Ìƒ"2ˆàˆZhÚa*Îv݆±¥˜Ð‹#ž8Ÿ‚映†:¸`‹¥Qè@â`Œ?2dà‹ïíHà€4v‡#wE®F$CWV Wuöažþ êõ)A³ÆÊ“¨lâéjwe¢zi“´j«5ªº«­yÕ*²Èâtä””R'â¥Ô›ä°¹º:f³€1Ë,·5Ñ觰HšÊ¤±0>ˆí—×½ +¸ny ï¼ôÖ«‘¼öæ«ï¾ áËï¿×ëoÀ êÀ'¬p‹/ìðÃÁ5 ñÄo&qÅgÜ-‹wìq²,òÈk]LòÉ(ãdrÊ,·ìÒÊ.Ç,3I0Ÿ4˜¯µG'~8+: ÂÑgeÈ0]KÒ€[þH(¨Hû—ªj5›dt¤ç±[ìgdªf—Ž6Š©¯ä® +®èîI죽þIu˜*-×W ›uvҦ롯V—zuþ±T®«£©öµZµ”xw]wLQ—d´Öè½xãÏMÚ¶ãXÓÝ(ãObN.ãtO>ãÜ\Bιç˜Zn¦èZãù¸èÐvÈ7ß”Ûö}Ò²>jç¸ãŽf°ss~ùŽ”“;à¶7—ºš¦¯~:°ˆíÒâ·Wî;Š¬Iþz/¯ûôÊ/7u ƒ¾;‡ ½öºk_~ù’£þ\æìsyÖ×?~þê¹›?<ïX‡ˆ¿êä£ÞzâG@Þot}šIâŽÖ#m–ëõ6ç9~­réê^à¾>Úѯ~Ñ!<ÌQ¯€ aQ@ìÑ/xòƒ¡ÿôW½î }Ù{àm(Béå/‡þ{Zó>ò-ˆ,nv,|}èï4°ÌàñX%A2MiœÜøþ'Åìm1‹³[âü2§E~Omü‹!±ˆ@ãý‡½¢•„Åè†Ê¡ìR²@‘@oƒ0lßüL4Ã@B‘|$üZŽ~èBÎN€Lä­:éÁgT_$yF*æGµ³ß…C8~ò’ê#  (I Š)•m,ŒóXòÇ R….L##-h¸VzÑq{ŒâÓ¤øÊ-rr”ÈSžñJ¹ÄŸÓŒŸcÞ1YÙBdš«‹ŒÝ2«˜Fq1”r;P0QÒÇ(…=Œ"7™;cRÒ˜Œ§Ãh¶vΑ¾þTcé”iËiæR‡øTc8»éNS+¨cøLH…šßœd5D“r.FA;oY?Þ¢úLæ.‹×M~F”•Z„§H;êÑA¦N¢¿zß$-ÉRúŒ6õ¦æ ùPAv¡ßTß<É9˖茦^[ØtJ8jí¯‚oKS×Σ­U‹DeÃã*õ”T7¦í}NÍ#á®9POêiPת#ªÐš¦¥¾­Š  ŸÂê5aŽs.E™^÷š™¼òõ¯€¥ˆEKØÂþc°†Mì^«ØƺŒ±ŽìÉ +ÙÊzŒ²–ÍlÅ0«ÙÎ:Œ³ž mÁ@+Ú”¼«´#¢Æ„ÆÀ´žÖuUmþÈk1Ò3ð 026Ì-U‡0ÒrKˆ#©ÏÒèXOâw£ë]R'ñª¦ó-²@©8KñöŽq»nu{ V:â„%\dǤk+±FU|±ìß\7‡¶6yOW¼jD꨷»K­ñ%Þ;÷›^ˆ‘7VìY&ðø$£çQuк ¹ÞyEÎVš¼sÔ~ ¼¾®’¾\+W5ö_ ×À^¬Vž@¬áOª—·ý›”L§]vZ±®wâ/Eá¦ß ˸®ëpyAI*çM˜ôÔ0E¹»bû8•ËÕågãƒ8ŽL¾oªzü`€é¸P€ªd†Ÿl[GšË.¦²­–IžåÊ(N3þ•Lå­}ÕÆ9ö«Á”Çù‘­3™#µ§çú3FçûÓ ºÒ8¦§q“ η˜Ñr&XžgȤHçÃ\í%|VHj ªÌUðM-i!³ú]™ÒÖ£êT ožµR{•R µO]kÖ5»ÜZ0éÃøuqÚbJd³F×(¨ ÷eRDq›ÛMå^VºÏÍîüЯ펷¾ÞMN³ØûÞøη¾÷Íï~ûûßx¾åMð‚üàO¸ÂÎð†;üá¸Ä'NñŠ[üâϸÆ7ÎñŽ{üã ¹ÈþGNò’›üä(O¹ÊWÎò–»üå0¹ÌgNóšÛüæ8ϹÎwÎóžûüç@ºÐ‡Nô¢ýèHOºÒ—Îô¦;ýéPºÔ§Nu-åãêXχC°®¬„ëZÿ׿~õƒg½ìA;EÀ¾“±ËíaßzÜ¢vÀ=îu{Þ ~÷´Ï="}oûßϽ÷†ž {‡û@Ü.v½#\í‡÷ˆâ_ðÉëòc/ûáv¼;Þ»è?¿x°wÞíg?ýà†ùËã=õš}齎øÎ×þôŸÇ<îÿNûÞËÞ ´ýê5{vÐç^ë¢g|é’wäÛ¾ùÎw¼î•ïúè^ñ‘OXßþozãWßùÑ>寧úÜ“Ÿñ²ÿý÷ÅoþìKÖòÜŸ{÷ÙOwÏKßûË_þõ¿ýðoßîS~äç}ñç¸Ç|ö÷zØx Hzùg|ûGš€¨}È{HvÀ—»ç€xW{Âw€±W|ˆ~Ç—‚—÷uú‡z ~ ¨H‚ü§zÔçY7€‚"€­Ç€™‡‚/Xƒì—~ò7cuç{,8‚4ȃ8„Qø€Rèƒè¢ÕzHø|øƒWˆ|SH„Ö§‚÷g„é×€ H1œw(H…bXEØxM8ƒáGƒeØ‚gÈ‚–‡÷‡Lax8ˆ }&(ƒþzˆƒ¨ˆ¸ˆÉ—|³—öÆÁ7‚Ø‚£çz|T¸xd—Ÿh‰ø‰I8|p±n=ŠCá~t˜ƒÑhpˆ !‹$£Š;a‹@ÁŠ ¨‹üal«1ƒ Œ#ƒ‹9AŒ=Q‰ Œ÷â‹¿èŠÈ‹cŒ7!â_1ÔhsÙXQq¶,¶U7$PÓ‡uXZQŽÞŽX2Ž›Žô6$ra긎A¬¨Œ³¡ÈGîhŽUQŽò.øèŒ1aq€8‰±ºÈöhŠtg…~§†ð&è(ŽñŽðRx¨¹ˆ²e(’rxø‘-!ïØi1þyƒÇ(‘†2’$9&)w*È…¯W|º‡‰1ø“B …é‘—x{ªg~Z“îH!1É‘‚Á‰C”šè{»çˆ(|\‰…PX”Bè+X‡_ˆ@¡9©“ É’ë§~ˆ}Œx…Çç„Õ§…6x„?Y~(é’P¹‘éñ7€p9—@(˜«÷ˆa)ŠÈè–°'ƒy¸~­X—wÈh™–`Ñ/ –ÜGÿ–È”KYˆkˆ†‡9Š (ÿˆš2 i…¶—ˆ“—•ô÷„%(”oš$ȃ=ùšvHñ‚“–阙’c™•A(€ÅyÇy—{ˆêg„+ØœÁ—Y‘‘Ûxý†šþ8†Ûé•Ë9‡X(šci‰‰y~vh–AQ™ÁÙÃ)ˆ|ø™"øœÉžÌÙ™ÐÙ†ß)ò—Å!•Ñš+‰”³—„M™ŸâɄ繕çGšxh“D¡žë¹íŒfX›µ™ºYœeè…ʉ‰zøƒò™…pø¡±š‚åŸzÑ…@È¡tÈ•Ý)˜`ø¢I :0HzýÇ¢Lù› ˆB±Úu™Ui•û‡•)¸› x{)Š„Ù”û)çh¢yAˆDé¢^‡¤É‘H›†8È™ š‰dYŠC¤;Y()y™Yº.y¢T:/mºq/úoq¢Awªèù‘þžrššÀ‰¦ÞX§ÍB¨*a¨ùžA¨I˜Tù„ª‰‹³¯ú¯ Kœºy·9z˜ú·si£C9 › £cê¥yû«…k¸Q¸©¸b»võI¶Mê³’{—­ ¸÷y°Ó‰¨RA+抹ÜZ·â¹ºë‚PÛƒÆɺ"Ÿ_8‡»Ûº/þóº°ëq¬´««‘p8˜¨¶9š…Ÿ›ˆj½œº¹`K©Â «°ë½Èû™4Z¾Û +™2zžú¤Ò+±f¸µž’½éúµØ¶ò;¶DI¦^Y²7J˜&ø¡ lƒ¬Zì‹%hz¬ðk¸ ¼üŠÜžˆ¥lˤÎi¨®z¹”ùz½\KÀ±+»îÛÁv­®{ÁršÁÅ‹ñK¼-¼Ìkg:·Üû’>ì­Ü6|ÃRZr;À{šÄ¹±­&<3›¦LÃ7Û½G\—ꌼœ»Åë)Ÿ1ªKœW>šžYÜÅPÌÅ°:¬‹ê±cܾp¼wLÄü2ÄX¬¹ZlÇþFܯrÜı¬ܯ3Ü’¬ÇûÂÇ?ÚÆq|À~É ·9•OLƲšÇ¨åÈl<É”<»l¼ƒÜ±ÃkÈ;üÆ£ÌG‹ÜÉWüÈ ,È’|Ǥ¼0ä ³‹‘u<Ë«\o éÊ/ÜË*ɲœ¹µJŽ ·I È›ÜÊùÄ?úÊŸL˵l̲k0·ü¹šÉÌŒªÎLÐœžÒ|–Ä\Í¢|Ìí8ÇÃë½ÜÌËÍüË/A±š‰ˆFúœ¦÷– 9Î?‘Èn¬É×á•\á ^¼¹]ß~ß~ÑþÝcÂyáÿá'.à)®ÉÈ­½•ºâLál¼ .ã°á½7Ê|¡ãý<Èîã^ëÍŒCMäEî̇BÝ´q¹TmâAN·S«Sþáò[åݘÁ1IdnÊ ãÔìÝ;¾áCŽÒ_^Ñ¥¬½‘vŽŽwžçx¾Áþ1îä¾¾o.ÕqÎÖsná.­ç~‰èyä|¾æ ¾åbè6>èè,æé¬èŒŽé{ŽÈMN3.ß’~ÛiMèB½ÑVþØ‹žê©®è$Ú/óéý]ã¢Ër^ê|ê7¹êº¬é‰Þèe â€ÞåïÝç5ÔŒêu®ë™®ì›ÎäQ ìÈNŽR=ê•ìþõªzÎìwÞêž–NçÒnãÔ>œ—yéÌ®í»îëÁùí†.ì§}‹ûMȵìÙÎëÍÎÃÂ,À=îîhM뤞ï,CïªnïÇîì' åýî:aì…þXØ>ðè^ð¸.âÄ=àÓîïÕ^X¿í?ßi n²îÎÔÍð îþðèñ÷Þ¹ìê"?î;9ñþ±ñénïÜþñ+Ïï?ÍÿÞz%ó½Nóa|ðûî³®óßæ“õðòÖ9p™¡Ã7Oô-ñäíÃx®i®¨gžõfNñHoõâõÏÜÃîèÓïçø1þ•\>ömŸÎýnôU/ä¾õZ_æh®õ"_ä Ïòîò9î¯ø­é(_ððHŒfß÷8/îTÿòÕ©öJ?ó'O$ÄöO3Ïørÿò‚_÷çÞñ%ÉÓ}ùêùEïÓµžöƒÿùLß)aQŒ¦?õ›øt?ä„úŸ"'D ó¨÷¨¿óšë¶ìó{ô®íÅûßø9ü«þ½Y?¯ë…?ÇÖÞùB¬üç”îµÑ5voæxÏõ'º¿ðØ¿ÆIþ&Ýÿõý ¶í_ñ°òËÏþ¹þYÁ_T¤ïõÛÿ~Ÿý,ÿ$XÐàA„ .dØð‡%N¤XÑâÅ„ "܈‘cÆŽ5Ž$YÒäI”)OzÄ’åK˜1e¾tIp¥Áš3uçO AúHÔ£Q‘=…:D ´éR¨Q½Yð©T¬6³nåZéUŠM7‚ Jv¦Ù®iÕjåhrèZ¸ãÎU«Òî]¼x{æåÛ×-W´t ¥ú×ê`Àˆ/fÜøb`Ç‘½‚,ùVrÙË™5o^ ™óg¶þC ‡¶ê×ôiÔUƒfÝÚõÑ×±®Œ³mjܹó~”ÝÛ·oÏ¿Ó&i§näÉG“ÞܹäàÏi¼´rìÈyKçÞntïq©k´n3ûyÔ Á‡gß>¬{ÐãsúD_߯zø±ùíçoqÿKþþ{n=¯Ð“N¾òŠ²oÁ»ðËϵûã*B›#P"òvÊP8mAUóðAÖ*4QÂþpE~þAQ [,èD‚^ŒÑEq¬±By„ê†6œ ȹ:\í¸å +.#[£ÇSŒF)Ì‘Bƒ|”Å)Ÿ„òÄ,kÉÉlÍHæL2²Ú¶k’3+³¬2Æ9©þ¬Jñ SÔQý˜ßD6—¤sQ>y¤”Y^UÊüPâá(VÊâæ¼dHgøˆ=Ù&†þ&·#qƒî©e˜uIškZ.œ…ûwgJ£†I£Ÿ‹2úè¡…7¤¢‡n\¥#eÚfÆžÛêüðC¡|Š›í£ÂþÚëÀÞÚî¼µ~ùµèèƒwbV_¥›1·W2e®æ»ï‡üo×W–3µ¿,qÍ~<ïÏA_7t¬‘¶™Ñ^,óÎã¼uÅJ_xvÚ¿^{)ËS/|^´o‡ý¢×LöÚ‹G¸áøP?{÷G‘wVx¸‚‡^º[áêˆxƶéÂR#ÑÚ1.B­&u<]Dæ÷4;Žqy\$åÈG®q5c91ôĴݱ‘01ã&'BÉH*…~å ÉH˜9–ï”aѤ'=ÒIW2åfZÌ"gÙÅaY’Žæ £[K‹À˜@þ\%fvyHÕÅ®wïcf}§Ça*©;¦Ád"£ØºbD˜Ñ _6§²'îÒŠÄæ3¹É»i¦OpŒW2§óKºy³ Û<'©YÈÂ5 ™´&a'O‚гžîºgå¹´ë R™äì@"ЖɡI,ÖàÉÏ…^³¡æŒ¨½ãFV ²šõg9ÑŽ2k¢g±å:Ù‰E…¾“¡š[)JSºÃ‚—½4ý29SÅÕš7¥ÞJeB–}6Ó™f£)G‰Z¤œž)• Uª}T§>•˜F-U«j ¦bõ¤CÕꡢʞ¤~;W=œP˺U«¥U­Éak<³úV÷qµ«==þëøþyW¼ÚS¯[Af:Mª›¶%}ý(¬+À*V¢Å e…uXÄ$V²¬d¬a¿ˆÙÁhv³ê¬g›dYðu´•-­.D3Ô†/²«Rl æœ þUµ´ÅF èXÝ"–¬¼Õoóc[ —°³%îQÛ³¹F×ÏrksUªÜŒ»Ða®uiÒZš>7&Ó`u½Û’™!‘¼ï÷Ì{^ù™²½Ð[+ß[‘|ä7Ñï~u¢_„¸ nH~…`;Á¶"Å[ÀBm7~¡.E, ˜%°ùËá…\ØÃÿõ/ˆÂ`ÇWHë ¯te¦Áûâ÷#±þ†1’âgx¿8>1OP\ã—È>$‹ÅÚAÆØÂ9æï‡wÜß3Ã"Þ1“3”ÓŒâ@ÑfVs–Ñh=êUÂ(ÜíE¶\g,gúÇRþó µ>LJyómO8½XIÃ9—n:º¡xþsøR|“v—šš~u0·>LWPXÇ𨫇è’2¹…jNá°òÁv=èo¨¾\¨³çå'9«.“ ³¹¼¥¥õ”¾uÑ>éÏkjÜ£R÷¥äœÙA7Lr®ö±¶Mbù;×ãˆt§¯óíÇrwW—ÇÛ½ñŽÿ<ä7þ/[Íë…MgïÞͧô;ÃþîÌÎ;Ý˼çç{ãÇFõès r|;÷ô¨w-}[.‘Œ·б7ô¢Œh€+_÷÷Öö¹c¯lë7ÿÜé¾YgnUŸwžôžÞw¼5=û»ÃϘF÷µÛoî÷ºÜ®þwé!Ÿvn‚¿¡FµÇM}júó¿|C3oÓ1ò;ÀLó·þ󽺉<üÃýÛ¿>8‰û?ìë6]72ë5øk´T7Ü@û#-|@õ‰Àˆ5‹K¿€S>ø7Š+¿ê9;Á}+¿ùcÁ$¸‚c=T›‹ Ù{>~#·‘“8˶Œ3„¸+B?Ó>/ÛµdŠDþ«<ªã›6©½´¨BÁòÁ,d"û1/|‰3ÌŠ+Œµ³—îƒ!œ30ôˆ¼Œ4$¬+¼˜‚ ’„ð`Yˆ=¬ˆùC@¼’¸Ú´kCß DpêCm™š†`ĉ¹I<.D ;Eì ŒÑ’þØJ|D!‚ṑAù’~áP¡‘|±‘Ñ•@<“LŒºM” ?Ü”JñDQlÅ(Ù•P´’_4ÄPÑaÔ_AF:IÅB¿1¼Ž7ñÅXÜ=Ù–~qÅ€Ù–'±ÆnAÅ9©ÆpÌn¼–< ©EÍ0À9œ¦<ÔCl!Go¡N±Y$€¹zì˜j´–lùÇOþéF]¬DàPÇÌ赨yGx¼Fyä–}ŒÇ^QÆ€ìE}üE¹HlHoÈ‘™Åä)C߸Ãð¸E\Eq”Goä{´HžAI–Ü—“œH4ÇN4; Ûû=*œB<Â4s´Ý{84£;d@BQÈ{¡HX¤‚‘“W<ÆpŒJkôE‘9F•¬È{䀱IhTCÛK¾(“¾ùÀ¬6¬Aú›BæÛ¾0œÆªñ—ÿEpœÇS¬K»\E—ŒGŒXÈsìKNa·›ÄIz#·=²ì2Mk¼Ã„Âd?<„À˜pFëŠÃà½k3´ T@ÄŒ>Æ´7êCÀB«‹7¬:˜¸DÚ²Lþ6vdËÑ[<4À±„·\›¸õë&ÉÔ\­ª/3œ¾jS¿óËÁ_SA´4K;ãɯdÇÎ(M²‰F „»ä¢CÙ«N¡ìIàëÌ%ä¶"ôL‘“MÒtÎÛ‚N2<”¢Î«CäkÇÄ#¦ýOK­é´´Ò»·õLÀ¹XC÷yOòŒNΣ+\ZÏÇSφC ‘Ä©þ´/ù?JMøLP$3OQJ?rPݤÞ\#´08—R¬½PJ“ÐH¢&HúÐ1Qeà %Y*Q åϽ$â{#µ«ÐÑBJ,ŒQCZѾâÐ ,IÝÑMŠmPÉ‚¤ÜÒÙàQ&BÒ$EQcbþÒF,RÜ°Ñ(…0*mÒ"U)-È Ò-­+Ó|$ …R¼:¹CS¯«,Iš 4}+eS8tÒ”ÛMR#¥ÓÊPQº*RêP­RR>M2'£<ÍÒBíS;eº@ýÑüã%#¼E-<%T¯zÔ—¨Ý›@ ÓÞøÒ%-LmQA­'äa#3Qm?5Óô@Òï£Ð ª SC:}UM “RrÕJ¥TÂÐÐXåÕgS- VH}ÎRåCY=VwlÕóÜ0‘+ЄPOãÉŽ[Œ%>RÝÔ&}VIPí9j…ÌC3Ì5嬾HælÕÏÍæÌLtÅÄÍdcþäzufؽLü²àݵÛóÝvö](ô3È´bm=äîþ|e>Æe.çS Õg%dÿ¤‹v¼sÒÔdç÷Ub v»¤ QnŽ‚Æ`T%ÖÓßfèvè–ZÖÍ"Ð.$âøôhYã…nÎNfbÍ[`=%i>4i>Ê”U®h–Æœ.i,%g6g‡©é›Òœ~é>éðdæÊÁÓ®³éÉêÿD#…Ži‰Bêƒ-¥¡f;Å°ã<öb9äA`ÚáÅS©î­™nf3aê÷` ÄU°9ì[O2¹Üˆê“²†VvBk¹u×Ídk 毞ֻžk•¢êL¼^\ M'¤Ø+Ná|g^]úØÀþcî#l¿²ÛY¶eµ&å–¥YL\þ ‹>ŠÅ½‰&;ÀÖZvi©ºeMg;ìfålØ´}µ¤MÀe«äÓ®\ž5¸-òmÊ¥¢kÆlœ6RUÅå5Mì2{LÖ]VC6Ûä5Ü»½îëî£ù Pâ¦kãnªÚèöì^~n\›M±Ø³µníþÔìÆn±ìÚúnz•ÃnÇÄÌÐ^¿5,JäDÛkŽ´?Õî÷&ðø¶ì£ïy<ÞªV£%íÜ讽ÅCB!~æŸßö¥ßäTpiÒl冯Þ,JÚð _ÞŸU_½;ºûö/äà§:ñ÷Nq_]Ömq º¼äq|u ^YpøÆñìÕÚ™ãþñ•ÓÙ†Îe§6¦ ·ñ)‡éÍÆ®ï'Ó(ÿ&Gòí®ìúÎòçÙò6ír/¯r0Or»¶åT­$3gr4'R5¯r÷fí÷_×k¬žs)Ïð57éãæ认_}:?ÿs·ó0ïU2§^9/ºDÇÙ:ó¢t•~r Ÿô"¢ò#gô6R8ŠÚg¡‹ß+ÿ)°âô*ííàÎ%Vn>7nDÁÚt|s8Ç™R‰ó:Õ«ïHçòƒÝS8Rê çuU_uà†õdõK¯R"-bš. =t7ìcçJu¸f]v$vŸ6WíèõI÷t·ô õpëmUÚöž!w7ÑuFýrFþÿ_ÓK.uŸ[Å[R—ô ¥UdûståíS³M3/NÛŸgƒÖ]2­oÚ­aæ|ô8d¦Ê™–d~Ü©ñèK¥S¯n*jÁü’Â轶ð¹ve¾o¾v÷áã»ÊÆúýÝŦ߻¿Ûûv_ú»Ñç¿þùQË è\€MæŸq—!¸ ƒ™)†w}ýtÞn~ý&–wÎÆß}n¦Øj ¥gŸKåé·‰ð‰¢z-jˆ cÉ ØœdÏ8 Ž9ê¸þ#:’¤`ƒA ‰Õƒ9E_iªÒzÄ™EZzà)é!cQ6™ß”¹ñ¥ÞkTj™%_‰Áå"‡¼YcdÌøtEõø&œqÎXÔuÚy•M+F8P(Îd&mú‰å`ÊU}íõ'[Šñö(~ jÉ%‹eŽxšR-÷XmÞ('¨¡æø㥚zša©Ô‹9•–Ó’ööª•sÙ:+e(ÖÔ¡}ø¡j"“Žþzë–)¦e© ëI£¨Êhc€ÍJ+çt§Z{­¦Øj»mT—rkíZuÊæ§ÓšËcµßª îºír[Ÿ»w2+í³žF{.¾8¦/¿ Ù/Àêpó¢þË©šãÊ謼 “J0ÄK<1ÅvfÕ¦k†ëÔ¦ ¯YoÅ!‹<2É%eðŽ4‚¼ðÇBvü°É1Ë<3Íë¢ì#ÂH)üãËuö rÍA =4ÑÔ]|•ÆÐrì°ÏL]4ÉÿB=5ÕÙB§Ê6²,µ?+]5Å\ƒ=6ÙGWµ³›N»¬¶½dK,¶Ûq}ó¨<¯Ì3Û zݶÜÃÝ7à3ÓM­Öx·\pÞŽ­â‹;òÆX¡]nãÑíMîãñVž9ç~#7íÝi®wâkn:ê%›Yè”—zùæ©û+;ía˜UÒ| øzâ×}ïÏ¿/½;åN Ÿsðso¼¾ÅûÞüò£þ×>=À«k:9ð¼;õÝ{/·õc?<÷šÁþ=ú飾R¹cN¾ö –¯>ýõ›ÌþÉã#ÿ¾öû¯m¾º áo(îÛÿšó¿pbóã×àâÔºìyL~ ¼à©(/¡Ei„_û‡ÁêÍüš ': Ræ|$|a ßvB¾¥ÐS ¡a¨Ã®™€(¬Ê÷‡C˜í°ˆ–ëaÍ:Dºnˆt2"9³5 ˆ‚‹^¨‚H<‹•.Š^ÄÌ©˜/+ÊŒ…0»!·÷Å52&Œb<cfÆ'¾Oˆi´ óˆ;ýŽ9Lb‚¾¶Å¦©Q†l û8À8Þoiþ{¤³")ɤDnCrá!3i@>&‘ª»ÚÊQŠ’”6䤟¦ÉU òrþê" M)ÊYš²–•tå‚0ÉÊ]ÖÑ’k+d,i)LY‚’’­ÌÛ+ÉKV¢‘x &1‡YJZ’«™—„å2WiÍ_>“fÆ”f4‹yÊ*’^̦&·‰8e^1œàü&›nYNs‰zT'éØYFq¾s”¶<æ<ÍéI{~ŸÉìf;û Îê. ‹¤#A iÐ\b3¡î$&C{)=ÆE4“…QE÷yÑ…RSž§ë¨DQyÇz6r¤-é!ˆÒ”®°“µ¨Bÿ9͘žt¦lüh×B*G~º4£stþYúz´¥Â¨˜jKs:L£"±v¸td¹vÕ¤ªÔ™,ý¤K§ Söë¨ÜÜFó'¹´zÏ©g‚*X¥ªÓxbQŒKÍíØz²µZƬnskut™Ð„鬰œä8YC0âu},Ô+§Àè?À ®Q $Y…R9¿ÞÔq=Û^ÍÇYªQvY–% {XÃfÌ9Oq¨C;7ÚÈÚ ³\­i*yŠZ¢æ4£â›íR>›9මÄaWzNœ†•®;]«pqÝáò0³æ»mr½º\‘ʦÏÝ 2Å5]Η‰E_i-wZ‘Á³»â¬£xø¿ò>‹¾Ö5]z´^Èñö¢¾µLþ h_ÝJñ{ù•â~ÃÖÞæÚò±ž,r§wà»ê3j;uï‚Cù@ ؇Cë0{»zÍ Cn2ˆ=1a [ÍòqØ~ Þ „EÌͯ¾Í*œµqìZ\¿Ã8¯2^'B¼ÝÊ\fº:V_gÕç3È“Þ5ûZØ2¿`K2Ä&,ZWOjQ6`)-–:,+YvZÎŒ`³Ü>Ûj¾1”mÙ|Œ[å‚Tnòî =òþÕÌL>(=úB2gÐÏäÔs•;»KB{8ÎcN$¢VçC2Ú›}«t»Üé㘦;v_Ÿ£åYHošÓ÷¥4ý¶U¨½,¼S[XO³‰i&uÖbN[¬þ—ik¿íšÖŽ~rÑå*©‡Øò™4Ÿçj;G2ØÂÖJ±;ólE?š½ž]Y;´<¹FB©φìr©˜ ;°úS´ÁzÁkèªAûS Vƒ—ÁG$ÅÙK¹Ñ²¨yF¤#d7¦Ü]3xÇ*8¾ V˜Î¢’|ï;Üù°i-™Öñr à-5M"I9üܬ!Œ¢ä’ï-ý¥U¦°ò&nqÉ‘v±V[–ÆE¤—VñÇDÀAb 2ò^Íü-ʪiÝÚ¿Úå;/Ѹ}p0!kص*J¤…+KýS£ m5–ÚG‚Yë\‡9«1^Ť3 Dô&¿/4(ìIŽ*¸¿Õþ[[×Ήî7"”·¨¼#‚£nö_Èc¬cÝ[>_i;±À}( WýîYíÕiy†±òt·ïÊÛ}­Ì«+ÝBé·Ñ©{ñ¹ãØî’¼ã…^ ÓŸ©ï›GŸçqÞFCW–ôË›¼d¶¾zÕã>—®g×÷b_¢¯ï­¸~¼îMßûݧõšg¯Ø£¿ê¦V{ô©W¾é dùÔùò‘~Å8o4OÃù­Ð»|ÇПþ½““ù'ú•ÉŸì‹K|Ê:“|k¯îêžQœ+â·š¤EÜá]úÉŸè…ßÿuÚI ß-•½O¶“••˜çðWžùRe`îQž>N‚Y†N€i`þ} ã•_AÁŸÏÚ›<ѺV. ^–Þšó`M½¤Œ›A‘ôý ýÊW]×ÑùTÕÔànÝ` fàš!aËý ^›mF!>áûu»(!²™ßá²Zûh}±•«R¡†ÖÎMÆáS©UÿùÞ"ÒàÌ©íáÚ`¦a•þ%LΟÙMË$Ïó”žÖ¥¡*[¾DÁöá©Õ–öµÚîüº!Ïíbóì™ÞaÁ°Ü9Q¢% ¢òá÷YÝò9_pížåaöéž-BV%RÛìd\c+ª›”}Ÿ-^ 2žžúÅbmÉbþÖÚðˆNèA"*±b1žœí­^#®ï!8J™Þu”#Ó`àùZ.Q6Jâ6Jà-2#/²Þ2z=æãÖ£û-#Þü£¢â›¥Éžic<ÆÒ<âc#Ö"2z_2†#òá^òeäAc@Š`$J–¤Œ„R>å?0åDPeW8¥PX¥LíÐ/²¤:àFF R"eV:Y…TNeZ&åZªåAœåY¾e\2Æ\¾¥Y¶åVRþŸ1²!X%Àe]V¥\…TæPÔ%`ÞåZ>¥ajE`&^æ% u¥W‚šÁ#ÁŒåbfT2&^b¥fVåc~faš¥[Ê%dÎ%Vª¥gÞåi*fkÆ¥Vn eªKm~!Òõ¥Š¥jæi:%b¦&S¶&IŒ&Tþ¦[&¦kÂ%p&gdræj§mZÜñåPîffB¦o†&k¾¦kv§r>gdúæT¦vÎ&wv¦y’&j"gyvá¿u$êæ)B g¾fzj'Tê§f&b~çyâg[Þçogpn§g6&m®Õ]ãe†eQž'NhqR¨‚Â¥€Úewz§lJç}rç~"¨wþÚÙdÝf Uaf¿@g:g€.ç‡*§hÂèr~gr’§snhÞ(ŒJhiv™‰"7’¡}gZR¥zn¨bhjVhs–'h†§‘ªfs²¨‘蓙$à,¢+þZL&¡¶õ:zÓŠ]˜Nú_š¶i÷¬)x¹©œ.ٲͩªàØÀéîéƒæ)Ÿþ%’Î&eª’.)[ÚÉjbéx.aüýi„ÎhI,jS.*•Jj…šf4æ…N!‘:*¿0¦`¢åURªlŽ(UXªthª¤¢jY%!ÅžüvL›ƒ ¬Þ‰‡.é•Bé‘2'¯꯶§°&igjé&*j6i’æhþˆB§p²&«~‹žb'ÄÜêTXë¯ f`+èiK®k•èzªçs"§”&+žë”jèv‚k¸šj~f(ˆªY§JLáGŸ(œÚñ\±ðF¾2‰¸•\â‘\Àl˜$œ°8&¦þ¨…–fº>kqšçzŽk‹VìÃ’&ögŒ^êƶ¨‚Â'V È-†˜øœÚ l£ ¬vðÇika¼ÝŠÄ,bÌlVô*¯ú*´‚ª¯2çcJ,ˆÆ«ÇÚl‡Fj‚Ú,³RéÄ-ŽÒëV+¾Ž‰yÈÜðÉÛÉêkxÔ”4œZ ™pm¿nÅb+€&¨ˆÊ+¨.lÇ>¬ˆª-¤*jˆæèv,ÜFk¦5þ­Ó~‰—ìŠÓym‰ä«˜t­ÔæÞJ¤ø¤(,¤&æX2«Ò"hØ’g¼Æ(Ùç·–*´Ú¥äòèÄ’ëŽ.®í`›e¾êÓ.’ÜÓå¤4~¬Hášá–ËÊ*Zöæ°†'–Ú(†ªp’­ã‚§±òì€Rî„m¥k±æ,ÝÖm»a^ÉD]¥ì‡—0²ŒÈÈvm—tÜç) àÛ×.ž§.è–ךº‡®”¬ë ÷ºën¯`(޳ٽɬvÐ,­~oŵÞ#^çÈ$JÔÙÊ͹ÝâÍDÏ®¬ÞJ· ,Éú­ìÚ¯ßéWe– O°™ùÕ¿|gpõ™j¤þ0~qØßÔ¡ ‚° “×x9â3žÍ´ž0[&ïa¢*²VÆ ¿ð›Š ’#·° Ÿ* g%«~,Ø°ÑÞp÷ݘڨ°ìÄ^G[ºÁ õñfHqÍñÒ¶ÕJªW/PËêCqíÌ+徧VïÎöê»jìÏzhç>«çRqÛ+ß[ ø+ºMï·!\’¬¥ðËitºèâ(ò2n–'“r®i:ëÅÎk›ÌÓMj¨,­œáb-À.úª¸¾§{²§ï&-þ¨²J¨†–rÙÊè#C2ßNÝ$' FÿÎ\ÖÚÆëÊ\«‹äm [l–^®ãª(íئòÙ®²àÌÔ›ªŒnvo°î’ÔÊ„pÜÊzo¼ÈmÙíÚþòŒ:òÆh1û²'#3+ŸÈÞ‹ÙÁò×F3×NsÏ]Þ~ªb./7kæšë<ãó/›1°’sóZò¡ÆÔGÊz˜ôÆ]‰Ähéªhr!ëh¢>´ñ:t)ó.´Óæq%'ðü†t™,ÌúoɽsÈI«½8k‚–F˜‚$É‘…æ™ †e´Èa¾5ÐüP<šA@™l.‘"` Ù-Å‰Ê !ߧûh"!ù ,CÈI«½8ë`´DER@wˆ‘$‹`H»Æˆ`¡ñA§ö”î;B·c% !í ‹] …¢á0¸ˆ?˜À@(lM°!þµFILE IDENTITY Created or modified by Sean MacGuire (Sean MacGuire) MacLawran Inc Created by Alchemy Mindworks' GIF Construction Set Professional http://www.mindworkshop.com!ÿ GIFCONtb1.0 Effect frame 1 rotated 0°Effect frame 2 rotated 30°Effect frame 3 rotated 60°Effect frame 4 rotated 90°Effect frame 5 rotated 120°Effect frame 6 rotated 150°Effect frame 7 rotated 180°Effect frame 8 rotated 210° Effect frame 9 rotated 240° Effect frame 10 rotated 270° Effect frame 11 rotated 300° Effect frame 12 rotated 330°;./bb/bb19c/www/notes/0040755002342100007640000000000007616533100012212 5ustar bbbb./bb/bb19c/www/notes/.helloworld0100644002342100007640000000000007616533100014351 0ustar bbbb./bb/bb19c/www/notes/README0100644002342100007640000000072307616533100013071 0ustar bbbbBig Brother Notes Directory =========================== This is a good place to put system information. If you create a file here with the same name as used in the bb-hosts file, it will be automatically linked onto the main BB display. The file may also have an html extension, if it's HTML... i.e, if you're monitoring a machine called 'fred' then: fred.html fred would produce valid links. An example notes file from BB4 has been left here as a template. ./bb/bb19c/www/notes/www.bb4.com.html0100644002342100007640000000226107616533100015145 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother


www.bb4.com

www.bb4.com is a pentium PC running FreeBSD. This machine is the home of BB4 Technologies Inc. and is the development and distribution platform for Big Brother.

This information is located in the www/notes directory of Big Brother and is here to show a sample of being able to link system information to the status display.

Other points of interest in the Big Brother World:

./bb/bb19c/www/help/0040755002342100007640000000000007616533101012013 5ustar bbbb./bb/bb19c/www/help/forbidden.html0100644002342100007640000001224307616533100014633 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

"Forbidden" problems


Yet another entry for the Most Frequently Asked Question not in the FAQ. I try to click on something and I get "Forbidden - You don't have permission to do blah on this server..."

Those messages are coming from your Web Server, and they're usually right. There are two distinct classes of this problem.


The directory tree permissions or symlinks problem


If you haven't been able to see a BB status screen yet, then first make sure that BB is working and has actually generated something for you to look at.

You can tell because the file $BBHOME/www/bb.html will exist and have a size greater than 0. Ditto, a file called bb2.html will also exist. If these files don't exist, then there's nothing to look at and your problem lies elsewhere.

However, if they do exist, but your webserver isn't letting you see them then the solution is most likely that you need to either:

Verify the directory permissions of all parent directories of $BBHOME/www, they must at least be read/execute (r-x) for the web server to access $BBHOME/www and all parent directories. Note that on some OSes, a home directory has rwx------ permissions when created. This is often a problem, change permissions to rwxr-xr-x. Note that this may not fit into your security policy, so that you may have to use a different solution.

if that's not the problem the set the option FollowSymlinks in the httpd.conf file for Apache for the directory where BB is located.

Options FollowSymLinks

The http server then must be stopped and restarted for changes in httpd.conf to take effect.


The CGI permissions problem


Here's how to debug the problem

  • First check your webserver's error log, it can provide clues
  • Second, check the permissions on the file you're trying to execute
  • Finally, try running that command under the userid of your webserver

The first point is pretty straightforward.

The second point is equally obvious. You need to have execute permissions on the files in your cgi directory.

The final point is one that catches people most often. In order to be able to execute a file, you essentially need to be able to access the cgi directory itself. If for some reason any of the directories between the root directory (/) and the cgi-bin directory don't allow access to the uid your webserver is running as (usually 'nobody'), then the webserver won't be able to execute anything.

A simple way to test this is to 'su' to the userid of your webserver. In most cases, this would be a command like 'su nobody'. Now try to change directories to your cgi-directory. If you can't, then you've found the problem and will have to adjust permissions on a directory somewhere.

If you can cd to your cgi-directory, then try to manually execute the command. It should fail, just like it did for the webserver. Again check the permissions on the web file itself. You may have to issue the command 'chmod 755 program-name' as root to correct the problem.

Finally, check that every subdirectory that make up the full path of the cgi, has at least read/execute for permissions.

If all of the above fails, as the BB mailing list for help. More info at http://bb4.com/support.html


Report directory problems


If when you try to run an availability report, you get the error message "bb-histlog.sh lacks permissions to access Report directory", it is because the webserver can't write in the $BBHOME/www/rep directory.

The actual report output is a dynamically created web page that lives in that directory, therefore the user your webserver is running as needs permission to write in that directory.

chown nobody $BBHOME/www/rep usually does the trick.





© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-help.html0100644002342100007640000002625707616533100014222 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Big Brother - Help


Big Brother FAQ
Purple problems
"Forbidden" problems
BB Installation and Configuration Manual
Changing the look of BB
Explanation of BB files
About the bb-hosts file



Color codes by order of severity

Trouble
Bad things are happening.
No report
No report from this client in the last 30 minutes. The client may have died.
Attention
The reporting system has crossed a threshold you should know about
OK
Everything is fine. Have a nice day.
Unavailable
The associated test has been turned off, or does not apply. A common example is connectivity on disconnected dialup lines
Disabled
Notification for this test has been disabled. Used when performing maintenance
Acked
A current event has been acknowledged by one or many recipients. The acknowledgement is valid until the longest delay has expired

All connections are checked every 5 minutes


Trouble

Most severe conditions result in the administrator being notified. These include loss of network connectivity, loss of HTTP access, and disk conditions over 95% full, since these can result in a system hang. Furthermore, any "NOTICE" messages in the message file causes a notification since this may signal a disk fault.

Under these circumstances, the screen should turn red. Click on the corresponding red dot for additional information about the condition.

If a severe situation is occurring that is not being noticed by Big Brother, use the PAGE/ACK button on the main screen to notify the administrator manually.


Attention

These include HTTP server errors, disks 90-94% full, the death of important processes, and "WARNING" messages in the system logs.

The screen should turn yellow if this is the most severe situation at the time. Click on the corresponding yellow dot for additional information, and notify the administrator manually if necessary.


No Report

Each report is checked for freshness. If any report is more than 30 minutes old, it is marked with a purple dot, and the screen turns purple, assuming that it is the most serious situation at the time.

These may be the result of heavily loaded systems, but may also indicate a more serious loss of communication within the Big Brother system itself.


Disabled

Notification for this test has been disabled. Used when performing maintenance tasks on a host


Unavailable

Under some conditions, the administrator may elect to disable some tests, in which case the reported condition becomes clear.


OK

Green dots indicates that all is well. Green screens represent a seldom achieved state of administrative bliss.


Pager Codes

The administrator will be notified when conditions merit. The numeric message is formatted as follows: [3 DIGIT CODE] [IP-ADDRESS]

  • 100 - Disk Error. Disk is over 95% full...
  • 200 - CPU Error. CPU load average is unacceptably high.
  • 300 - Process Error. An important processes has died.
  • 400 - Message file contains a serious error.
  • 500 - Network error, can't connect to that IP address.
  • 600 - Web server HTTP error - server is down.
  • 7-- - Generic server error - 7 + server port number i.e. 721 = ftp down
  • 800 - DNS server on that machine is down
  • 911 - User Page. Message is phone number to call back.
  • 999 - The service reported in an error could not be found in the svcerrlist token in etc/bbwarnsetup.cfg file.

System Information

Click on any server name for additional details about the machine. Information about all components are available, including serial numbers, partition sizes, SCSI addresses, and the physical locations of the devices. This information lives in the www/notes directory.


General Information

The current status of any individual component is always available by clicking the appropriate dot in the display matrix. You may have to hit Reload to get the most recent entry.

Occasionally the screen changes color for CPU or HTTP warnings. These can usually be disregarded since Big Brother has been instructed to be very sensitive during this initial test. Similarly, internet connections may turn yellow when the network is heavily loaded. Although it should be checked out, this is usually not a problem unless the whole Internet section goes yellow.


Big Brother Column Information

conn

The conn column denotes the ping check performed periodically. This code is located in bb-network.sh.


nntp

The nntp column denotes the nntp check performed periodically. This code is located in bb-network.sh. It makes sure the news server is alive and well.


cpu

The cpu column denotes the cpu check performed periodically. This figure is based on the 5 minute load average as reported by the 'uptime' command, in the second column. The code for this test is located in bb-local.sh.


disk

The disk column denotes the disk check performed periodically. This test is just the 'df' command with the disk most full being reported. The warning amount is 90% by default, and the system is set to panic at 95%. These values are set in $BBHOME/etc/bbdef.sh and may be changed. The code for the disk test lives in bb-local.sh. You may also set warning/panic level individually in the etc/bb-dftab file. See the etc/bb-dftab.DIST.


dns

The dns column verifies the status of the DNS server on that machine. The test is basically an nslookup with the server name and IP address as arguments.


ftp

The ftp column denotes the ftp check performed periodically. This code is located in bb-network.sh. It is part of the new group of generic server tests performed. To test this service on a given machine, just include 'ftp' on the line in the bb-hosts file.


http

The http column denotes the http check performed periodically. This code is located in bb-network.sh. It will return OK if the server is there and does not return a string containing the word 'Error'. It should be more rigourous. Note that password-protected pages return an error when they shouldn't.


msgs

The msgs column denotes the msgs check performed periodically. This code is located in bb-local.sh. Only NOTICE and WARNING conditions are considered. Note that a NOTICE condition will cause a notification (code red) whereas a WARNING just turns the screen yellow. There is no way to turn these messages off, short of clearing out the messages file manually or modifying the tags from WARNING to wARNING and NOTICE to nOTICE. You may also introduce tags in the etc/bbdef.sh file in the PAGEMSG and MSGS variables. You can also have the check performed on multiple log files by set MSGFILE in bbsys.local to all log files to be checked. The msgs test also checks that the logs files are readable and non-empty. These values can be set for all hosts using the etc/bb-msgstab single configuration file.


pop3

The pop3 column denotes the pop3 check performed periodically. This is part of the generic test code in bb-network.sh. It checks that the pop3 server is alive and well. To test a machine for the pop3 server, put the word 'pop3' on that server's line in the bb-hosts file. You may have to put pop-3 instead on certain platforms. Check /etc/services for the correct spelling.


procs

The procs column denotes the procs check performed periodically. This code is located in bb-local.sh. It makes sure that the processes defined in etc/bbdef.sh in the PROCS variable exist on the local machine. If a process does not exist, and it has been defined in the PAGEPROC variable, then the code is red and a notification is sent out. The ps command is used to get a current process listing.


smtp

The smtp column denotes the smtp check performed periodically. This is part of the generic server test code located in bb-network.sh. It makes sure that the SMTP process (usually sendmail) is alive and well.




© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-faq.html0100644002342100007640000006534407616533100014041 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Frequently Asked Questions





		The Big Brother System and Network Monitor
------------------------------------------------------------------------
			Frequently Asked Questions
		    Version 1.9c  - May 15th 2002
				LICENSE
------------------------------------------------------------------------

1.0	About Big Brother

	1.1	What is Big Brother?
	1.2	Where can I get Big Brother?
	1.3	What is the current version?
	1.4	What do I need to run Big Brother?
	1.5	How do I install Big Brother?
	1.6	How can I upgrade?

2.0	Debugging Big Brother

	2.1	I get the message: "bb: CAN'T CONNECT TO bbd"
	2.2.1	I get lots of processes, then bb dies!
	2.2.2	bbnet test dies
	2.3	I get garbage / my environment all over my screen
	2.4	I get the message: "Can't open stream socket"
	2.5	conn (connection) test is always red / not working...
	2.6	http test is always red / not working...
	* 2.7	bbnet is dumping core
	2.8	Background color is always red / yellow / wrong
	2.9	Pager problems
	2.10	I've removed a host in bb-hosts and the screen is purple
	2.11	The gifs aren't displayed properly
	2.12	I'm not getting numeric pages
	2.13	Generating trace code to debug the notification feature


3.0	Using Big Brother

	3.1	How can I monitor routers / things that have no hostname?
	3.2	Can I monitor NT's, Novell servers, VAXEN with BB?
	3.3	Can I monitor things outside my network?
	3.4	Is Big Brother secure?  Do you have to be root to run it?
	3.5	How can I monitor more TCP services?
	3.6	How can I check password protected web pages?
	3.7	Can BB restart processes that have failed?
	3.8	Can BB show historical data?
	3.9	How can I add my own tests ?
	3.10	Can I check for errors in multiple log files ?
	3.11	Starting BB at system boot
	3.12	Why is availability report not working ?

4.0 	Miscellaneous Big Brother questions

	4.1	Where is the name from?
	4.2	Do you write BB or bb?
	4.3	Whose picture is that, and can I get rid of it?
	4.4	Is there a Big Brother Mailing List?
	4.5	Is there a Big Brother FTP site?
	4.6	Where can I get more help?

5.0      Security Considerations


------------------------------------------------------------------------
This FAQ is © Copyright Quest Software, Inc.  1997-2002  All rights reserved.
------------------------------------------------------------------------






THE BIG BROTHER SYSTEM AND NETWORK MONITOR
==========================================
Version 1.9c
May 15th 2002

This program is Copyright (c) 1997-2002
BB4 Technologies Inc.
All Rights Reserved

The Big Brother System and Network Monitor
is not free software.  The terms and conditions
under which you may use the Big Brother System
and Network Monitor at no charge is detailed 
in our license below.  If you need a commercial license, you
can get one online from http://bb4.com/

We've put thousands of hours into our software, please
take 30 seconds to read our license, it's not long, or
complicated, but it is important, 

Thanks.

====================================
License Agreement & Lack of Warranty
====================================

By installing, copying or otherwise using this software 
product, you agree to abide by the following terms and 
conditions:

1.	NON-COMMERCIAL USE

	No part of the Big Brother System and Network Monitor
	may be used for any commercial purpose after a 30
	day evaluation period without obtaining a commercial 
	license from BB4 Technologies Inc. Commercial purpose 
	includes any activity engaged for the purpose of directly 
	generating revenues including the sale of the product, 
	use of the product to provide a service or in support 
	of a service for which you charge.   

2.	TRADEMARKS AND NOTICES

	The software, graphics and documentation which 
	make up the Big Brother  System and Network
	Monitor are Copyright (c) 1997-2002
	BB4 Technologies Inc.  "Big Brother System
	and Network Monitor" is a trademark of
	BB4 Technologies Inc.  You agree to respect 
	these rights and leave all notices and product 
	references intact.

3.	REDISTRIBUTION

	This software may not be redistributed without prior 
	written permission from BB4 Technologies Inc.

4.	REQUIRED LINKS

	At least one link to the Big Brother System
	and Network Monitor home site at http://bb4.com
	must be available from the status pages
	generated by the Big Brother  System and
	Network Monitor so that others may obtain a 
	copy of this software.

5.	LIMITATION OF LIABILITY AND DISCLAIMER OF WARRANTY

	You understand that this software is provided as-is. 
	BB4 Technologies Inc. makes no claims towards its
	suitability for any purpose and accepts absolutely 
	no liability for any damages the software may cause. 
	Use at your own risk.

Questions? Comments? 

Contact:
	BB4 Technologies Inc.
     	E-mail: info@bb4.com
      	Tel: +1 (514) 996-INET
      	Fax: +1 (514) 996-0326

------------------------------------------------------------------------

Section 1: About Big Brother

1.1	What is Big Brother?

	Big Brother is a Web-based Systems and Network monitor written by
	Sean MacGuire (sean@bb4.com) and Robert-Andre Croteau (robert@bb4.com).

	Big Brother consists of simple shell scripts which periodically
	monitor system conditions and network connectivity.  Disk space,
	CPU, servers, and important processes can be kept track of.
	Unix and NT systems are supported  by BB4 Technologies Inc. 
	but we've heard of clients for Netware, /AS/400 and VMS.

	The Big Brother display is a Web page that presents a matrix of
	machines and monitored functions, with color codes denoting the
	current status.  

	Big Brother can notify administrators via a pager, e-mail or SMS.


1.2	Where can I get Big Brother?

	Big Brother is only available via the web at http://bb4.com/

	If you don't have Web access, drop a note to sean@bb4.com
	and a copy will be mailed to you.


1.3	What's the current version?

	The current version of BB is 1.9c / May 15th 2002.


1.4	What do I need to run Big Brother?

	Big Brother for Unix is written as Bourne Shell scripts (/bin/sh),
	with a couple of C programs for client-server communications.  You'll
	need:

	* A C compiler to port BB
	* A Web server to serve up the results

	For Paging, we recommend:
	* Kermit (http://www.kermit-project.org/) and a modem (for numeric pager communications)
	* Qpage (http://www.qpage.org) or Sendpage for Alpha pagers
	
	BB has been ported to and configuration files are available for
	most Unix and linux-based systems.

	Big Brother for NT requires Windows NT 4.0 with at least service
	pack 3 installed.  It is available for the Intel and Alpha platforms.


1.5	How do I install Big Brother?

	*** READ THE README.SECURITY FILE BEFORE PROCEEDING ***

	Unpack the archive, read the README.INSTALL and follow the
	instructions.  Basically
		cd install
		./bbconfig
		cd ../src 
		make
		make install
		cd ../etc/ 
			edit etc/bb-hosts, bbdef.sh, bbwarnrules.cfg, 
			and bbwarnsetup.cfg
		and start it 
			cd ..
			./runbb.sh start

	If you don't understand the above, read the README.


1.6	How can I upgrade?

	Save your old bb-hosts/bbwarnrules.cfg/bbwarnsetup.cfg
	files... then...

	Depends how much customization has been made to your version
	of Big Brother.  Generally, all you should have to do is 
	recompile, make the above changes, and copy your old version
	of etc/bb-hosts in. You may have to copy external scripts in
	ext/ if you are using some.


------------------------------------------------------------------------

Section 2: Debugging Big Brother


2.1	I get the message: "bb: CAN'T CONNECT TO bbd"

	This message indicates that an instance of bb can't
	connect to the Big Brother daemon.  This might be because
	bbd isn't running, or that bb can't determine where bbd
	lives because of some troubles with the bb-hosts file.

	So check the following things:

	* bbd is actually running on your system...
	* BBHOME is correctly set in runbb.sh...
	* Your bb-hosts file is formatted correctly
	* Your firewall isn't blocking port 1984

	Some errors can be caught by:

	cd etc
	run ./bbchkcfg.sh
	run ./bbchkhosts.sh


2.2.1	I get lots of processes, then bb dies!

	Define -DZOMBIE in the Makefile, recompile and run "make install".
	This seems to happen on some Solaris machines, and will definitely
	happen on SunOS 4.1.3, although 4.1.4 is OK!


2.2.2	bbnet test hangs 

	Define -DSIGSETJMP in the Makefile, recompile and run "make install".
	This seems to happen on some RedHat machines.  Signals aren't
	handled properly.    Could also happen on other Linux distributions.
	

2.3	I get garbage / my environment all over my screen

	This is almost always due to a problem with the way your bb-hosts
	file is laid out.  BB needs this file to be perfect to work, and
	any little problem with it will cause BB to fail. 

	The most common cause of this problem is pop3 being defined as
	pop-3 in /etc/services.  Make sure the spelling of all services
	in bb-hosts matches /etc/services.

	Make sure also that the BBDISPLAY/BBPAGER are defined only once in
	the etc/bb-hosts file.  Also make sure that the hostnames defined
	in etc/bb-hosts are the same as returned by 'uname -n'.


2.4	I get the message: "Can't open stream socket"

	This message is from bbd being unable to attach itself to port
	1984 and begin listening.  Make sure there are no "bb" processes
	running (bb, bbd).  If there are, kill them.

	Make sure port 1984 is also not in use.  To check this issue
	the following command:

		netstat -an | grep 1984

	If anything comes back, wait a few minutes and try again.
	Once this command returns nothing, you should be able to
	start up Big Brother.


2.5	conn (connection) test is always red / not working...

	The connections column is generated from the machine defined
	as BBNET in bb-hosts.  This machine tries to ping every IP
	address listed in the bb-hosts file. BB looks to see that the
	reply from ping contains the string "bytes from".

	Check that PING and PINGPARS are set correctly in etc/bbsys.sh
	or etc/bbsys.local.


2.6	http test is always red / not working...

	This is usually because the http test isn't for the same
	machine as defined on that line in the bb-hosts file, i.e.:

	Wrong: 204.101.110.101 fred.bobo.com # http://youre.bobo.com/
	Right: 204.101.110.101 fred.bobo.com # http://fred.bobo.com/


2.7 *	bbnet is dumping core

	Add a trailing slash at the end of the URL.  This is a programming
	bug by the author.   Fixed as of v.1.04g thanks to Doug White
	<dwhite@gdi.uoregon.edu>


2.8	Background color is always red / yellow / wrong

	The background color should reflect the most serious state
	on your network at any given time.  If it's not doing this, or
	the background color is wrong, it's because there are some
	leftover log file in the $BBLOGS directory (BBLOGS is
	defined in etc/bbinc.sh).  To check this, hit the
	VIEW button on the main web screen, and the offending
	entries should become visible.  Delete them.  They live in
	$BBLOGS and an HTMLized version is in www/html.


2.9	Pager problems

	The paging subsystem is really time sensitive.  It's possible
	that the timing be either too long or two short for your pager.

	The following comes from  Don Carney <dcarney@fmi.fujitsu.com>:
	In the etc/numeric.scr where it actually dials the number.
	the command is something like
		dial /@[3],,,,,,,,/@[4]
	my fix was to remove a few of the commas, and everything worked 
	fine.  (Commas are generally used by modems for short delays).

	Similarly if you're using one of those 800 number paging services
	you'll probably have to embed these commas in the pager number
	itself, something like:
		PAGER="1800PAGENET,,,,,,7777"
	where 7777 is your account number.
		

2.10	I've removed a host in etc/bb-hosts and the screen is purple

	After you remove a host(s) in etc/bb-hosts, you must remove the
	corresponding files in $BBLOGS, www/html and $BBHIST. BBLOGS and
	BBHIST are defined in etc/bbinc.sh

	cd www
	rm logs/thedeletedhost*
	rm html/thedeletedhost*
	rm hist/thedeletedhost*


2.11	The gifs aren't displayed properly

	Make sure that the BBWEB value defined in bbdef.sh is
	correct.  Check spelling and location. Defined it
	BBWEB="/bb" where /bb is the location in your web server
	docs directory.


2.13	Generating trace code to debug the notification feature

	If you're having problems with the notification feature and
	do not understand why it's not working, you can enable trace
	code to help you figure you what's going on.  Here's the
	steps to enable the trace code:

	in bbpage.c, right after the #include definitions, add

	#define DEBUG 1

	then 

	make bbd
	cd ..
	./runbb.sh stop
	rm BBOUT
	cp src/bbd bin/

	<make sure all BB processes are killed>

	./runbb.sh start

	Then when the next notification should have been sent out or
	whatever problem with notification has occured, take a look
	at BBOUT and follow the trace code.  You should get an idea
	of what's going on.

	Don't forget to remove the "#define DEBUG 1" and recompile
	bbd when you're all done or your BBOUT file will grow quite rapidly.



------------------------------------------------------------------------

Section 3: Using Big Brother



3.1	How can I monitor routers and things that have no hostname?

	Just put a line in the bb-hosts file and make up a name
	for your router.


3.2	Can I monitor Novell servers, VAXEN, AS/400 with BB?

	You can monitor them from the outside, but not from the 
	inside.  That means the bbnet tests that check for connectivity
	and servers should work, but the bb-local tests which monitor
	processes and disk space won't because there is no BB client 
	for these systems. 

	Without a client program for each platform you can still monitor
	connectivity and IP services.  Clients have been written for
	these platforms but BB4 Technologies Inc. doesn't support these
	3rd-party clients.  Please check with the mailing list for
	more info on these (http://support.bb4.com/).


3.3	Can I monitor things outside my network?

	Yup.  Just put the appropriate lines in the bb-hosts file and
	that's all.  However it is good form to ask permission, just
	because the remote admin may get curious about repeated accesses
	from the same addresses every 5 minutes, 24 hours a day.


3.4	Is Big Brother secure?  Do you have to be root to run it?

	A certain amount of effort has been made to make sure that
	BB is reasonably secure.  We also recommend running bb as
	it's own, non-root, user.


3.5	How can I monitor more TCP services?

	Add the TCP service in the list defined by the BBNETSVCS
	variable in etc/bbdef.sh.  That service must be in
	/etc/services or you must define it with its port number
	in the bb-hosts file.  That's it, that's all.  Simple.

	Stop and start BB. It'll magically have a new column
	watching your service. The TCP service that is checked
	should always return something at connection time to
	properly be checked.

	Only add TCP services as UDP services aren't supported yet.


3.6	How can I check password protected web pages?

	Paul Venezia had the answer for this one:
	I've gotten around this by specifying LYNX to be
	/usr/contrib/bin/lynx -dump -auth <username>:<password>


3.7	Can BB restart processes that have failed?

	No, that is your job. BB will tell you about the problem, you
	solve it.  The philosophy is simple, BB will monitor and notify,
	that's all.  The reason behind this is simple, doing more than
	that makes BB exponentially more complex to run, configure and
	support.


3.8	Can BB show historical data?

	Yes.  The history is in the $BBHIST directory: the file contains
	the date of the last color change.  If you drill down to a
	specific host.service, you can click on the history button, and
	it'll show your the last 24hr statistics and a log of the last
	50 status changes.


3.9     How can I add my own tests ?

        You can easily add your own tests.  Start with the template
        available at ext/ext-proto, add your code.  Look at bb-local.sh,
        bb-network.sh for an example on how to send data to BB.
        Specify the name of your script in the etc/bb-bbexttab
        file. This file defines all scripts to run for each hosts.
        Start with the etc/bb-bbexttab.DIST file, copy to
        etc/bb-bbexttab and configure. Typical entries in
        etc/bb-bbexttab:


        www.bobo.com : script1 script2;3600 script3;900 script4
        www.baba.com : script5 script6

        make sure each defined script exists in the ext directory
        of the client install.  See below for an explanation of
        the script2;3600 entry.

        Restart BB and your test should be running.  But
        before you use it within BB, I suggest you test it for errors
        by using the method:

        cd /home/bb (or wherever your BB is located)
        BBHOME=/home/bb
        export BBHOME
        . ./etc/bbdef.sh
        cd ext
        ./yourexternaltest

        Look for errors, fix them, rerun your test until you're
        satisfied, then update bbdef.sh.  Note that all temporary
        files should be created in $BBTMP and make sure you remove them
        after use.   Also, remember that you don't have to deal with
        sending notification messages, the 'bb' process send a 'page'
        type message to the BBPAGER host when the status color is
        found in the PAGELEVELS variable defined in bbdef.sh.

        You can also set the frequency of the test by specifying
        the interval it should run at.  In ext/bb-bbexttab, set an
        interval qualifier with the script name by appending the
        qualifier to the script name. Here's an example entry in
        etc/bb-bbexttab:

        www.bobo.com : script1 script2;3600 script3;900 script4

        script1 and script4 will run every 5mins (the default)
        while script2 and and script3 will run every 60 and 15
        minutes respectively.  You specify the interval in seconds.
        Note that the delimiter is ';'.

        When it's ready don't forget to update the svcerrlist token
        in the bbwarnsetup.cfg file on your BBPAGER host.  You must
        assign a numeric code to your column name.

        You can also set the lifetime of the status sent by your
        script by following the instructions described in
        section 6.8: "Setting a Time To Live to a status message".


3.10    Can I check for errors in multiple log files ?

	You can set multiple log file names in the MSGFILE variable
	in etc/bbsys.local.  The log files will be checked that
	they are readable and not empty.  The empty test is done
	because some hackers sometimes link log files to /dev/null.


3.11     Starting BB at system boot
        
        Depending on U*X operation system version (Linux/BSD/Solaris/...)
        your startup procedures will vary from OS to OS.  In short, you
        have to create a startup script that has a start/stop
        capabilities.  Under a lot of OSes, you'll want to create your
        script in the init.d directory and create an S89bb link in rc3.d that
        links to init.d/S89bb (you may also want to create a K11bb link in
        rc3.d that'll be used when the system shuts down).  Use an existing
        startup script has an example and substitute with these commands:

        To start BB, use this command:

        su - <bbuser> -c "cd <BBHOME>;./runbb.sh start" 
                or
        su - <bbuser> -c "cd <BBHOME>;./runbb.sh restart"

        To stop BB, use this command:
        
        su -  <bbuser> -c "cd <BBHOME>;./runbb.sh stop"

        <bbuser> is the user that BB will execute has
                make sure that bbuser has all permissions under BBHOME
        <BBHOME> is the location of your BB install

        e.g. su - bb -c "cd /home/bb;./runbb.sh start"


3.12    Why is availability reporting not working ?

	If you get a "Page not found" when running the availability
	reporting feature, you probably have an invalid group name
	set for $BBHOME/www/rep.

	The group name of $BBHOME/www/rep must be set to the group
	id of the user that the web server is running as.  Do not
	set the $BBHOME/www/rep permissions to 777 as this may
	represent a security risk.  Only set the group name of
	$BBHOME/www/rep.
        


------------------------------------------------------------------------

Section 4: Miscellaneous Big Brother questions


4.1	Where is the name from?

	Big Brother is named for George Orwell's novel Nineteen Eighty Four.  
	Big Brother is the head of a totalitarian regime, INGSOC, where
	everyone is watched.  "... the poster with the enormous face
	gazed from the wall.  It was one of those pictures which are
	so contrived that the eyes follow you about when you move.
	BIG BROTHER IS WATCHING YOU, the caption beneath it ran."

	Doubleplus ungood for people.  Doubleplus good for networks.


4.2	Do you write BB or bb?

	Doesn't really matter.  bb tends to be used when denoting
	programs (i.e. bbnet) whereas BB tends to be used when 
	discussing the entire Big Brother system.


4.3	Whose picture is that and can I get rid of it?

	That picure is of the creator of Big Brother, Sean MacGuire,
	doing his best to do justice to George Orwell.  It's supposed
	to be scary.... it now lives exclusively at the bottom of the
	BB help files.

	If you don't like it, feel free to change it to something more
	neutral.  Change the file $BBHOME/www/gifs/bb.gif.  Please leave
	a link back to the BB site, though.
	

4.4	Is there a Big Brother Mailing List?

	Yes, please subscribe by sending e-mail to MajorDomo@bb4.com.

	In the body of the e-mail message (not the Subject line),
	place the statement: 

		subscribe bb <INSERT-YOUR-EMAIL-ADDRESS-HERE>

	An archive of the Big Brother mailing list available.
	It can be found at the URL: http://support.bb4.com/ 


4.4	Is there a Big Brother FTP site?

	Yes, Adam Goryachev has set up an ftp site with user
	contributed tools.  You can find it at:

	ftp://ftp.deadcat.net/pub/BB
		or
	http://www.deadcat.net/


4.5	Where can I get more help?

	Run the tests as outlined on the install and debug web pages.

	Subscribe to the mailing list.  Check the archives of the
	mailing list to see if you're question has already been 
	answered.  Send a message to the mailing list, and as a
	last resort, mail sean@bb4.com



------------------------------------------------------------------------

Section 5: Security Considerations

We care about security, and have a "full disclosure" policy.  That
means if a security problem is discovered, we'll disclose it promptly
to the BB mailing list, Bugtraq, and Freshmeat.net.  The reason for
this is simple, if we know about it, so do the bad guys, and they're
already exploiting it.

If we issue a security alert, please follow the instructions if
you're at risk.  If you discover a hole, please let us know 
immediately, and we'll fix it right away.  You will earn our
undying gratitiude.

The following suggestions are mostly targeted as BB display and pager hosts.
These are the Big Brother daemons, and as such are higher risk than
the simple clients.  If you have any additional suggestions, please
pass them along!

* Never install network software without considering the security
  implications.  If you have a security person, discuss it with them.
  If not, talk nicely to your Sys Admin.  If you're the Sys Admin,
  feel free to give us a shout on the BB mailing list if you have any
  questions.

* Since you're probably running a Web server on the BBDISPLAY machine
  you might consider making sure it's secure.  Even Apache has gotten
  broken into, just from a misconfigured web server.  Beware!

* BB does not need to run as root.  We suggest creating a user 'bb'
  and running bb as that user.

* BB has the ability to restrict incoming connections to those IP
  addresses (and networks) listed in the etc/security file.  Use it.

* If you're in an environment with a firewall, we suggest running
  two instances of BB, one on this inside of the firewall, and one
  on the outside.  This keeps things clean, and doesn't require any
  unnecessary holes in the firewall.

* The usual warnings about scripts in the cgi-bin directory... make
  sure that your webserver isn't running as root, and be careful what
  can be seen and run by outsiders.

* We recommend password-protecting the Big Brother web pages

* Don't compile in the "notes" and "disable/enable" features of
  the BB display/pager hosts unless you understand the implications.
  Refer to the documentation for more information.

* Subscribe to the BB support mailing for support, security updates
  and other news:

	mailto: majordomo@bb4.com
	in the text of the message: subscribe bb

	There's also a developer's mailing list:
	mailto: majordomo@bb4.com
	in the text of the message: subscribe bbd




© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-man.html0100644002342100007640000031730307616533100014040 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Installation and Configuration




	       The Big Brother Systems and Network Monitor
------------------------------------------------------------------------
		  Installation and Configuration Manual
		    Version 1.9c - May 15th 2002
------------------------------------------------------------------------

1.0	Quick and Dirty Install for Big Brother

	1.1	Installing Big Brother
	1.2	Upgrading BB
	1.3	Compiler directives

2.0	Configuring the BB hosts file

	2.1	The etc/bb-hosts file
	2.2	Basic format of etc/bb-hosts
	2.3	etc/bb-hosts special directives
	2.3.1		Display results in another HTML page
	2.3.2		Display "page" results into an HTML subpage
	2.3.3		Grouping hosts on the display (HTML tables)
	2.3.4		Sending a summary to another BBDISPLAY
	2.3.5		Testing Modem Banks
	2.3.6		Specifying DHCP hosts (no fixed IP address)
	2.4	Validating your etc/bb-hosts file
	2.5	Pointers for writing entries in bb-hosts

3.0	Customizing your BB installation

	3.1	The runbb.sh script
	3.2	Configuring the etc/bbdef.sh file
	3.3	Localizing programs paths
	3.4	Creating BB clients
	3.5	Configuring the Web Stuff
	3.6	History
	3.7	Adding your own tests
	3.8	Starting BB at system boot
	3.9	Summary of BB protocol
	
4.0	Configuring the Notification feature

	4.1	A Little History
	4.2	Setting up notification
	4.3	Creating notification rules
	4.4	Acknowledging notification messages
	4.5	Manual notification (Web based)
	4.6	SMS notification
	4.7	Using kermit
	4.8	Adding a custom notification
	4.9	Notification/acknowledgement logs
	4.10	Disabling notifications temporarely
	4.11	Acknowledging a notification by e-mail
	4.12	Displaying acknowledgements

5.0 	Customizing your Big Brother display

	5.1	HTMLized status logs
	5.2	headers / footers (for reports too)
	5.3	Creating skins
	5.4	Inserting notes about your hosts
	5.5	Extending the contents of the main HTML pages
	5.6	Extending the contents of the history HTML pages
	5.7	Working with historical logs
	5.8	Hiding the bb.html/bb2.html page header
	5.9	Pre-defined anchors in bb.html

6.0 	Miscellaneous Big Brother configuration options & tools

	6.1	Specifying filesystem specific values in the disk test
	6.2	Enabling security
	6.3	Using bbnet to test TCP services
	6.4	Sending custom one line status with bb
	6.5	Changing the 'purple' interval
	6.6	Specifying processes to look for
	6.7	Sending arbritary data to a BBDISPLAY(s)
	6.8	Disabling the messages file(s) zero-length test
	6.9	Setting a Time To Live to a status message
	6.10	Disabling the connectivity test
	6.11	Reducing connectivity errors
	6.12	Setting up BBPAGERs and BBNETs host in failover mode
	6.13	Speeding up the network tests
	6.14	Enabling WML ouput (WAP browsing)
	6.15	Having BB notify you to reboot a server after is has been up XXX days
	6.16	Using an alias name for the current host in etc/bb-hosts
	6.17	Specifying CPU threshold values
	6.18	Configuring messages file testing
	6.19	Using the combo message
	6.20	Tools to manage Big Brother data
	6.21	Sending a BB message in cron
	6.22	Defining characters that BB accepts in a status message
	6.23	Integrating a LARRD graph with a status log

7.0 	Other documentation sources



------------------------------------------------------------------------
This Installation and Configuration Guide is
© Copyright Quest Software, Inc.  1997-2002  All rights reserved.
------------------------------------------------------------------------



------------------------------------------------------------------------

Section 1: Quick and Dirty Install for Big Brother


1.1	Installing Big Brother

WARNING: For security reasons, it is best to install and run
	 BB as its own user and not as root.   (but use the
         root account during the install process, at the end
         you'll change ownership to the chosen BB user ID)

*** READ THE README.SECURITY FILE BEFORE PROCEEDING ***

You've extracted the BB archive and this is the directory
structure that was created:

bbnewversion/		(i.e.  bb18/) referred as $BBHOME
bbvar/acks/		referred as $BBACKS
     /data/		referred as $BBDATA
     /disabled/		referred as $BBDISABLE
     /hist/		referred as $BBHIST
     /histlogs/		referred as $BBHISTLOGS
     /logs/		referred as $BBLOGS

1.      cd bb<newversion>		(i.e.: cd bb18)
	This is often referred to BBHOME or $BBHOME
	cd ./install
	./bbconfig <OS-NAME>
        where OS-NAME is  bsdi sco3 sco freebsd solaris hpux9 hpux
                                linux sunos netbsd osf ultrix irix
                                unixware redhat aix dynix debian dgux
				caldera mandrake
	Note that <OS-NAME> is optional, BB will try to figure it out.
	If you are running Linux you may have to provide the proper
		distribution name:

		./bbconfig readhat
		./bbconfig debian
		./bbconfig caldera
		./bbconfig mandrake
		./bbconfig linux

        If you're not running one of the above, read the install/README
        ./bbconfig will ask you questions about your setup
        be ready with:
                BBHOME: directory where BB resides
                        (usually the choice given by BB is correct)
		Should the old-style structure be kept
                If you intend to use FQDN(Fully qualified domain names)
                Which host(s) is(are) the BBDISPLAY(s)
                Which host(s) is(are) the BBPAGER(s)
                If the current host is a BBDISPLAY/BBPAGER
                Default e-mail recipient for notification
                URL you intend to view BB with
                URL of the BB CGI scripts
		The user id of your web server 


2.      cd ../src
        type "make"
        then type "make install"

        If you have trouble compiling, refer to the README file
        located at src/README

        for those who are upgrading then go to "upgrading BB" section

3.      cd ../etc

        edit bb-hosts, put your hosts names in there.  Refer to install/README.
        This is the core of Big Brother.  You must read the docs here.
        edit bbdef.sh, set alarm levels and things.  If you want to use
        fully qualified domain name hosts then make sure you set FQDN=TRUE
        in etc/bbdef.sh.  If this is the first host you install and intend
        to use it as the display/notification server as well as the server
        that tests the network services then your bb-hosts should contain
        this line:
    
        xxx.xxx.xxx.xxx this.host.name  # BBDISPLAY BBPAGER BBNET


4.      ./bbchkcfg.sh
        Checks the bbdef.sh/bbinc.sh/bbsys.sh source scripts for invalid entries

        ./bbchkhosts.sh
        Checks the bb-hosts file for errors

5.      cd ../..
        ln -s bbdir bb		where bbdir is the new version
				directory (e.g. ln -s bb13a bb)
        This is useful as you don't have to change the directory in your
        startup script. (see section 11)

	cd bb
	chown -R bbuser	.	where bbuser is the user you defined
				in the install process. This makes sure
				that the bbuser can write/read into
				the BB directory structure as you will
				probably install it while in the root account.

	cd ..
	chown -R bbuser bbvar

6.      ln -s /full_path_to_bb/www /WWW/bb (where /WWW is the Document Root dir).
        Make sure the permissions are correct.  Configure your web server
        for this directory if need be.
        Also make sure that your web server follows symbolic links
        
7.      cd bbdir		where bbdir is the new version directory (e.g. bb13a)
	or
	cd bb			if you've followed section 5
        ./runbb.sh start        
        examine the BBOUT file for any errors. By default the BBOUT log file
	is located in $BBHOME.  The location of BBOUT is defined by the value
	of the BBOUT variable in bbdef.sh

        NB The HTML summary pages (bb.html/bb2.html) should be available
        2 minutes after the startup.  Don't panic the'll be there if
        you are patient. In your browser, you should be able to
        see the results at http://yourwebhost/bb/ or    
        http://yourwebhost/bb/bb.html  (assuming you used /bb as BB URL root)

8.      Debug, and look at all the docs.
                
9.      Check the online documentation!  It lives under:
        http://bb4.com/bb/bb-help.html
                
10.     This will have enabled you to have a display/pager server set up.
        At this point no clients are running.  When you have all of
        your hosts defined in etc/bb-hosts then
        use install/bbclient to create a tarball for BB clients of the same
        OS/HW type.  If you have different OS/HW platforms then
        reinstall BB on each one (then use the bbclient to create a tarball
        for each identical OS/HW client) and don't forget to copy your master
        bb-hosts file to it. Run through the install procedure to make
        sure that the clients are also installed properly(bbchkcfg.sh/bbchkhosts.cfg)

11.     If you wish to start BB automatically at startup, we suggest the
        following command in your startup script:
        
        su - <bbuser> -c "cd <BBHOME>;./runbb.sh start"

        <bbuser> is the user you chose at install
        <BBHOME> is the directory in which you installed BB
                 or where you've created the bb directory link
                 as per section 5. (e.g. bb18/)


If you're new to BB, we suggest that you  subscribe to the
BB mailing list.  To do so, follow these instructions:

Send an e-mail to MajorDomo@bb4.com
In the body of the e-mail message (not the Subject line),
place the statement:

    subscribe bb

Nick Silberstein has made an archive of the Big Brother
mailing list available.  It can be found at the URL:
http://www.tpdinc.com/~bb/

When you have finished installing BB on all of your
monitored hosts, you might want to check out the FTP archive
that contains many contributed scripts.  Check it out
at ftp://ftp.deadcat.net/pub/BB

Sans '98 & '99 presentations are available at
http://bb4.com/propaganda.html.  These presentations
may fill in some details.




1.2	Upgrading BB

	If you are upgrading from a previous version then do these steps after
	the preliminary install of BB:

	If your previous version of BB was pre-1.5 then follow these next steps
	otherwise jump to 1.2a.

	We assume that the BBVAR/BBLOGS/BBHIST/BBHISTLOGS/BBDATA/BBDISABLE/BBNOTES
	weren't modified in $BBHOME/etc/bbinc.sh.

	cd BBTOP/bbvar	(BBTOP is where you unpacked BB)
	rm -r logs acks hist histlogs notes data disabled
	mv OLDBBHOME/www/logs .         
	mv OLDBBHOME/www/acks .         
	mv OLDBBHOME/www/hist .         
	mv OLDBBHOME/www/histlogs .
	mv OLDBBHOME/www/data .
	mv OLDBBHOME/disabled .


1.2a	BB upgrade steps

	cd <bbdir>      where <bbdir> is the directory of the new install
                                    (where BBHOME points to)
	cd www
	rm -r notes
	# Replace OLDBBHOME by the full path of BBHOME defined in your previous install
	mv OLDBBHOME/www/notes .
	cd ..   

	cd ext                          If you have external scripts
	cp OLDBBHOME/ext/* .		!!!!! Only copy your scripts
	cp OLDBBHOME/ext/hist/* hist/	!!!!! Do not copy the basic scripts
	cp OLDBBHOME/ext/rep/* rep/	!!!!! included in the archive
	cp OLDBBHOME/ext/mkbb/* mkbb/
	cd ..

	cd etc  
	cp OLDBBHOME/etc/bb-hosts .             Depending of your current setup
	cp OLDBBHOME/etc/bbwarnrules.cfg .      copy and edit appropriate config files
	cp OLDBBHOME/etc/bbwarnsetup.cfg .
	cp OLDBBHOME/etc/bb-dftab .
	cp OLDBBHOME/etc/bb-proctab .
	cp OLDBBHOME/etc/bb-cputab .
	cp OLDBBHOME/etc/bb-bbexttab .
	cp OLDBBHOME/etc/bb-msgstab .
	cp OLDBBHOME/etc/security .

	vi bbdef.sh			Set environment variables for your setup
					like FQDN, ...
	vi bbinc.sh			It is always useful to run a diff getween
					your old version of bbdef.sh/bbinc.sh
					to  view your own changes
	cd ../..
					if you already have a link called
					bb used to access your BB install
	rm bb 
	ln -s <bbdir> bb          Setup bb as a link to the new bbdir
					directory such that it's easier
					to refer rc scripts to bb/ without
					having to change them every time
					you upgrade.

	Finally don't forget to move over the extensions you've installed
	(lardd, "The State", ...)


1.3	Compiler directives

	You change the behavior of BB  by compiling it
	with different compiler options.  All the options are
	defined in the CFLAGS variable on the Makefile

	-DENABLE_DISABLE
		Include code to temporarely disable notifications on a host
	-DDATAMSG
		To allow "data" messages type
	-DNOTESMSG
		To allow "notes" messages type
	-DBZERO
		If your OS doesn't support the bzero() function
	-DZOMBIE
		If zombie processes are generated while running BB
		This will get rid of them
	-DGETTIMEOFDAY
		To get duration statistics during TCP service checks
	-DREGEXEC
		If your OS supports regexec(),regcomp()
	-DREGEX
		If your OS support regex(),regcmp()
	-DRE_EXEC
		If your OS supports re_exec(),re_comp()
	-DTIMEH
		If your OS has time.h instead of sys/time.h
	-DSIGSETJMP
		If your OS supports sigsetjmp() and
		does not handle signals properly with setjmp()
	-DDONTCLEANSTRING
		If you don't want BB to remove dubious
		characters in incoming messages: `$;|&\
	-DNOTAMP
		If you don't want BB to remove '&' in an incoming
		message. You'll require this if you install the LARRD
		extension.



------------------------------------------------------------------------

Section 2: Configuring the Big Brother hosts file


2.1	The etc/bb-hosts file

	The etc/bb-hosts file controls where Big Brother looks for things
	and the actions that are taken.  The format is identical to the 
	standard /etc/hosts file, except with additional directives
	for Big Brother.

	The etc/bb-hosts file should be kept identical on all BB client
	hosts as to reduce the risk of misconfigured bb-hosts file.
	Even though clients only require entry lines for BBDISPLAY,
	BBPAGER and the local client, it is recommended that you distribute
	a master bb-hosts file to all clients.  The only time you should
	not have an identical bb-hosts file is if you decide to have more
	than one BBNET host, in this case each BBNET host should only
	have tested entries in its bb-hosts file and those entries
	should not appear in any other BBNET host.


2.2	Basic format of etc/bb-hosts

	Lines are of the format:

	IP-ADDR		HOSTNAME	# DIRECTIVES

	IP-ADDR: XXX.XXX.XXX.XXX

	HOSTNAME: host.domain.com	if FQDN="TRUE"
		  host			if FQDN=""

		FQDN (display with Fully Qualified Domain Name) is a
		variable that you set in the etc/bbdef.sh file.

	Directives the Big Brother knows about are:

		BBDISPLAY	This host displays the HTML results

			This host receives incoming status reports, generates the
			HTMLized status reports, the bb.html and bb2.html web pages.
			There may be more than one BBDISPLAY if you want redundancy.
			BBDISPLAY host execute the bbd daemon to collect reports, and run
			the web/mkbb.sh & web/mkbb.sh scripts to generate the bb.html
			and bb2.html pages.  You'll need a Web server on this host
			to display the results.

		BBPAGER		This host acts as the notification server

			This host receives requests to notify admins and processes
			those requests.  There may be more than one BBPAGER as well,
			for redundancy.  Of course, you'll be notified more than once
			per problem.  BBPAGER hosts likeweise run the bbd daemon so they
			can receive notification requests.

			To requests more than one BBDISPLAY/BBPAGER host, put the
			BBDISPLAY/BBPAGER directive on the config line for each host
			that acts as BBDISPLAY/BBPAGER.

		BBNET		Indicates that this host checks
					the ip network services 

			Many hosts can act as a BBNET.  If you do have more than
			one BBNET, make sure that the bb-hosts file only
			contains the hosts that you will test against.  You must
			be very careful because if a host is tested by many
			BBNETs then the status display for the services on
			that host will only show that last test status.
			You may get errors for that host even though it shows
			green, it's just that another BBNET send a status message
			afterwards and that message returned OK. On the other
			hand you may want to have tests from different location :)

		BBRELAY:<hostname or IP address> 	The host defined is a relay host

			This host will be relayed all incoming messages from
			any BBDISPLAY/BBPAGER hosts that has this directive defined
			on the same line as the BBDISPLAY/BBPAGER.
			So if a BBDISPLAY/BBPAGER entry in the bb-hosts file
			also contains a BBRELAY:<hostname|IP addr> directive
			then that host will be relayed all incoming messages
			from the current BBDISPLAY/BBPAGER. This is useful
			if you are moving a BBDISPLAY or a BBPAGER and you
			don't want to change all the BB clients bb-hosts files
			at once.

			1.2.3.4   host1.domain99.com # BBDISPLAY BBPAGER BBRELAY:4.3.2.1

			Host 4.3.2.1 will be sent all incoming messages that 1.2.3.4 receives.

		http://www_path	The host is tested for http connections
					using the www_path
		https://www_path The host is tested for https connections
					using the www_path
			(requires lynx: http://lynx.browser.org/ or curl:  http://curl.haxx.se/ )

			Note that you can specify multiple URLs by joining the
			URLs with '|':
				http://www_path|http://www_path1
			or by specifying them individually:
				http://www_path   http://www_path1

		ftp		Test for ftp service
		smtp		Test for smtp server
		pop3		Test host for pop3 server
		telnet		Check telnet service
		ssh		Test ssh server
		nntp		Test nntp news server
			Check /etc/services for proper service name
			especially pop3 (sometimes referred as pop-3).
			These directives names MUST appear in /etc/services
			of the BBNET host that is doing the testing.
			Any text based service can be checked by putting
			the /etc/services name as the directive and adding
			in the list of services in the BBNETSVCS variable
			of etc/bbdef.sh. (See below for TCP ports that are
			note in /etc/services) By default, the test sends
			the "QUIT" string the to the tested service.

			The '!' can be prefixed to a service such it will
			be checked that the service is NOT running (!ftp).

			The '?' can also prefix a service.  This prefix
			indicates that the service is considered a
			dialup service: it will generate a clear button
			if the service is down. NOTE: the ! and the ?
			prefixes can only be used with the basic TCP services
			that are handled by the bb-network.sh script.
			http* and dns/dig tests cannot use these prefixes.

			The :s , :q and :Q tags can be added to the directive
			by appending them to the directive: ftp:s or ftp:s:q
			This will enable special options to the bbnet
			program that does the TCP tests.
			:s - Just connect to the port, do not engage in
				a converstation with the service tested (silent)
			:q - Do not return timing statistics if you've
				enabled them (quiet)
			:Q - Do not return error messages usually returned
				by the bbnet program.

			You can also add a custom TCP port to test. You
			have to define the network service name in the
			BBNETSVCS variable of etc/bbdef.sh.
			In the bb-hosts you declare that new TCP test by
			putting in entry in this format: svcname:portnumber
			i.e.  mytest:1234 - Test port 1234 and return
			it with the mytest status name

		dns		Checks for name resolution server
		dig		Same check as dns but using the dig
				command if the command is available.

		noping		Don't do ping test for this host
					and display a clear dot.
		noconn		Don't do ping test for this host and
					don't generate any colored dot
		dialup		If host is down then display a clear dot
					otherwise display a green status

		testip		Use the IP address defined to execute network
				test.  Don't use the hostname given.

		bbd	Test a remote BBDISPLAY/BBPAGER

		You can add your own directives that you access through an
			external test.  Known directives from user contributed
			tests: oracle/fping/trap/sybase/...  These contributions
			can be found on the user contributions archive.
			(www.deadcat.net)

	This is a sample bb-hosts file:
	#
	# BIG BROTHER HOSTS FILE
	#
	192.168.110.102	bobo	 	# BBDISPLAY BBPAGER ftp smtp pop3
	192.168.110.95	admin		# http://admin/
	192.168.110.108	mynet		# BBNET !nntp

	bobo is the display and notification server.
	mynet is the host that runs ip network services checks
		it will check the ftp/smtp/pop3 services on bobo,
		then the http service on admin and finally it makes sure
		that nntp is NOT running on mynet

	You can also group hosts within a seperate HTML table.  There
	are three group tags defined: group, group-compress and group-only.
	Results can also be saved to a specific page using the 'page' directive.

	Changes to the etc/bb-hosts file are automatic.  You do not
		have to restart BB to initialize the changes except if you
		make changes to BBDISPLAY/BBPAGER/BBNET locations.


2.3	etc/bb-hosts special directives


	2.3.1	Display results in another HTML page
		page nyrouters New York Routers
	
		BB always creates two HTML pages: bb.html/bb2.html.
	When the "page" directive is encountered, BB will then create a new
	HTML page until another "page" directive is encountered and will save
	the output from that point on to that new HTML page.  It will keep a pointer
	of the new HTML page in bb.html.  The first argument is the directive,
	the second one is the name of the page (i.e. nyrouters.html
	as the .html tage is automatically added) and the remaining
	arguments is the caption that will appear in bb.html when it
	creates the link to that page.  Always place your page directives
	after all hosts that you want to appear in the bb.html page.
	When you use a page directive then all subsequent output will
	be in an HTML page (the current one or a subsequent page directive)
	Each HTML page will be created in it's own directory to enable
	password protection (using your web server's features) based
	on the directory.

	N.B. summaries and dialup directives will always appear on
		bb.html/b2.html and not in any HTML subpages


	2.3.2	Display "page" results into an HTML subpage
		page nyrouters New York Routers
		subpage manhattan Manhattan Routers
		...
		subpage queens Queens Routers
		...

		BB allows up to 3 levels of HTML display pages.
	The top pages bb.html and bb2.html.  Another level using the
	"page" directive and finally the last level defined by
	the "subpage" directive.  This will create a link in the
	current HTML page (created with "page") to a subpage.
	The subpage is created in it's own directory (as in "page").
	It allows you to create a directory structure where there
	can be up to 3 different views.  A topmost with bb.html/bb2.html.
	The next level with the "page" directive and the lowest level
	created with the "subpage" directory.  This should be ample to
	secure the different views with user/password protection.
	

	2.3.3	Grouping hosts on the display (HTML tables)

		The Web display may be broken into tables to create
	a more aesthetic and sensible display.  It's also much faster
	to load small tables, than one giant table.  So consider 
	grouping your etc/bb-host entries logically and separating
	them using the "group" , "group-compress" or "group-only" directives.

		group Intranet Servers

		The group directive defines a block of hosts to be grouped
	in the same HTML table.  All hosts lines following the group
	directive, until a new group/group-compress is defined, belong 
	to that group.

		group-compress California Servers

		The group-compress is identical to the "group" directive
	except it will only display services (columns) containing data
	for that group.

		group-only  conn|cpu|disk   Restricted Services

		The group-only will create a table with only the colums
	defined in the directive.  The columns are '|' delimited.

	Note that the text that follows the prevous directives is the
	title given to the HTML table.  Note that you can embed HTML
	code in the title: Italic/H3/etc..., but use with caution:

	group <I>Intranet Servers</I>
	group-compress <I><H3>California Servers</H3></I>
	group-only  conn|cpu|disk   <B>Restricted Services</B>


	2.3.4	Sending a summary to another BBDISPLAY
        	summary quebec.bb 255.255.255.255 http://cafe.domain.com/bb/bb.html
        	summary quebec.bb2 255.255.255.255 http://cafe.domain.com/bb/bb2.html
	
		This indicates to the BBDISPLAY machine that
	summary information of the bb.html, bb2.html, an HTML page
	or an HTML subpage be forwarded to the IP address noted
	by the 3rd item on summary line line.  The summary can be
	sent to more than one BBDISPLAY.
	N.B. summary directive from other BBDISPLAYs (or the current
		one) will always appear at the bottom of the
		 bb.html/b2.html and not in any HTML pages/subpages.


	2.3.5	Testing Modem Banks
		dialup modem-bank 204.19.116.20 4

		The dialup directive (not to be confused with the other
	dialup tag which displays a clear button if the host is down)
	is used to specify connectivity for a bank of modems.  The
	2nd parameter is the name to be displayed on the display page.
	The 3rd argument is the starting IP address of the modem bank.
	The last argument is the number of modems on that bank.
	A green dot will be displayed for IP addresses that are currently
	used and a clear dot will be displayed if the IP address
	is not used.  Note that this test can take a long time if
	your modem banks have many unused modems as the test will
	time out to determine the connection status.
	N.B. dialup directive output will always appear at the
		bottom of bb.html/b2.html and not in any HTML
		page/subpages.


	2.3.6	Specifying DHCP hosts (no fixed IP address)
		0.0.0.0	dhcphost.domain	# 

		The 0.0.0.0 indicates that this host is a DHCP
	host and that the BBNET host will not try to run the
	connection test on that host using the IP address but only
	the hostname.


2.4	Validating your etc/bb-hosts file

	You can validate the etc/bb-hosts file by executing the

	etc/bbchkhosts.sh

	command.  Note that it is a simple check and sometimes
	may complain about invalid qualifiers especially if they
	are associated with user contributed scripts.  Also in some
	cases the script will complain but also mention that the
	error might not apply.  Read the output carefully.


2.5	Pointers for writing entries in bb-hosts

	If you are going to use the same hostname in multiple
	entries then use the "noconn" directive for all entries
	for that hostname except the first entry.

	1.2.3.4  some1.host # ftp smtp
	2.3.4.5  some2.host # ftp smtp
	...
	group-only ftp All ftp servers
	1.2.3.4 some1.host # noconn
	2.3.4.5 some2.host # noconn

	The first entry indicates all the tests to run while
	the second entry is used only as a display definition.



------------------------------------------------------------------------

Section 3:  Customizing your BB installation


3.1	The runbb.sh script

	The runbb.sh script is the master BB script.  It sets up the
	BB environment with the values from the configuration files.

	You MUST set the BBHOME variable to the directory path where
	you have installed BB.  Without it, BB will not run properly.

	cd $BBHOME  (to your BB install directory)

	To start BB:

	./runbb.sh   or    ./runbb.sh start

	To stop BB:

	./runbb.sh stop

	To restart BB:

	./runbb.sh restart

	When BB starts/restarts it checks that there is no processes
	already running.  If this is the case, BB will complain but
	will continue to start as it cannot determine if the process
	was really started by BB.  BB checks for any processes that
	contain the BBHOME in its definition.

	If you ever have to add a script that runs as a deamon use
		the following template to add it in runbb.sh:

	echo "Starting snmptrapd"
	echo "Starting snmptrapd" >> $BBOUT
	MIBFILE=$BBHOME/cmu/etc/mib.txt
	export MIBFILE
	$BBHOME/cmu/bin/snmptrapd -B | $BBHOME/bin/bb $BBDISP - &
	set `$PS | $GREP snmptrapd | $GREP -v "$GREP"` > /dev/null
	echo $1 >> $BBPID
       
	This is from an SNMP trapd extension available at the FTP
	archive site (ftp://ftp.deadcat.net/pub/BB).  You'll notice
	that the PID is added to $BBPID,  This way, you'll be
	able to stop the extension at the same time as BB when
	executing "runbb.sh stop".



3.2	Configuring the etc/bbdef.sh file

	etc/bbdef.sh is where you configure how Big Brother reacts to a 
	variety of situations that may arise.  You can establish levels
	for warnings(yellow), panics(red) values.

	Please note that any modifications to this file do not come
	into effect until the next restart of BB.  It is best to
	stop/start BB immediately after this file has been modified.

	BBUSER is the user name that BB should run as.  If you
	try to start BB using a different used than the one
	specified in BBUSER, BB won't start.

	STOPROOT prevents you from starting BB as root.  It is
	recommended to you set STOPROOT=TRUE.

	Use FQDN (fully qualified domain naming)
	FQDN="" - Host names rendered on the BB status pages will only
			include the host name, not including the domain
			name.
	FQDN="TRUE" - Host names rendered on the BB status pages will
                        include the host name and the domain name.

	Which program to use to check the HTTP connectivity:
	LYNX="/usr/local/bin/lynx -dump -head" - Use lynx if you need to
		check password protected pages.  Please use the proper
		directory path as per your host installation. cUrl
		(another program) can also be used to check for
		protected pages.
 	
	NONETPAGE defines which IP services not to notify on if an error
		is encountered.  Include the services as they are named
		in the etc/bb-hosts file.  This is only valid on a host
		defined as a BBNET host.

	BBTMP indicates the location of the BB temporary directory. You
		may want to locate it outside of the BB structure.

	BBREPWARN specifies the value at which the reporting feature
		returns red or yellow.  Reporting will return green
		if 100% availability is determined, will be yellow
		until it reaches the value of BBREPWARN and then
		will return red below that value

	The DFWARN and DFPANIC variables contain the % levels at which
		the disk test will fail.  By default DFWARN is 90% and
		DFPANIC is 95%.  These values can be overriden by values
		in the etc/bb-dftab file described in section 5.2.

	CPUWARN and CPUPANIC are default levels based on the load
		average.  CPUWARN is set at 150 and CPUPANIC at 300.
		These values are the load average (from uptime)
		multiplied by 100 (the dot is stripped from the value
		returned by uptime).  You can also set these values
		in the etc/bb-cputab file.

	If you want the load average to be displayed in its original
		format (not stripped of its decimal point) then set
		the DISPREALLOADAVG to TRUE.

	You can define the processes for which you want to monitor if
		they are up and running.  You do this by setting the
		PROCS and PAGEPROC variables.  The processes included
		in PROCS will lead to a yellow condition if one or more the
		processes is down.  Processes in PAGEPROC will generate
		a red condition if a process is down.  But the preferred
		configuration method is the etc/bb-proctab file.

	MSGS and PAGEMSG are used to monitor error messages in the
		system logs.  MSGS contain keywords to look for in
		the system logs.  If a keyword is found then this
		will create a yellow condition and if the keyword
		is also in the PAGEMSG variable then it will be upgraded
		to a red condition. Note that the values of these
		variables can be overridden using the etc/bb-msgstab file

	You can also discard certain messages by defining portions of
		that message in the IGNMSGS variable.  You can define
		multiple messages by delimiting each message by a ';'.
		The value can also be set in etc/bb-msgstab.

	MSGEXPIRE defines the amount of time the yellow/red conditions
		will last.  Yellow conditions will last by the number
		of minutes defined by the first number will red conditions
		are defined by the 2nd number.  i.e.  30:60, yellow=30m
		and red=60m.

	The CHKMSGLEN determines if the message file zero-length test
		is run. Set to TRUE or FALSE

	Define how many MSGS and PAGEMSG entries that are returned
		in a messages file(s) check. YELLOWMSGSLINES determines
		the number of yellow entries while REDMSGSLINES indicates how
		many red entries are returned.

	The OLDSTYLEBBMSGS variable indicates if the message file(s) check
		should not expire message just like pre-1.6d versions. You
		had to expire messages by clearing them by hand in the
		message file(s) by modifying the token string so it wouldn't
		match anymore.

	BBWEB="/bb"
		This variable defines the path to the root page of BB.
		Make sures it never ends with "/".  All locations
		in BB are referenced from that location.

	BBWEBHOST is the full path to your BBDISPLAY server except
		the directory location: http://www.bb4.com

	BBWEBHTMLLOGS="${BBWEB}/html"
		This variable defines the path to the HTMLized status logs.
		This path is concatenated with the name of the HTMLized
		status file and is appended to the e-mail notification
		message for a quickpath to the error information.

	CGIBINURL is the directory location of the CGI scripts.

	The PAGELEVELS variable indicates to the 'bb' process at which 
		level(s) it should send a notification message.  The 'bb'
		program is used to send status messages and if the status
		level of the message is found in the PAGELEVELS variable
		then a notification message is also sent to the BBPAGER
		host.  This is the default value.  It can be overridden
		by the 'pagelevels:' token in the etc/bbwarnsetup.cfg
		file.  The PAGELEVELSMAIL contains the color level(s) on
		which only e-mail is to be sent.  The color level must also
		be found in PAGELEVELS.

	The WEBHISTORY defines if you want to use the web-based history
		display script.  This script gives you a 24hr HTML chart
		and the last 50 status changes.  

	BBHIST_IGNOREBLUE tells the reporting to ignore maintenance
		time in statistics compiling if it's set to TRUE.

	The SAVESTATUSLOG variable defines if the historical log of
		the host.service is kept or not.  The logs are saved
		in the $BBHISTLOGS directory.

	The BBLOGSTATUS variable determines if each log received is
		rendered into a static HTML page, dynamically by CGI or
		not at all (it appears as plain text).  If it is
		set to DYNAMIC then a CGI will create the HTMLized status
		log only when requested.  That's when you click on a
		colored dot on the BB display pages.  The dynamic CGI
		is called bb-hostsvc.sh. If is set to DYNAMIC then
		a static HTML status log will be generated the www/html
		directory.  If it is set to TEXT then no HTMLized status
		logs are available.  The status will appear as plain text.

	You can define how many pings are executed before a connectivity
		test fails using the PINGTESTS variable.  You can also
		set the sleep factor between tests using PINGSLEEPFCT. Each
		sleep within a single test is incremented by that factor.
		PINGWARN defines how many failed pings are required before
		the connectivity test yellow.  If all pings fail then
		it returns red.

	NOPINGCLEAR lets you decide if you want clear dots for host that
		have the noping directive.  If you set to TRUE then clear
		dots will be displayed for hosts with the noping as
		well as hosts with IP address 0.0.0.0 (DHCP hosts or
		hosts accessed only with its full name).  You can use the
		noconn directive in conjunction with NOPINGCLEAR to select
		which hosts you don't want a clear dot.

	PURPLEDELAY sets the default expiry time stamp on an incoming status
		log.  It is expressed in minutes.

	The IPTEST_2_CLEAR_ON_FAILED_CONN variable, if set to TRUE,  defines
		that if a network test fails and that the connectivity (ping)
		test also failed then display the test results as clear.  You
		can turn off this setting individually by test by using the
		~ modifier.

		in etc/bbdef.sh:
			 IPTEST_2_CLEAR_ON_FAILED_CONN=TRUE

		in etc/bb-hosts
			123.123.123.123.host1 # ftp

		If the connectivity test to 123.123.123.123 failed and
		the ftp test also failed (very likely) then display the
		test with a clear dot.  If you had set the directive to
		~ftp then it would have been displayed as red.

		Note that this will work only if the basic connectivity
		is not disabled (CONNTEST=TRUE - enabled).

	SUMMARY_SET_BKG value determines if the summary dots
		are to be taken in account when determining the background color.
		Set it to anything but TRUE if you don't want summaries to
		set background.

	BBHISTEXT contains scripts names located in BBHOME/ext/hist
		that are to be executed when bb-hist.sh is run.
		This is to add site specific display information.

	BBMKBBEXT and BBMKBB2EXT defines scripts to execute at the
		end of the mkbb.sh and mkbb2.sh script respectively.
		Same basic idea as BBHISTEXT, you may extend
		their functionality that way.  The scripts should
		be located in the ext/mkbb directory.

	BBEXT contains the list of external scripts found in BBHOME/ext
		that are to be executed. *** NOTE *** etc/bb-bbexttab
		should be configured instead of using the BBEXT variable.
		The BBEXT variable has been kept for backward
		compatibility.  BBDEFSLEEP is the lifecycle
		in seconds of an external script while STARTSLEEP is
		then initial interval between each external script
		at startup.

	The CONNTEST variable determines if the default connectivity
		testing is executed.  Set to FALSE if you don't want
		the standard connectivity test.  This is usually
		done when the fping.sh external script is used.

	BBHOSTHISTLOG & BBALLHISTLOG are used when specifying if
		host based and system based historical information
		should be kept.  This may be disabled when you
		are not interested in historical data.

	The BBNETTHREADS variables defines how many conccurent
		bb-network.sh tests should run to reduce
		the length of time of the network testing

	BBNETSVCS contains the valid TCP network tests that BB
		can perform.  If you want to test a non-supported
		port then add the port name here.  Read this
		section for more details.

	If you want WAP enabled display then set the WML_OUTPUT
		variable to TRUE.  Depending on your device, you
		can set the size of the bb.wml/bb2.wml pages
		using WMLMAXCHARS.

	BBTOOMANYDAYSUP is used to notify if a host has been running
		for more than so many days.  Some people use this
		to remind them to reboot some servers after a certain
		amount of time.

	WARNMINSONREBOOT and WARNCOLORONREBOOT determines which color
		the cpu column will bear the color defined in
		WARNCOLORONREBOOT and for how long after a server reboots.
		Note that only red/yellow are accepted and that the duration
		has to be less than 60 minutes.

	You can change the timeout values used by bbnet. Change the
		BBNETTIMER1/BBNETTIMER2 and BBNETTIMER3 to the
		appropriate values.

	You can disable local test(s) by setting one or all of
		DOCPU/DOMSGS/DOPROCS/DODISK to FALSE.  If you disable
		a test you can decide if you still want to send a message
		to the BBDISPLAY by setting the color in
		NOCPUCOLOR/NOMSGSCOLOR/NODISKCOLOR/NOPROCSCOLOR to the
		color of your choice or omit the color if you don't
		want any message sent to the BBDISPLAY.



3.2	Localizing programs paths

		Sometimes the OS specific programs paths found in the
	installation might be wrong for a particular host(s) OS.
	Change the paths in the etc/bbsys.local file.  The variables
	contained in this file all have default values from the
	bbsys.OS file.  The original bbsys.local is copied from the
	etc/bbsys.OS file during installation (bbconfig); so keep track 
        of your changes as they will automatically be overwritten if you 
        re-run bbconfig.


3.4	Creating BB clients

	Creating BB clients is very simple:
	cd $BBHOME
	cd install
	./bbclient <client-hostname>

	 <client-hostname> must be found in the etc/bb-hosts file.

		This will create a tarball for the client that has the same
	OS/HW platform type as the host on which the bblient command
	is executed. The tarball is found in the directory above
	$BBHOME.

		 Don't forget to configure the PROCS and PAGEPROC
        variables in etc/bbdef.sh on the client after you've untarred the
	archive such that the correct processes are monitored.  

		If you have different OS/HW platforms then install BB,
	as a client,  on each OS/HW platform (then use the bbclient to
	create a tarball for each identical OS/HW client) and don't forget
	to copy your master bb-hosts file to it. Run through the install
	procedure to make sure that the clients are also installed
	properly (bbchkcfg.sh/bbchkhosts.cfg).


3.5	Configuring the Web Stuff

		All Web-based things live in the $BBHOME/www directory.
	In order for the bb stuff to work correctly, this directory must
	be linked into your Web site somewhere.  I suggest something like
	the following:

	ln -s /home/sean/bb/www /WWW/bb (where /WWW is the Document Root dir
	of your web server).

	You should then be able to access BB with the URL
		http://.../bb/bb.html
	where ... is your webserver address.

		You also have to configure the script which generates the
	web-based history page if you set the WEBHISTORY variable to TRUE in
	etc/bbdef.sh.  This page is accessible from the "History" button
	when you click on a colored dot in one of the display pages
	(bb.html/bb2.html).  You must copy the web/bb-hist.sh script to your
	/cgi-bin directory and set the BBHOME. 
	Make sure the script has the proper permissions to execute: system and
	web server permissions.  If you want only a text based history display
	then set the WEBHISTORY variable to "FALSE" in etc/bbdef.sh.
	Set the BBHIST_IGNOREBLUE variable to TRUE in etc/bbdef.sh if you
	don't want the blue state to be used in the calculations of daily % use.

		By default the CGIBINURL (in etc/bbdef.sh) points to /cgi-bin
	but if your web server cofiguration has a different CGI directory
	then change it here or your history feature won't work.
 
		If you intend to enable manual notification/acknowledgement
	("PAGE/ACK"button in bb.html/bb2.html) then copy the web/bb-ack.sh
	script to you /cgi-bin directory and set the BBHOME 
	variable in the script.  Make sure the script has the proper
	permissions to execute: system and web server permissions.
	Acknowledgments generate a log entry in $BBACKS/acklog file.


3.6	History

	Each time a status log is received it is checked against its
	previous status to see if it has changed.  If it has, then
	the duration of the previous status is recorded and a new line
	is appended to the history file with the timestamp of the
	new status.

	There's a history file for each host.service (status log) received.
	The history files are located in the $BBHIST directory.

	Here's a sample:

	Sun Jan 24 18:30:45 1999 green 917220645 232068
	Wed Jan 27 10:58:33 1999 red 917452713 1560
	Wed Jan 27 11:24:33 1999 green 917454273

	Notice that last line doesn't have a duration because it is
	the current status.  The duration will be appended only when
	the status changes.

	If you do not wish to have historical data then rename
	$BBHIST to something else or remove it.


3.7	Adding your own tests

	You can easily add your own tests.  Start with the template
	available at ext/ext-proto, add your code.  Look at bb-local.sh,
	bb-network.sh for an example on how to send data to BB.
	Specify the name of your script in the etc/bb-bbexttab
	file. This file defines all scripts to run for each hosts.
	Start with the etc/bb-bbexttab.DIST file, copy to
	etc/bb-bbexttab and configure. Typical entries in
	etc/bb-bbexttab:

	<host> : <options> : scripts...
	www.bobo.com : : script1 script2;3600 script3;900 script4
	www.baba.com : : script5 script6

	Note that <options> is not yet implemented.

	make sure each defined script exists in the ext directory
	of the client install.  See below for an explanation of
	the script2;3600 entry.

	Restart BB and your test should be running.  But
	before you use it within BB, I suggest you test it for errors
	by using the method:

	cd /home/bb (or wherever your BB is located)
	BBHOME=/home/bb
	export BBHOME
	. ./etc/bbdef.sh
	cd ext
	./yourexternaltest

	Look for errors, fix them, rerun your test until you're
	satisfied, then update bbdef.sh.  Note that all temporary
	files should be created in $BBTMP and make sure you remove them
	after use.   Also, remember that you don't have to deal with
	sending notification messages, the 'bb' process send a 'page'
	type message to the BBPAGER host when the status color is
	found in the PAGELEVELS variable defined in bbdef.sh.

	You can also set the frequency of the test by specifying
	the interval it should run at.  In ext/bb-bbexttab, set an
	interval qualifier with the script name by appending the
	qualifier to the script name. Here's an example entry in
	etc/bb-bbexttab:

	www.bobo.com : : script1 script2;3600 script3;900 script4

	script1 and script4 will run every 5mins (the default)
	while script2 and and script3 will run every 60 and 15
	minutes respectively.  You specify the interval in seconds.
	Note that the delimiter is ';'. It used to be ':' in BBEXT
	but it had to change due to the line entry format.

        When it's ready don't forget to update the svcerrlist token
        in the bbwarnsetup.cfg file on your BBPAGER host.  You must
        assign a numeric code to your column name.

	You can also set the lifetime of the status sent by your
	script by following the instructions described in
	section 6.9: "Setting a Time To Live to a status message".
	

3.8	Starting BB at system boot

	Depending on U*X operation system version (Linux/BSD/Solaris/...)
	your startup procedures will vary from OS to OS.  In short, you
	have to create a startup script that has a start/stop
	capabilities.  Under a lot of OSes, you'll want to create your
	script in the init.d directory and create an S89bb link in rc3.d that
	links to init.d/S89bb (you may also want to create a K11bb link in
	rc3.d that'll be used when the system shuts down).  Use an existing
	startup script has an example and substitute with these commands:

	To start BB, use this command:

	su - <bbuser> -c "cd <BBHOME>;./runbb.sh start"
		or
	su - <bbuser> -c "cd <BBHOME>;./runbb.sh restart"

	To stop BB, use this command:

	su - <bbuser> -c "cd <BBHOME>;./runbb.sh stop"

	<bbuser> is the user that BB will execute has
		make sure that bbuser has all permissions under BBHOME
	<BBHOME> is the location of your BB install

	e.g. su - bb -c "cd /home/bb;./runbb.sh start"


3.9	Summary of BB protocol

	Big Brother is based on a client/server paradigm.  BB Client
	software sends a message to a BB daemon (either a BBDISPLAY,
	BBPAGER or a BBRELAY) over a TCP connection using port 1984.
	The client connects to the BB port socket writes its data and
	closes the port.  The server listens on a that port socket
	then reads the incoming messages and closes the socket.

	Here's a quick summary of valid messages using an example:

	Status message:

	status www,bb4,com.disk red Wed Mar  7 21:16:33 EST 2001 Disk partitions on www,bb4,com OK
	/dev/wd0s1a    496053    25081   431288     5%    /
        /dev/wd0s4e   1998122  1094955   743318    60%    /home
        /dev/wd0s2e   1489830  1094928   275716    80%    /usr 

	*** Note that the status message can be also be sent within
	    a combo message.  You should only send "green" status thru a combo
	    message.  Each status message should be delimited by at least 2 newlines

		combo

		status ...

		status ...

		status ...

	Error message:

	page www,bb4,com.cpu red Thu Jan 25 17:36:30 EST 2001 up: 16 mins, 3 users, 105 procs, load=363 

	For both messages,

		host can be fully qualified or not
			www,bb4,com.disk
			www.disk
		  Note that ',' replaces the '.' in the hostname
		  for historical reason (I know, I know...)
		color can be red,green,yellow,purple,clear,blue
		text can be anything but usually on the first line
		it's just a summary while the rest of the text is
		a more detailed status.  Usually the date is inserted
		as the first entry in the text.

	Summary message:		

	summary quebec.mtl 255.255.255.255 red http://cafe.domain.com/bb/

		quebec.mtl is the row/col definition
			quebec is the row
			mtl is the column
		255.255.255.255 is the BBDISPLAY to send the summary to
		http://cafe.domain.com/bb/ is the URL that will be displayed
		  when the red dot will be clicked on

	Acknowledgement messages:

	ack add_event 1234567 120 Rob acked this

		This is to acknowledge an event from a script

		1234567 is the acknowledgement ID
		120 is the amount in minutes of the TTL of the ack
		"Rob acked this" is an optional message

	ack rm_event www.bb4.com.disk 345

		This is to signify that event has recovered.
		This should only be sent by a BBDISPLAY server daemon

		www.bb4.com.disk is the host.service combination
			that has recovered from an event. Note
			that commas are not needed in the hostname
			(confusing isn't it)

	ack addtag_event www.b4.com.disk robert@bb4.com 1234567 120 999999999 Rob acked this

		This message is used to create a tag file on BBDISPLAYs
		to enable a checkmark to be displayed in the web pages.
		This should only be sent by a BBPAGER server daemon

		www.bb4.com.disk is the host.service combination
			to be acked.
		robert@bb4.com is the recipient that is acking the event
		1234567 is the ack number
		120 length in minutes of the ack
		99999999 is the current time in integer format
		"Rob acked this" is an optional message

	ack rmtag_event www.bb4.com.disk

		This message is used to remove a tag file on BBDISPLAYs
		that was created by an addtag_event message.

		www.bb4.com.disk is the host.service combination to remove

	Maintenance mode messages: (these message types are disabled by default)

	disable www.bb4.com* 120 Disk Removal

		This message will notify BB to disable all notifications
		for the host.service combinations that match the
		regular expression specified.  Only a BBPAGER
		should receive this message

		www.bb4.com* is a regular expression that will match
		  all services for www.bb4.com
		120 is how long notifications will be disabled in minutes
		"Disk Removal" is an optional message

	enable www.bb4.com*

		This message will notify BB to reenable all notifications
		for the host.service combination specified. Only a BBPAGER
		should receive this message.

		www.bb4.com* is a regular expression that will match
		  all services for www.bb4.com.

	offline www.bb4.com.disk

		This message instructs BB to create the tagfile in the
		bbvar/disable directory.  A BBPAGER automatically
		sends this message to a BBDISPLAY.  It shouldn't
		be used by scripts.

		www.bb4.com.disk is the host.service combination

	online www.bb4.com.disk

		This message instructs BB to remove the tagfile in the
		bbvar/disable directory.  A BBPAGER automatically
		sends this message to a BBDISPLAY.  It shouldn't
		be used by scripts.

		www.bb4.com.disk is the host.service combination

	Data transfer messages: (these message types are disabled by default)

	data www.bb4.com.data ....
	....
	....

		The data message appends to the bbvar/data/www.bb4.com.data
		file the text specified by ....  Note that the data text
		is appended.

	notes www.bb4.com.html ....
	....
	....

		The notes message write the text defined by .... to the
		www/notes/www.bb4.com.html file.  Note the the data message
		overwrites the current file. This file can then be
		display by clicking on the hostname in the web display
		(bb.html/bb2.html).

	


------------------------------------------------------------------------

Section 4:  Configuring the Notification feature (BBWARN)


4.1	A little History

	In the Beginning :), BB could only e-mail and notify by pager.
	The configuration required that all BB hosts (servers and
	clients) have the PAGER variable set with the recipients of the
	notifications.  There were no possibilities of customizing the
	notification feature.   This led to the:

	The Pager Protection Act of 1997
	================================

	Use of BB has been linked to the untimely death of at least one
	pager in Texas.  In order to protect pagers from their users, a
	notification scheme has been created to allow to specify a delay
	between the notifications.

	But this wasn't enough.  BB netizens got restless and finally a
	solution was delivered by Robert-Andre Croteau, and described in
	an article in SysAdmin magazine.  It was called BBWARN and it was
	good.  It allowed an admin to specify rules which enable him/her 
	to get notified based on the source of the error (host) and the 
	service involved and also based on the day/time.  Different rules 
	could be set up and different recipients could be specified
	depending on the characteristics of the problem
	(host/service/day/time).

	Numerous changes have been made and various configuration
	options are available to the BB admin(s).

	Notification methods

	You can currently get notified by email, numeric pager and
	SMS communication device.  Users have reported custom
	notification by alpha-numeric pagers and other PCS devices
	(some are available on the FTP archive or a search of the
	mailing list archives will lead you to them).

	To use the email feature, your BBPAGER host (in bb-hosts)
	must have an email program.  This is not a problem on UNIX:
	the mail (mailx) program is available.

	Sending a notification message to a numeric pager requires
	kermit and a modem.  The path of kermit should be defined in
	the KERMIT variable of bbsys.sh/bbsys.local.


4.2	Setting up notification

	All of the BB notification configuration is specified in the
	etc/bbwarnsetup.cfg file.  Here are the various options that
	can be set. Note that instructions are included in the
	configuration file as comments. 

	All tokens in the etc/bbwarnsetup.cfg file must be defined
	on the BBPAGER host.  ***** The 'pagelevels:' token must be
	defined on all BB hosts (servers & clients) because the 'bb'
	executable sends the notification and that is done locally
	on each client host. *****

	bbwarn: Set to "TRUE" is you want to enable the notification
		feature

	svcerrlist: This contains a list of service/code pairs.  The service
			name is the column found in the HTML display and
			the code is the value displayed on a numeric message.
			If you add a custom check then the column name
			must have a corresponding code.

	ignforall: Is a regular expression that is used to temporarely
			disable notification a host.service combinations
		e.g.  .*.cpu|.*.msgs|host11.*
		Don't notify for any cpu/msgs errors and any errors
			concerning host11.

		N.B. This feature can be duplicated but the ! rule (below).

	pagehelpcode: Numeric code to use when a user sends a manual
		notification.  See section 4.5.

	ttyline: List of modems devices.  You can specify more than one.

	prefix: Prefix to use when dialing out
	suffix: Suffix to use when dialing out (like a hangup)

	pagelevels: At which color level to send a notification.
		This token MUST be set on every host (clients & servers).
		You must restart BB if you modify it.

	pagelevelsmail: if a color defined here is also defined in pagelevels
		then only e-mail recipient will receive notifications
		when an error occurs at the pagelevelsmail defined color.
		Note that only recipient in the form rcpt@some.mail will
		be notified, if a recipient is prefixed with ep-, ext-XXX-
		or any other valid prefix, it will be ignored as they are
		not considered e-mail recipients.

	pagerecovered:  Set to TRUE if you want to be notified
		when a problem has been fixed.  This feature is only available
		when 'pagetype:' is set to EVENT.

	pagetype: Defines how the pager delay is handled.  There are
		4 choices (RCPT|EVENT|HOST|GROUP).
		RCPT: the recipient is not notified until pager delay
			expires.
		EVENT: the recipient is not notified for a particular
			host.service combination until the pager delay
			expires.
		HOST: the recipient is not notified for a particular
                        host until the pager delay expires.
		GROUP:  the recipient is not notified for a particular
                        host.service within the same etc/bb-hosts group
			combination until the pager delay expires. 

	pagemaster: Recpient(s) to receive an e-mail notification if
			a page notification could not be sent.

	pageaddhtmlpath:  Set to TRUE if you want the HTML path of
		the status log to be appended to an e-mail
		notification.  If this is set to TRUE, make sure the
		BBWEBHTMLLOGS variable is set correctly in etc/bbdef.sh.

	cfgdelim: entry delimiter in the etc/bbwarnrules.cfga

	briefrcpt: define the recipients that should receive a brief
		notifications message.  You can you use regular expressions:
		ie. ep-*  (all e-page recipients)
		This expression will be expanded to this regular expresssion: ep-.*
		The message will have this format:
			hostname.service - XXXYYYYYYYYYYYY
			<link to host.svc page in bb>

		Note: XXXYYYYYYYYYYY - Service code and IP address

	hg-xxxxxxx: You can have multiple hg-xxxxxxx tokens that
		define a group of hosts/devices.  So you can
		e.g.  create hostgroup 'hg-routers' as an alias or
			shorthand of a list your routers.
		These tokens can then be specified in the bbwarnrules.cfg
		file in the host-fields columns (1st/2nd column) instead
		of having to type all of them individually in all rules lines.

	pg-yyyyyyy: You can have multiple pg-yyyyyyy tokens that define a
		group of recipients. These tokens are expanded in the rules
		lines inthe recipients definition.

	On the client make sure that PAGELEVELS is set (etc/bbdef.sh) and
	on the server, if appropriate, that PAGELEVELSMAIL(etc/bbdef.sh) is set.
	Refer to section 3.2 for more details.


4.3	Creating notification rules

	You define the notification rules in the etc/bbwarnrules.cfg file.

	Rules are written in the following format: 

	hosts;exhosts;services;exservices;day;time;recipients

	hosts: match on these hosts (* is a wildcard for all hosts)
	exhosts: exclude these hosts
	services: match on these services (* is wildcard for all hosts)
	exservices: exclude these services
	day: 0-6 (sunday-saturday)
	time: 0000-2359
	recipients: email address, numeric pager, sms number,
		qpage recipients are defined with qp-<recipient>
		sendpage recipients are defined with sp-<recipient>
		Hylafax sendpage recipients are defined with hsp-<recipient>
		   (note that Hylafax sendpage arguments will be added
		    with the -p construct, regular sendpage don't)
		e-pager recipients are defined with ep-<recipient>
		SNMP traps are sent with trap-<destination IP address>
		(note that SNMP trap support is preliminary and may be subject to change)

	N.B. Please specify all recipients that do not allow long messages
		in the briefrcpt token in etc/bbwarnsetup.cfg.

	There's also a special format of the rule line:

	!hosts;exhosts;services;exservices;day;time;recipients

	If a rule line starts with ! the event thats matches
	the rule line will disable notification to any
	recipient defined on that rule line.
	If the recipients field is '*' then no notification
	will occur for that event.  Here's an example

	!*;;*;;*;*;*
	
	This will in effect disable all notifications and render
	useless any other rule that you have defined :)

	!*;;*;;*;*;robert@localhost 9999999

	This will remove robert@localhost and 9999999 from the
	list of recipients for the current event if they were
	defined on another rule that matched the same event.

	The value set by 'cfgdelim' (in bbwarnsetup.cfg) is your
	field delimiter. In this case the value is ';'
	Even though egrep regular expressions are allowed, do not use
	the .* construct, just use '*'.  It will be replaced with
	.* in the regexp.  It's just that * is more readable than .*

	Also the default 'pagedelay' value (see bbwarnsetup.cfg)
	which indicates how long before the next notification occurs
	can be overridden on the rule line for a specific recipient
	by appending the time value to the recipient:

		recipient:XX   where XX is the value in minutes.

	For examples and complete information please refer to the
	etc/bbwarnrules.cfg and the etc/bbwarnsetup.cfg files.

	Escalation

	To escalate a notification, you use the following format
	for the recipient:

		recipient:^XX[-YY]

		XX is the initial wait before sending the notification
		YY is the delay for each subsequent call.  If it is
		not specified then the 'pagedelay' value is used.

		An escalation can only be acknowledged by the
		recipient.

	Initial delay

	An initial delay can be specified when configuring a recipient.
	The format is:

		recipient:~XX[-YY]

		XX is the initial delay before sending the notification
		YY is the delay for each subsequent call.  If it is
		not specified then the 'pagedelay' value is used.

		An initial delay can be reset if a recipient
		acknowledges a notification for all recipients of
		that notification (see below).

	There's a simple checking program that validates the contents
	of your bbwnarnrules.cfg file.  It is located in $BBHOME/etc.
	cd $BBHOME/etc
	./bbchkwarnrules.cfg

	Note that it only checks if your config file is not missing
	a column. 


4.4	Acknowledging a notification

	When an admin is notified, the admin is always sent an
	acknowlegement tag with the message.  This tag number
	is seven digits (XXXXXYY): the first five digits are a unique
	number and the last two digits are the recipient's ID for that
	notification (the recipient's ID can change, it is valid
	only for the current notification). Note that you can
	acknowledge using XXXXX99 to signify to acknowledge
	for all recipients of the XXXXX ack ID message except
	for escalated recipients(^rcpt) which can only ack themselves.

	In an e-mail notification, the ack number is in the
	subject and the body of the message: in the subject
	it is found at the beginning as in "!BB - XXXXXXX!",
	and in the body of the message it is at the beginning of
	the body delimited by [XXXXXXX].

	In a numeric page, the acknowledgement is always after
	the BB numeric code.  It is the last 7 digits of the
	numeric message.  NOTE, if your pager doesn't support
	more than 21 digits, then you're out of luck, you'll
	be missing some digits. You could always try to
	shorten the ack number but that is left as an exercise
	for the reader ;-).  If you get the first 5 digits
	then you can always use recipient 99 to acknowledge
	for all recipients but that may not fly at your site
	especially if you have multiple recipients.


4.5	Manual notification (Web based "PAGE/ACK" button)

	You can enable the manual notification feature and
	let the user reach you by pager/e-mail if they can't get
	a hold of you.  If this is enabled, then you'll
	receive a numeric message starting with 911 (pagecode
	in etc/bbwarnsetup.cfg) followed by the phone
	number to call.  Copy the web/bb-ack.sh script (if
	it was not copied during the installation)
	to your cgi-bin directory and make sure all permissions
	are correct.

	You can setup who gets called when, by adding rules
	to the etc/bbwarnrules.cfg file.  The pseudo host to use
	is notify-admin*.  There's an example in the config
	file.


4.6	SMS notification

	This a user custom notification scheme for SMS devices.
	What follows is the README file for his custom hack.

	Last updated: 1997-01-11 by jaclu@ibk.se

	This section describes the usage of a kermit script that
	sends SMS messages.

	It is used as a mail -> SMS gateway, and also for the "Big Brother"
	network monitor(obviously).

	The kermit script for SMS can be found in etc/sms.scr

	My operator uses NOKIA server software, hopefully you can use
	this also on Motorola servers, without too much hassle.

	Terms
		SMS     Short Message Service
		SMSC    Short Message Service Center
		CIMD    Computer Interface to Message Distribution

	Syntax

		kermit sms.scr device file number [number [number [...]]]
			device is modem device like /dev/cua0

	The file should contain the message, only first line of file
	will be sent, and it MUST be terminated with LF, otherwise the
	kermit script won't be able to extract the message.

	SMS messages can only be 160 chars, and since nobody would want
	a lengthly message on a 8 character display, I haven't bothered
	to handle message splitting. If message is too long, it is truncated.

	If one or more SMS phonenumbers can be specified, the message will be
	sent to each one of them.

	Configuration

		I have done this the easy way, that is I start CIMD with
	faked checksums, if anybody manages to generate correct checksums,
	please mail me.

	Log in to SMSC

		You have to set two variables in sms.scr:

		\%b 	phonenumber to you operators SMSC
		\%c	login to access CIMD

		For Europolitan (Swedish operator) you can use:

		\%b 46708222902
		\%c cimd3  # (use faked checksums)

		This starts the CIMD server, and from now we must ACK
		all responses.

		Don't forget to include your modem prefix to \%b!!

		I don't use the "prefix" token from BB, since I also use
		this script as a mail->SMS gateway. If you are going to
		use this, you must anyhow configure this script, so I hope
		you don't mind.

	Start a CIMD session

		The first step in a CIMD session is to identify yourself

		You have to set two variables in sms.scr:

		\%d	CIMD account
		\%e	CIMD password

		Unfourtunately, I cant give you theese values ;)

		Now you have configured your script and can start to use it!


		Send to all recipients

		BB calls the script one time for each recipient, that's
		a bit of a waste, but it would just be to much work to
		get around.  If you call it manually or from sendmail,
		you can use multiple recipients.

	More info

		The (english) spec of NOKIAS CIMD implementation can
		be found on:

		http://www.europolitan.se/europolitan/fick/tjanst/cimdspec.htm

		If you happen to know swedish, you can read more on Europolitans
		implementation  on:

		http://www.europolitan.se/europolitan/fick/tjanst/faqcimd.htm

	Feedback

		Please let me know if you use this with a non NOKIA server,
		or if you fix real checksums!

	Jacob Lundqvist <jaclu@ibk.se> (SMS:+46-708-555 456)

	Thanks Jacob !!!


4.7	Using kermit

		By default, BB expects kermit 5 to be installed on your
	BBPAGER host.  On certain installations it is V6 and up that is
	installed.  If that's your case then you must (might) modify which
	kermit script is used:

		copy numeric-k6.scr to numeric.scr in the script.
		(don't forget to make a backup of numeric.scr)

		But try with numeric.scr at first and if it doesn't work
	then replace it with numeric-k6.scr. Don't forget to set KERMIT in
	bbsys.sh.


4.8	Adding/modifying for a custom notification procedure

		You can create your own notification by editing your own
	notification script.  For examples see: ext/pg/ex1
	or ext/pg/ex2 .  Your script must be saved in the $BBHOME/ext/pg
	directory.

		You would use a special prefix in the etc/bbwarnrules.cfg
	file.  For example, you could use the recipient ext-ex1-robert@bb4.com
	to send a notification to the recipient called "robert@bb4.com"
	using the "ex1" script.

		You create your own look for the notification message
	by using the following environment variables in your script
	in order to customize it.

	BBALPHAMSG - is the text body
	ACKCODE - is the security associated with the notification
	RCPT - is the recipient name (stripped of the ext-name- prefix)
	BBHOSTNAME - is the hostname in  host.name.com format
	BBHOSTSVC - is the host.name.com.service tag
	BBHOSTSVCCOMMAS - is the host,name,com.service tag
		(notice that the '.' were replaced by ',')
	BBNUMERIC - is a numeric value made up of 22+ digits
		XXXYYYYYYYYYYYYZZZZZZZ
		XXX - corresponding code of service defined in bbwarnsetup.cfg
		YYYYYYYYYYYY - IP address
		ZZZZZZZ - security code - first 5 digits: event ID code
					  last  2 digits: user ID code
	MACHIP - is the IP address of host in normalized 12 digits AAABBBCCCDDD
	BBSVCNAME - Name of the service of the event
	BBSVCNUM - numeric equivalent of the service name
		(from svcerrlist in bbwarnsetup.cfg)
	BBCOLORLEVEL - Color level causing the notification
	RECOVERED - 1 in recovery mode, anything else non-recovery mode
	DOWNSECSMSG - Default recovery message
	DOWNSECS - # of seconds to recovery
	
		After you've created your own script, make sure the
	permissions allow only the authorized users to modify it.
	

4.9	Notification/acknowledgement logs

		You'll find logs of who got notified for what reasons,
	logs about recoveries, who got a recovery message and logs about
	who acknowledged what notification.   They are all located in the
	$BBACKS directory:

		acklog
		notifications.log
		recoveries.log
		recoverymsgs.log


4.10	Disabling notifications temporarely

	This feature is not automatically available.  It must be
	explicitely compiled in. You must add the -DENABLE_DISABLE
	directive to the CFLAGS variable of the Makefile:

	CFLAGS=-DENABLE_DISABLE -O

	Please be warned that if you enable this feature, a hacker
	could disable notifications while cracking into your systems.


	You can temporarely disable notifications without having to
	modify the etc/bbwarnrules.cfg file.

	All you have to do is send a 'disable' message to the
	BBDISPLAY(s) using the following format:

	MAKE SURE THAT THE BB ENVIRONMENT HAS BEEN SET PRIOR TO
	USE 'bb' directly

	./bb $BBDISP "disable 'host regular expression' 'duration' [reason]"

	You can match multiple hosts/services by specifying a regular
	expression instead of a real host name.  The duration is
	in minutes. You can also add an optional reason that will be
	displayed in the status.

	AGAIN, MAKE SURE THAT THE BB ENVIRONMENT HAS BEEN SET PRIOR TO
	USE 'bb' directly

	e.g.

	cd $BBHOME/bin
	./bb $BBDISP "disable www.bb4.com.disk 240"

		Disable notifications for the disk event of www.bb4.com
		for 240 minutes.

	cd $BBHOME/bin
	./bb $BBDISP "disable www.bb4.com* 240"

		Disable notifications for all events for host
			www.bb4.com for 240 minutes

	cd $BBHOME/bin
	./bb $BBDISP "disable www.bb4.com* 240 Taking www.bb4.com offline for a new disk"

		Disable notifications for all events for host
			www.bb4.com for 240 minutes and specify the reason

	NOTE: duration can be expressed in seconds/minutes/hours/days

		30s: 30 seconds
		15m: 15 minutes
		1h:  1 hour
		1d:  1 day
		by default, minutes are used if a qualifier is not specified


	To reenable a disabled host(s), send the "enable" message

	./bb $BBDISP "enable 'host regular expression'"

	As an example:

	cd $BBHOME/bin
	./bb $BBDISP "enable www.bb4.com*"

		Enable notifications on all events for host www.bb4.com

	Note that when you use the enable message, the colored dot
	will stay blue until a new status is received by the BBDISPLAY(s)


4.11	Acknowledging a notification by e-mail

	You can acknowledge a notification by e-mail by setting
	up the bin/bb-mailack.sh in the .forward file of the used id
	that sent the notification message.

	On the BBPAGER host, set up a .forward file in the user
	account that's running the BB instance.  The contents of
	the .forward file should be:

	|/bin/bb-mailack.sh

	Replace  by the real BBHOME path,
	i.e.
	|/home/bb/bb/bin/bb-mailack.sh

	Then in the bb-mailack.sh script, set up these variables
	BBUSER - user id of the BB instance
	BBHOME - self describing ;)
	MAILFILE - Location of the user id mailbox in case the
		   message is not an acknowledgement
	REPLYPFX - Prefix used to identify a reply. If you intend
		   to use multiple mail programs to ack and if they
		   don't provide the same prefix, I suggest you
		   use your own prefix and enter it on the subject
		   line instead of the one given by the mail program.
	DELAY - Default duration of the delay

	When you receive an e-mail notification, you can simply reply
	to the mail message to ack the notification and to delay the
	next notification for DELAY minutes if the problem persists.

	As long as the subject of the reply mail message is in the
	following format(It assumes the REPLYPFX is "Re:"):

	Re: !BB - XXXXXXX! 

	You can specify the DELAY in the reply message also

	Re: !BB - XXXXXXX! DELAY=120

	This will set the delay to 120 mins

	You can also specify a message that is saved in bbvar/acks/acklog

	Re: !BB - XXXXXXX! MSG=This is a message

	Anything after the MSG= is considered a message

	Finally, you can also tell the bb-mailack.sh to return a
	confirmation of the replied message (but it doesn't guarantee that
	the actual acknowledgement worked).

	Re: !BB - XXXXXXX! ACK=Y

	You can use all 3 directives on a subject line

	Re: !BB - XXXXXXX! ACK=Y DELAY=120 MSG=This is a message

	If the mail message does not start with "Re: !BB - XXXXXXX", then
	the message is saved at the location pointed by MAILFILE.


4.12	Displaying acknowledgements

	When an acknowledgement is sent to BB, it displays that
	fact by changing the colored dot of the acknowledged event
	to a checkmark of the same color.  It also adds a status
	line at the bottom of the individual status page.
	
	You can also have the last 25 acknowledgements listed in the
	bb2.html page.  This feature is enabled by default. To disable
	it, you must remove the acklog.sh script name in the BBMKBB2EXT variable
	in etc/bbdef.sh.  You need to restart BB to have the change take
	effect.


          
------------------------------------------------------------------------

Section 5:  Customizing your Big Brother display


5.1      Customizing the HTMLized status logs

	If you don't like the blinking gifs, you can change them to
	non-blinking by copying over the files found in www/gifs.
	The non-blinking gifs start with the nb- prefix.

	You can change Sean's mean face in the bb.html/bb2.html and
	HTMLized status logs by replacing the bb.gif file.  This only
	applies to pre-1.3 versions.

	You can change the header/footer for the HTMLized status pages.
	The files are located in the /web directory.  Note that
	your customized version can contain special tags which can be
	replaced by values:

		&BBDATE: current date/time
		&BBBACKGROUND: with the current background color
					(red/green/yellow/clear/purple)
		&BBRELDATE: Release date of the current version
		&BBREL: Current version number
		&BBCOLOR: Color of this status file
		&BBHOST: Name of host of current status file
		&BBSVC: Service name of current status file.
		&BBIPNAME: IP address of host, if 0.0.0.0 then use hostname
		&BBIP: IP address of host, always return IP address unless not found

		You can add tags by modifying the bbd.c file. Every
	time a status log is received by bbd, an HTML version of the
	status log is created by prefixing the status with the header
	file and suffixing with the footer file.

		You can put tags also in the status logs:

		&red	&green	&yellow	&clear	&purple

		These tags are replaced with a corresponding image
	source tag for the HTMLized version.  Just like the bb-local.sh
	script does for the disk and procs tests.  So, if you create
	your own custom check, enter these tags if you want to see a
	colored dot in the HTMLized status.

	NOTE:  If you do not wish to have HTMLized status files, then
		rename the www/html directory and the main BB display
		pages will use the plain text status logs which are
		located in the $BBLOGS directory.  This will only
		work if you had the install program create the
		old-style directory structure.


5.2     Customizing headers / footers (for reports too)

	bb.html/bb2.html and various HTML page generation
	can be customized by modifying their respectable
	headers/footers. These are located in the $BBHOME/web
	directory.

	The bb.html uses bb_header/bb_footer and bb2.html uses
	bb2_header/bb2_footer.  You can also customize the output
	of the HTML file defined by the page directive in bb-hosts
	by creating <page name>_header/<page name>_footer
	files and you can also customize the HTML file defined by
	the subpage directive in bb-hosts with the files
	<page name>_<subpage name>_header and
	<page name>_<subpage name>_footer. So an example is
	division1_department3_header and division1_department3_footer.

	The reporting feature (bb_rep.html) also uses the same format.
	Except that bb.html uses bbrep_header/bbrep_footer. (bb2.html
	has no equivalent in reporting).  As for the page directive,
	use <page name>rep_header/<page name>rep_footer.
	And for the subpage directive, use <page name>_<subpage name>rep_header
	and <page name>_<subpage name>rep_footer.

	Do not use the < and > characters in the filename,
	they were used for readability.

	NOTE:  The link to bb4.com MUST be kept in the
		footer page as per your agreement of the
		license agreement.


5.3     Creating skins

	You can create your own look and feel by customizing
	various HTML aspects of Big Brother.

	You can use your own gifs by creating a new directory
	under $BBHOME/www.  As an example, a directory 'psy'
	has been created with more psychedelic colored dots
	It lives in $BBHOME/www/psy.  To use those images then
	set the BBSKIN variable in etc/bbinc.sh to "psy".

	To further modify the appearance of your display,
	modify the header/footer files found in $BBHOME/web.

	You also have some control over the bb.html/bb2.html
	and the status logs HTML pages by modifying the
	following variables in etc/bbinc.sh:

	MKBBLOCAL
	MKBBREMOTE
	MKBBTITLE
	MKBBROWFONT
	MKBBCOLFONT
	MKBBMANAGE
	DAYS
	HOURS
	MINS
	STATUNCHNMSG
	RECVFROMMSG
	DOTHEIGHT
	DOTWIDTH
	BBSKIN
	

5.4     Inserting notes about your hosts

	You can setup HTML links on the host name in the
	bb.html/bb2.html pages to point to an information
	page for that particular host.

	If a file exists in the www/notes directory that
	matches the system name as displayed on the bb pages,
	then they are linked into both the bb.html page and the
	bb2.html summary page.

	These files can end in .htm, .html, .shtml, .php3 
	or nothing :)

	You can create these files manually or you can use the
	"notes" messages type:

	"notes <name of file> <data to write to the file>"

	Here's an example:

	cd $BBHOME/bin
	./bb $BBDSIP "notes www.bb4.com.html <HTML><BODY>It's a hit!</BODY></HTML>"

	This feature is not automatically available.  It must be
	explicitly compiled in. You must add the -DNOTESMSG 
	directive to the CFLAGS variable of the makefile:

	CFLAGS=-DNOTESMSG -O

	Please be warned that if you enable this feature,  a hacker
	could fill the disk with dummy notes file.  Also note that
	the file size is limited to the incoming buffer of BB
	and by the size of the environment buffer.

	Also note that if you source the BB environment prior
	to sending the "notes" message and you have multiple BBDISPLAYs
	then the "notes" message will be sent to all BBDISPLAYs.  If you
	want to send it to only one BBDISPLAY, then use that IP address
	as the command line argument and set BBDISPLAYS to "" just 
	before sending your message.


5.5     Extending the contents of the main HTML pages

	You can tack on some extra HTML code at the bottom of the
	bb.html /bb2.html pages before the insertion of the footer.

	You save the scripts that generate the HTML code in the
	$BBHOME/ext/mkbb directory.  And in etc/bbdef.sh, you specify
	the name of those scripts in the BBMKBBEXT variable for output on
	the bb.html page and in the BBMKBB2EXT variable for output in
	bb2.html.

	There's an example of a script in $BBHOME/ext/mkbb called
	eventlog.sh that displays the last global events in a table
	of the bb2.html page.

	Make sure that the scripts are only writable by the owner
	to prevent someone to execute malicious code.


5.6     Extending the contents of the history HTML pages

	You can tack on some extra HTML code at the bottom of a
	history display page before the insertion of the footer.

	You save the scripts that generate the HTML code in the
	$BBHOME/ext/hist directory.  And in etc/bbdef.sh, you specify
	the name of those scripts in the BBHISTEXT variable.

	Make sure that the scripts are only writable by the owner
	to prevent someone to execute malicious code.


5.7     Working with historical logs

	There are many historical logs available with BB.  These logs
	contain all events that occured based on the host.service
	combination, on the host itself or for all hosts.  These logs
	are found in the $BBHIST directory.  You can use these logs to
	view that last events that occured.  By default, if you view
	a status log, you can click the history button to view the
	last 50 events for that host.service combination.  You can
	also use the ext/mkbb/eventlog.sh to view the last 20
	events that happened for all hosts (you can view more by changing
	the NUMEVENTS variable in eventlog.sh to the size you want).

	You can disable the logging of events by renaming the
	$BBHIST directory.  You can set BBHOSTHISTLOG=FALSE
	or BBALLHISTLOG=FALSE to prevent the logging of host or all
	hosts events.  You set those values in etc/bbdef.sh

	There's a lot of interesting information available in those
	logs.  Check the FTP site for scripts that take advantage
	of that information.

	There's also a directory that keeps a copy of the status logs
	when they change state such that they can be viewed later on.
	The status logs are saved in the $BBHISTLOGS directory.  A directory
	is created with the name of the hosts and then each service has its
	own directory where the status logs are saved based on the time of
	the occurance.


5.8     Hiding the bb.html/bb2.html page header

	You can position the bb.html/bb2.html pages at the beginning
	of the first block by accessing the page as follows:

	http://.../bb.html#begindata

	You can bookmark this position to hide the header.


5.9     Pre-defined anchors in bb.html

	http://.../bb.html#hosts-blk
		Go to the first host (same anchor as begindata)
	http://.../bb.html#pages-blk
		Go to the subpages table
	http://.../bb.html#summaries-blk
		Go to the summaries table
	http://.../bb.html#dialups-blk
		Go to the dialups table

	http://.../bb.html#hostname
		Go to the host line by using the hostname
		as the anchor: i.e.
		http://www.bb4.com/bb/bb.html#www.bb4.com
	

          
------------------------------------------------------------------------

Section 6:  Miscellaneous Big Brother configuration options


6.1     Specifying filesystem specific values in the disk test

		You can define warning and panic levels for specific
	filesystems.  They are defined in the etc/bb-dftab file. This file
	contains definitions for all hosts all in a single file.  You just need 
	to redistribute across your hosts. The format is as follows:

		[hostname]:/filesystem:warning level:panic level

		example:

		/:85:95
		www.maclawran.ca:/oradata:98:99

		/ uses 85% for warning level and 95% for panic, this is
			valid for all hosts (as no host name was define
			in the definition)
		Only on www.maclawran.ca /oradata uses 98% for warning
			and 99% for panic
		All other filesystems use the default values defined
		in the etc/bbdef.sh file.

	Use the etc/bb-dftab.DIST file as a starting point.


6.2     Enabling security

		When BB is installed, it accepts connections from 
	any hosts.  You can specify from which hosts only to accept
	status logs using the etc/security file.

		You can define individual hosts or networks in the
	etc/security file.  Using this format:

		192.168.1.0
		192.168.2.125
		10.0.0.0

		Accept from network 192.168.1.0, for 192.168.2.125 host
	and the 10.0.0.0 network.



6.3     Using bbnet to test TCP services

	You can test any text based TCP services using bbnet.
	To do so add the test in bb-network.sh.  If you need
	just a basic test, then just add the service to
	the list of other services.  If you need to send a
	special command to the service daemon, then add a case
	statement entry like the imap test.  Set change the
	textmsg variable to the text to be sent to the daemom.

	You can also use special options for bbnet. The -q/-Q/-s
	options are available.  The -q option does not return
	the elasped time of test if bbnet was compiled with the
	-DGETTIMEOFDAY switch (which is only valid if
	the gettimeofday() function is available).  The -Q option
	prevents the display of error messages. Finally the -s
	option only connects to the port to verify if the port
	can be opened.

	See the section on the etc/bb-hosts configuration file
	on how to tell the network test to use these options.



6.4     Sending custom one line status with bb

	The bb executable used to send statuses/notifications
	to the BBDISPLAY/BBPAGER can also be used by a custom
	check using standard input:

	custom_check | $BB $BBDISP - 

	The custom_check program just needs to send a single
	line status to stdout (use the exact format of status
	files found in $BBLOGS).  This is very useful if the
	custom check program is a daemon.


6.5     Changing the 'purple' interval

	By default, BB will send a 'purple' status to indicate
	that a status has not been received in the last 30
	minutes (default). You can change this value to a more
	suitable value by modifying  PURPLEDELAY in etc/bbdef.sh


6.6    Specifying processes to look for

	The PROCS & PAGEPROC variables in etc/bbdef.sh can
	be set with the names of the processes to monitor.

	A more sensible way ... is to use the etc/bb-proctab file.
	This file contains definitions for all hosts all in a single file.
	You just need to redistribute this file across your hosts.
	Host entries can be defined on multiple line entries for clarity
	in case you have many processes to check.

	The format is as follows:

		[hostname1]:process list for yellow : process list for red
		[hostname1]:process list for yellow : process list for red
		[hostname2]:process list for yellow : process list for red
		[hostname3]:process list for yellow : process list for red
		[hostname3]:process list for yellow : process list for red

		example:

		localhost:smtp:httpd
		www.maclawran.ca:!oracle "sleep 30":smtp

		!process - check that host does not exists
		"sleep 30" - use '"' when you want to check on a
				process that spawns multiple words

		You can also add logic to define min/max instances
		of a running process:
			httpd;>15  - more than 15 httpd must be running
			httpd;<=10 - less or equal to 10 hhtpd must be running
			httpd;5 - exactly 5 instances must be running

		if you don't specify the # of instances then it checks
		that at least one instance is running.  For processes
		defined with "" as in "sleep 30", you must add the logic
		within the "": i.e. "sleep 30;>6"

	Use the etc/bb-proctab.DIST file as a starting point.
	If bb-proctab exists, then it overrides the PROCS/PAGEPROC
		values in bbdef.sh


6.7    Sending data to the BBDISPLAY to be handled by an external script

	You can send data to your BBDISPLAY host to be
	processed by an external script, a cron job or
	a command line program/script.

	The data is appended to the specified file name into the
	$BBDATA directory.

	To use this feature you have to send a "data" message
	to the BBDISPLAY in this format:

	"data <file name> <file data>"

	Here's an example:

	cd $BBHOME
	./bb $BBDISP "data www.bb4.com.hits 952281437 10m 5000"

	The "952281437 10m 5000" would be appended to the
	$BBDATA/www.bb4.com.hits file.
	
	This feature is not automatically available.  It must be
	explicitly compiled in. You must add the -DDATAMSG 
	directive to the CFLAGS variable of the makefile:

	CFLAGS=-DDATAMSG -O

	Please be warned that if you enable this feature,  a hacker
	could fill the disk with dummy data files.  

	Also note that if you source the BB environment prior
	to sending the "data" message and you have multiple BBDISPLAYs
	then the "data" message will be sent to all BBDISPLAYs.  If you
	want to send it to only one BBDISPLAY, then use that IP address
	as the command line argument and set BBDISPLAYS to "" just 
	before sending your message.


6.8   	Disabling the messages file(s) zero-length test

	By default Big Brother verifies that none of the messages file
	specified in the MSGFILE variable is of zero-length.  This is
	a simple test to make sure that a hacker hasn't linked your
	messages file(s) to /dev/null.

	Unfortunately, on some systems, when the logs are rotated
	they are left empty by the procedure that rotates the logs.

	If this is your case then you have 2 choices:

	Immediately have the log rotation, add this command:
	echo "`date`" >> <message file(s)>
	or use a syslogd feature to add a line in the messages file(s)	
	or simply disable the zero-length check by setting the
	CHKMSGLEN variable to FALSE in bbdef.sh.

	Note, IMHO, the zero-length should always be there.  Simply
	echo the data to the messages file(s) or use syslogd features
	to add an entry in the message file(s).  Security is too
	important to ignore.  Your best bet is to install a log
	scanner to analyze your messages file(s).  Which one ?
	It is our of BB's scope to tell which one(s) but ask
	around for opinions of people who use log scanners.


6.9	Setting a Time To Live to a status message

	When you create external scripts, you can now tell how
	long the status is valid for.  Just specify the length
	in minutes of the status.  This is to prevent purple status
	on certain service that are not run in the regular interval
	of 5 minutes.

	To use this feature just follow this example

	$BB $BBDISP "status+1560 www,bb4,com.backup green `date` Backup Successful"

	A purple indicator will be triggered only if no status is received
	within 1560 minutes (26hours).


6.10	Disabling the connectivity test

	In some cases you may want to disable the connectivity test
	altogether because you don't need it or because you want to
	use the fping.sh external script available at ftp://ftp.deadcat.net .

	To disable it, just set the CONNTEST variable in etc/bbdef.sh, 
	on the BBNET host, to FALSE.  Also take in consideration that by
	disabling this test you will lose the ability to generate clear
	conditions for the other network tests because you will not have
	access to then connectivity status for that host.


6.11	Reducing connectivity errors

	If you are prone to a lot of red status for your connectivty
	tests even though the host responds when you ping by hand.
	To possibly reduce these false alarms, you may want to add/change
	the PINGPAR1 or PINGPAR2 parameters in etc/bbsys.local on
	the BBNET host.  Adjust according to the BBNET's ping
	parameters. PINGPAR1 are options that goes before the hostname/
	IP address in the ping command while PINGPAR2 are options that
	goes after the hostname/IP address.

	Adjust the number of packets sent for the ping test. Start with
	sending 2 packets and analyze the results. If it did not make
	a difference, try with 3 packets.  Note that when you specify
	more than one packet to be sent, you inherently add a 1 second
	sleep on each new packet. This will delay, in seconds, your
	whole network test by (n-1) * hosts.  If you test a large number
	of hosts, you will see a noticable difference in how often your
	hosts gets tested.
	

6.12	Setting up BBPAGERs and BBNETs host in failover mode

	You can declare failover BBPAGER and BBNET hosts 
	and have them be in standby mode by checking for a failure
	on the master BBPAGER or BBNET host and when that happens
	they start behaving like the master BBPAGER or BBNET host
	until the master host is back online.

	To setup failover BBPAGER/BBNET hosts, define the primary
	BBPAGER/BBNET in the bb-hosts file with the BBPAGER or BBNET
	directive and enable the failover external script on the
	failover hosts by putting the failover script name into the
	etc/bb-bbexttab file entry for each host that is designated
	as a failover host:

	failover1.host.com : : failover
	failover2.host.com : : failover

	Do not put failover in etc/bb-bbexttab for the primary
	BBPAGER or BBNET host !  For complete details please
	refer to the failover script in $BBHOME/ext.

	Each failover host will generate a "fo" status log.  When a host
	will be in standby mode, it will generate a clear status and
	when failover mode is enabled it will send a yellow status.


6.13	Speeding up the network tests

	If you have a faily large number of servers to monitor there's
	a very good possibility that the network tests takes a while
	to complete.

	You can speed up the tests by parallelizing the network tests
	from a single bb-network.sh script to running multiple
	copies of bb-network.sh at once.

	All you have to do is to increase the value of BBNETTHREADS in
	etc/bbdef.sh.  Indicate how many bb-network.sh you'd like to
	have working concurrently.

	You can also speed up the network tests by using the fping
	program to do the connectivity test.  You'll have to download
	fping and also get the fping.sh external script at the FTP
	archive site: http://www.deadcat.net.  You can disable the
	regular ping test by setting CONNTEST to FALSE in etc/bbdef.sh.


6.14	Enabling WML ouput (WAP browsing)

	By default, BB does not generate WML files.  YOu can enable
	the generation of the WML files by setting WML_OUTPUT to
	TRUE in etc/bbdef.sh.  The files will be saved in the www/wml
	directory.

	You'll be able to view the output on a WAP browser by viewing
	the <BBWEB>/wml/bb.wml URL.

	Make sure your web server can render wml files.  In your
	web server's mime.types file, make sure the following line
	is defined:

	text/vnd.wap.wml             wml

	Add it if need be and stop/start your web server. Also note
	that some WAP device accepts can't accept large page size
	and you may have to reduce the value of WMLMAXCHARS to
	control the size of the bb.wml/bb2.wml pages.  On the other
	hand, if your WAP device accepts large pages, then you can
	increase the value such that more info can appear on a
	single page.


6.15	Having BB tell you to reboot a server after is has been up XXX days

	You can have BB display the "cpu" column as yellow dot when a
	server has been up more than a pre-determined value.  You
	set the BBTOOMANYDAYSUP value in etc/bbdef.sh to the number
	of days of uptime after you wish to schedule a reboot.
	You can also set this value in etc/bb-cputab.


6.16	Using an alias name for the current host in etc/bb-hosts

	Sometimes you may want to use an alias for the hostname
	instead of the hostname returned by the 'uname -a' command.
	To do so, on the BB client you wish to use an alias,
	create an etc/bbaliasname file that you want with the alias
	hostname as its contents and BB will use that hostname.
	Then use that alias hostname in the all bb-hosts files (BBDISPLAY,
	BBPAGER, BBNET).  Also, you must declare the "testip"
	directive in the bb-hosts file of the BBNET host because
	the alias is unlikely resolvable by DNS otherwise the
	network tests will likely fail.


6.17    Specifying CPU threshold values

	BB uses the 5min load average value (from uptime) multiplied
	by 100 (the dot is stripped from the value returned by uptime).

	The CPUWARN & CPUPANIC variables in etc/bbdef.sh can
	be set with the load average thresholds to monitor.  This was
	explained in section 3.2.

	A more sensible way ... is to use the etc/bb-cputab file.
	This file contains definitions for all hosts all in a single file.
	You just need to redistribute this file across your hosts.

	The format is as follows:

	hostname: misc settings : threshold value for yellow : threshold value for red
	localhost: misc settings : threshold value for yellow : threshold value for red
	: misc settings :threshold value for yellow : threshold value for red

	examples:

	localhost: : 150 : 300
	www.maclawran.ca: : 250 : 350
	www.bb4.com: daysup=999 : 75 : 150

	Note that the order for matching is the following:
	1) try to match for the hostname
	2) use the localhost values is defined
	3) use the ": XX : YY" line values if defined
	4) use the CPUWARN/CPUPANIC values in etc/bbdef.sh if no match is found

	Use the etc/bb-cputab.DIST file as a starting point.
	If bb-cputab exists and if a match is found then the values
		override the CPUWARN/CPUPANIC values in bbdef.sh

	The "misc settings" field is reserved for other CPU test checks.
	Currently on "daysup" is valid and the number associated with it
	overrides the BBTOOMANYDAYSUP variable.


6.18    Configuring messages file testing

	The PAGEMSG, MSGS & IGNMSGS variables in etc/bbdef.sh can
	be used to define keywords to search for in messages file(s).

	Well, that's the old way.  You can now define entries in
	the etc/bb-msgstab file to set those values.
	
	This file contains definitions for all hosts all in a single file.
	You just need to redistribute this file across your hosts.

	The format is as follows:

	hostname: filename(s) : misc settings : yellow string(s) : red string(s) : matched strings to ignore
	localhost: filename(s) : misc settings : yellow string(s) : red string(s) : matched strings to ignore
	: filename(s) : misc settings : yellow string(s) : red string(s) : matched strings to ignore

	example:

	www.bb4.com: /var/log/messages : : WARNING : NOTICE : not this message ; and this one either
	www1.bb4.com: /var/log/maillog : : refused : ERROR ; error ; BAD SU : from www.bb4.com

	To define more than one string in each field, the strings must
	be seperated by a ';'.

	The <misc settings> is currently not implemented.

	You can define multiple entries for the host in the
	etc/bb-msgstab file.  If you want different settings for different files
	on the same host, use different lines.

	If a matched entry for the yellow/red string(s) contains the
	"matched strings to ignore" then the current match is ignored.
	
	Use the etc/bb-msgstab.DIST file as a starting point.

	If bb-msgstab exists and if a host matches an entry then the values
	override the PAGEMSG/MSGS/IGNMSGS  values in bbdef.sh. If there's
	no matches for the current host then the PAGEMSG/MSGS/IGNMSGS
	values are used.

	You can reset the colored dot from red/yellow to green by removing
	the corresponding tmp/MSG.red.* and tmp/MSG.yellow.* files.  Those
	files contain previous error messages and by default they are removed
	when they expire.



6.19    Using the combo message

	The combo message enables BB to send more than one status message
	at a time.  This is useful when you create an external script
	that may have to send at lot of status messages (i.e. doing some
	network tests against all hosts).  There are 3 steps in using
	the combo message:

	1) Initialize combo message processing

		Before you can start using the combo message in your
		script, you must initialize its processing, add these
		lines at the beginning of your script:

		BBCOMBOID="$$"
		export BBCOMBOID
		$BBHOME/bin/bb-combo.sh start

		The BBCOMBOID variable acts as a unique tag for a particular
		run of your script.  (Many scripts might be executing
		at the same time).

	2) Building a combo message

		Instead of calling $BBHOME/bin/bb to send each status
		message to a BBDISPLAY, you replace that call with
		a bb-combo.sh call:

		Basic method:

		$BB $BBDISP "status $MACHINE.cpu $COLOR `date`  DATA..."

		combo method:

		$BBHOME/bin/bb-combo.sh add "status $MACHINE.cpu $COLOR `date` DATA..."

		This will build a combo message. When the message reaches
		the MAXLINE size then the message is sent to the BBDISPLAY(s)
		and starts a new message.

		Note that only "green" status are saved in a combo message.
		All non-green status are sent immediately.

	3) Ending combo message processing

		A partial combo message might be required to be sent
		to a BBDISPLAY(s) when your script is done.  At the end
		of your script, add this line:

		$BBHOME/bin/bb-combo.sh end

		This will also remove temporary files that were used.

	If you need examples, take a look at the bb-local.sh and bb-network.sh
	scripts, they use the combo message.
		


6.20    Tools to manage Big Brother data

	bin/bbrm Removes data associated with a hostname or a service
		that is no longer monitored.
	bin/bbmv Renames data associated with a hostname or a service.
	bin/bbprune Archives historical data up to and including the
			month given as arguments.  This tool creates
			archive files in the bbvar/archive directory.



6.21    Sending a BB message in cron

	If you want to use bin/bb send a single message to a
	BBDISPLAY/BBPAGER in cron, remember that bin/bb requires the
	BB environment to be loaded before it is executed. This loads
	environment variables required by bin/bb to execute properly.

	Use a crontab line similar to the following entry:

	0 8-20 * * * BBHOME=/home/bb/bb;export BBHOME;. $BBHOME/etc/bbdef.sh;$BBHOME/bin/bb $BBDISP "status test.test red `date` This is a test"
	
	BBHOME=/home/bb/bb;export BBHOME;. $BBHOME/etc/bbdef.sh
		This sets the BB environement
	$BBHOME/bin/bb $BBDISP "status test.test red `date` This is a test"
		This sends the actual command. $BBDISP is the BBDISPLAY location.



6.22    Defining characters that BB accepts in a status message

	By default BB removes dubious characters from an incoming
	status log.  The `,$,;,|,&,\ characters are removed.  If you
	don't want that feature, add -DDONTCLEANSTRING in CFLAGS
	of the Makefile. 

	If you use LARRD, you'll require to at least compile BB
	using the -DNOTAMP entry in CFLAGS of the Makefile.  You can
	also use -DDONTCLEANSTRING with LARRD.



6.23    Integrating a LARRD graph with a status log

	If you have installed LARDD along with your BB installation,
	you can have a status log associated LARRD graph displayed when
	you view the HTML generated page of a status log.

	To enable that feature, add the -DLARRD directive to the CFLAGS
	entry in src/Makefile and recompile (make clean;make;make install
	make sure BB was stopped) After the BB restart, when you'll view
	the status log, the LARDD graph will also appear if it's available.


          
------------------------------------------------------------------------

Section 7: 	Other documentation sources

	$BBHOME/README
	$BBHOME/LICENSE
	$BBHOME/README.INSTALL
	$BBHOME/README.CHANGES
	$BBHOME/install/README
	$BBHOME/src/README




© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-info.html0100644002342100007640000002501607616533100014215 0ustar bbbb The Big Brother Systems and Network Monitor

Big Brother

A Web-based Systems and Network Monitoring and Notification System

    This document introduces Big Brother, a solution to the problem of Systems Monitoring.

    Commercial solutions are available, however these solutions are very expensive, costing many thousands of dollars in additional hardware and software. More distressing though, is the obvious complexity of these solutions, most requiring several hundred man-hours of consulting time just to set up. Finally, they don't use the Web as their interface, not only making truly remote monitoring impossible, but also making data sharing extremely difficult.

    Big Brother is a simple, effective solution to the Systems Monitoring problem, and is presented here for your comments and suggestions.


    What is Big Brother?

    Big Brother is a loosely-coupled distributed set of tools for monitoring and displaying the current status of an entire network and notifying the admin should need be. It came about as the result of automating the day to day tasks encountered while actively administering Unix systems.

    It consists of five major parts:

    • Central monitoring station (Display Server) This station accepts incoming reports and prepares them for display. Big Brother uses the Web as its user interface, so it can be accessed by anyone with clearance to access the Big Brother site. Furthermore, additional views or displays can be created quickly and easily by writing simple Bourne Shell scripts. This server is known as the BBDISPLAY server.

    • Network monitor (bb-network.sh). The network monitor runs on any Unix machine and periodically contacts every element listed in the etc/bb-hosts file via ping. Additional tests are performed if the service is listed on the line in the etc/bb-hosts file. This system is known as the BBNET machine. The results are then sent to the system designated as the Display Server (BBDISPLAY). Connections to the internet may likewise be monitored.

    • Local System Monitor (bb-local.sh). Each server in the network runs a local system monitor which periodically samples disk space, CPU usage, number of users, and ensures that required processes are on-line and active. It reports the results to the Display Server, and also has the ability to directly page the administrator in the case of an emergency.

    • Pager Programs (Pager Server). The client (bb) that sends status lines of information to the designated server (bbd) and executes send a notification using the proper notification method. This server is known as the BBPAGER server.

    • Intra-machine communications programs (bb, bbd, nettest). A client (bb) that sends status lines of information to the designated Display and Pager Servers (running bbd) which then take appropriate action. These programs communicate using port 1984; what else would Big Brother use?


    The Big Brother Display:

    Big Brother was designed to provide instant information about the health of a Systems and Network environment to anyone, anywhere, with Web access to the site.

    Network information is now instantly available to those who need it most: managers, systems administrators, and people on the help desk can actively and simply monitor the health of the network.

    If any condition is severe, the administrator will have been paged, can use Big Brother to get additional information, and can proceed to fix the problem. Problem verification, data sharing and correction should improve immediately, since everyone has implicit access to the same information.

    Finally, since warnings are displayed, corrective action can be taken even before users notice that there is a problem.

    The display matrix shows a status of green (ok), yellow (warning), red (severe), and purple (no contact) and clear (not tested) for each system/area combination. Furthermore, the entire screen changes color to reflect the most serious condition on the network. In order of increasing severity these conditions are: green, yellow, blue, red.

    Therefore one single warning anywhere on the network results in the entire display turning yellow which is highly visible, even from far away.

    Each of the elements in the display matrix can then be clicked on to provide additional information, including the code, time, and specific information about the area being monitored.

    Additionally, Big Brother now makes detailed information about every server in the network instantly accessible, just by clicking on the server name.


    Big Brother Warning Conditions:

    Every element in the etc/bb-hosts file is accessed every 5 minutes. Any loss of contact results in a code red, and the administrator being paged, unless this condition is explicitly permitted, for example with dialup devices that may not be online.

    The BBNET machine tests each element in the etc/bb-hosts file every 5 minutes using a bbnet. Each system can have specific services like ftp, http, and mail tested, as required. Inability to contact a server is a severe condition. Inability of access a page due to a "Server Error" results in a warning condition.

    All systems are monitored for disk usage. Any disk over 90% full is considered a warning condition. Disks over 95% full are marked as a severe condition, since this situation can quickly result in a system crash or hang.

    All systems are monitored for CPU usage. A load average over 1.50 is a warning condition, 3.00 merits a severe condition. These values are configurable.

    Processes are monitored on each system as well. The choice of what is to be monitored is dependent of what each system actually does. Sendmail and http are monitored on all systems by default. A page may be generated or a warning condition results if any of these important processes should not be running.

    System messages are monitored. Big Brother watches the system message file for NOTICE and WARNING conditions. NOTICE conditions result in the admin being paged immediately. WARNING conditions cause a yellow dot to appear. Clicking on the corresponding dot will report the message that caused the display.

    And finally the whole system itself is monitored by the BBDISPLAY. Any report over 30 minutes old results in that report, and the entire screen being marked in purple, indicating a likely loss of contact within the Big Brother system itself.

    Note that all of the above are configurable parameters.


    Design Considerations:

    Some of the guidelines involved in the design of Big Brother are the following:

    • Usefulness. Display only useful information in a timely and effective manner. Too much information can be as bad as too little, especially if it's displayed in an obscure manner.

    • Intelligence. Use of heuristics to determine health, in a manner similar to what an actual administrator or user would do, instead of very low-level testing.

    • Highly scalable. Easily made more redundant through replication of the individual components. All that has to be decided on is the level of redundancy required and where to install the scripts. No additional cost and little additional complexity.

    • Modular. Big Brother is designed in a totally modular fashion, using simple Bourne shell scripts to test each area. Adding more monitoring areas only requires the creation of a script to monitor that area. New monitoring areas can be added and distributed in a manner of minutes.

    • Easily Customized. Error levels and actions can be designated on a system-by-system basis, just by editing the appropriate script.

    • Replication. Separation of local system reporting and network reporting means that there is built-in replication, at the system level and the network level. Further redundancy is built-in at the display level through checking timestamps of incoming reports; loss of reports indicates a problem which causes the screen to turn blue. Finally, each client has the ability to send messages to the pager daemon; this further reduces the likelihood of non-notification in the event of catastrophic systems failure.

    • Simplicity. The design is extremely simple, the client/server programs are less than 8K bytes in size, and messages are less than 100 bytes. It is extremely lightweight and very efficient.

    • Open and Standard. Using the Web as the display mechanism allows extremely rapid prototyping of displays, and provides a standard and elegant method of distributing this essential information, worldwide. The C programs involved are small, simple and standard. Shell scripts are obviously portable, as are programs like lynx and kermit, which are used for testing. Therefore, all the elements of Big Brother can be easily ported to any Unix System.


    What Big Brother isn't:

    Big Brother is not a replacement for a qualified and experienced Systems Administrator. On the contrary, it is a big brother to the Sys Admin. It does not shut down machines or terminate processes, although it could be programmed to do so. It just identifies and notifies.

    Big Brother does not explicitly monitor individual hardware components. However, failure of a hardware component is very likely to cause a severe condition through loss of service.

    Big Brother does not monitor performance of the network, servers, databases or any individual application. It will however provide information about CPU loads and implicit information about response time; i.e. telnet connections have 15 seconds to answer.

    Your Comments and Suggestions are welcome!

    Send them via e-mail to sean@bb4.com


    About the Creator:

    The photo which adorns the Big Brother Display is Sean MacGuire. He is Big Brother... it is meant to be reminicent of George Orwell's book 1984. That's why it's not a pretty picture.

© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-files.html0100644002342100007640000004131207616533100014361 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Big Brother - Files

KNOWN.BUGS List of known bugs
LICENSE Big Brother license document
README Duh
README.CHANGES All changes should be in here
README.INSTALL Installation Instructions
bin Directory where executable prograns live
etc Administrative settings
ext Directory where addon programs are installed
install Files used during installation & sparse documentation
runbb.sh The mother of all shell scripts. This file gets executed to start Big Brother. You'll need to set the BBHOME environment variable here. Arguments are runbb.sh start|stop|restart
src This is where the C program source lives
tmp Temp files live here. You can wipe this out periodically.
web Programs having to do with web page generation are here
www Big Brother output goes here. This directory needs to be accessible from your Web server, since all the BB output lives here


The Glorious bin directory



bbThe bb client which sends information to a bbd server. The format of the bb command is:
    bb 123.123.123.123 "status machinename.status color data"
    
bbdbbd is the server which processes all incoming bb messages.
bbnetThe bbnet command is used to test TCP ports. It is generally used by bb-network.sh, but can also be run by hand. It's format is:
    bbnet machine:port argument-to-send
    bbnet http://bb4.com
    bbnet bb4.com:22
    
touchtimetouchtime creates timestamped files for bb to use.
bb-display.shThis program is run every BBSLEEP seconds from bb-display.sh, normally every 5 minutes, to generate the BB web page output
bb-local.shThis script is run from runbb.sh and does all local tests including disk, cpu, messages, and processes up and running.
bb-cpu.shThis script is run from bb-local.sh and runs the CPU test.
bb-disk.shThis script is run from bb-local.sh and runs the DISK test.
bb-msgs.shThis script is run from bb-local.sh and runs the messages file check.
bb-procs.shThis script is run from bb-local.sh and runs the process verification test.
bb-network.shThis script is also run from runbb.sh, but only on the machine listed as BBNET in the etc/bb-hosts file. For each system, it tests any protocols listed in the etc/bb-hosts file.
bb-ping.shThis script is called by bb-network.sh to test connectivity.
bbrunThis script is only used to run programs from runbb.sh. It loops forever, running the programs given to it as arguments every BBSLEEP seconds.
bb-mailack.shThis script can acknowledge an event by e-mail.
sendmsgThis program actually sends the page out via whatever mechanism is supposed to be used, i.e numeric, email, etc.


The deeply confusing etc directory



bb-dftab.DISTThis file is used to set disk space warning and paging values on a machine by machine basis. It is only necessary if you need to change the default warning and paging values of 90% and 95%. It must be renamed to bb-dftab, and consists of a sequence of lines of the format:
[hostname]:filesystem:warning-percent:panic-percent
i.e. the line
/usr:92:97
would tell Big Brother to send a warning (yellow) when /usr was 92% full, and an alert (red) when the /usr reached 97% full. Similarly, you can use this file to test paging by assigning very low values to filesystems, i.e.:
www.maclawran.ca:/:1:2
is almost certain to generate a red dot on screen, and a page. It is only valid if the host is www.maclawran.ca
bb-hostsThe bb-hosts file is the center of each BB instance. Click here for more info
bb-proctab.DISTThis file is used to set processes to check for on a system by system basis, instead of editing PROCS and PAGEPROCS on every system. The format is:
    [host]:proc list for yellow : proc list for red
    
This file must be renamed to bb-proctab to take effect.
bb-cputab.DISTThis file is used to set CPU threshold values on a system by system basis, instead of editing CPUWARN and CPUPANIC on every system. The format is:
    [host]: misc settings : cpu threshold for yellow : cpu threshold for yellow for red
    
This file must be renamed to bb-cputab to take effect.
bb-msgstab.DISTThis file is used to define keyword(s) to look for when checking the messages (or log) files. This is done on a system by system basis, instead of editing PAGEMSG, MSGS and IGNMSGS on every system. The format is:
    [host]: misc settings : log filename(s) : yellow keyword(s) : red keyword(s) : ignore strings
    
This file must be renamed to bb-msgstab to take effect.
bb-bbexttab.DISTThis file is used to define the various external scripts to execute on a local system. This is done on a system by system basis, instead of editing BBEXT on every system. The format is:
    [host]: misc settings : external script(s)
    
This file must be renamed to bb-bbexttab to take effect.
bbchkcfg.shProgram to check whether variables are set correctly for you BB installation.
bbchkhosts.shProgram to check whether your bb-hosts file is correctly formatted.
bbdef.shThis file contains most of the important setting used by BB to run. Some of the most important variables in here include

    FQDN Use fully-qualified domain names. This has to be the same on all systems!
    DFWARN, DFPANIC Default disk notification levels
    CPUWARN, CPUPANIC Default CPU notification levels
    PROCS, PAGEPROC Processes that have to be running
    BBWEBHTMLLOGS Where on the web does your BB html status files live?
bbinc.shThis file contains things less often changed, however, some of the display variables live here, including MKBBFONTROW and friends. This script sets up the internal environment variables BB needs to run. Be very careful if you decide to mess around in here.
bbsys.localThis file contains local system overrides for some command line locations, should they differ from the default.
bbsys.shSets variables containing the full pathname of most of the commands BB needs to use.
bbwarnrules.cfgRules and recipients for BB paging.
bbwarnsetup.cfgConfiguration for BBWARN.
numeric-k6.scrScript to use for kermit version 6 numeric paging.
numeric.scrScript to use for kermit paging. Generally pre-version 6.
security.DISTThis file is used to control who can send messages to your bbd process. This file must renamed 'security' and it's format is one IP address per line, i.e.
    123.123.123.123
    234.234.234.0
The first entry allows the IP address 123.123.123.123 to connect, and the second, any machine from the 234.234.234.* subnet.
sms.scrSMS script for use with kermit. Used in europe. Read install/README.SMS for more information


The truly useful ext directory



ext-protoSample external script demonstrating how BB can be used to send any sort of data to a BB display.


The boring install directory



Makefile.*Makefiles for all supported OS's
bbclientUse this script to create installable tarballs for systems with the SAME OS, to be installed in the SAME DIRECTORY. Format:
    bbclient client-name-as-listed-in-bb-hosts
bbconfigRun this to configure your instance of BB for your operating system. Format:
    bbconfig OS-TYPE
where OS-TYPE is one of: bsdi sco3 sco freebsd solaris hpux9 hpux linux sunos netbsd osf ultrix irix unixware redhat aix dynix debian dgux
bbsys.*File containing the location for all commands required by BB for a given operating system. This file is copied to bbsys.local as part of the installation process.


The worderful src directory



MakefileMakefile controls the compilation of BB
READMEThe README file contains details that could be helpful if you're having trouble compiling BB, or if you're moving BB to a new platform.
bb.cSource code to the bb client program
bb.hInclude file with standard definitions
bbd.cSource code to the bbd daemon program
bbnet.cSource code to the bbnet port testing program
touchtime.cSource code to the touchtime program used to create and control timestamps on files.


The essential web directory



bb-ack.shProgram used to send acknowledgements via the webpage interface. BBHOME must be set, and this program must be installed in your cgi-bin directory for online acks to work.
bb-hist.shProgram to generate history graph. BBHOME must be set, and this program must be installed in your cgi-bin directory in order to work.
bb-histlog.shThis program is called when you click on an individual status log from the history page. BBHOME must be set, etc, etc.
bb-hostsvc.shThis program is called when you have defined DYNAMIC output for HTML status logs..
bb-rep.shThis program is executed when you want to view availability statistics for all status.
bb-report.shThis program is executed by bb-rep.sh to view availability statistics for all status.
bb-replog.shThis program is executed when you want to view availability statistics for a single status. BBHOME must be set, yadda, yadda, yadda.
bb_headerHeader prepended to the bb.html web page
bb_footerFooter appended to the bb.html web page
bb2_headerHeader prepended to the bb2.html web page
bb2_footerFooter appended to the bb2.html web page
hist_headerHeader prepended to history pages
hist_footerFooter appened to history pages
histlog_headerHeader appened to historical ststus pages
histlog_footerFooter appended to historical status pages
hostsvc_headerHeader prepended to HTML status reports
hostsvc_footerFooter appended to HTML status reports
bbrep_headerHeader prepended to availability reports
bbrep_footerFooter appended to availability reports
replog_headerHeader prepended to individual availability reports
replog_footerFooter appended to individual availability reports
mkbb.bkgProgram to determine the background color for a BB page or subpage
mkbb.colsProgram to determine the column headings for a given table
mkbb.compProgram to determine the column headings in use for a given table. Used for group-compress headings.
mkbb.pageProgram to process bb subpages.
mkbb.shProgram that creates the main BB web page, bb.html and availability reports
mkbb2.shProgram that creates the summary BB web page, bb2.html
mkbbwml.shProgram that creates the summary BB web pages, in WML for WAP enabled devices


The prolific www directory


acksDirectory where ack information is stored
gifsDirectory where BB images are stored
helpDirectory containing online help text.
htmlHTML status reports
index.htmlFile link pointing to bb.html
notesNotes directory used for system information.


The surprising bbvar directory


acksDirectory where ack information is stored
dataData directory used for when using the data message type.
histDirectory containing history data
histlogsDirectory containing all status changes, by machine
logsRaw status reports, used for processing




© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/index.html0100644002342100007640000002625707616533101014021 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Big Brother - Help


Big Brother FAQ
Purple problems
"Forbidden" problems
BB Installation and Configuration Manual
Changing the look of BB
Explanation of BB files
About the bb-hosts file



Color codes by order of severity

Trouble
Bad things are happening.
No report
No report from this client in the last 30 minutes. The client may have died.
Attention
The reporting system has crossed a threshold you should know about
OK
Everything is fine. Have a nice day.
Unavailable
The associated test has been turned off, or does not apply. A common example is connectivity on disconnected dialup lines
Disabled
Notification for this test has been disabled. Used when performing maintenance
Acked
A current event has been acknowledged by one or many recipients. The acknowledgement is valid until the longest delay has expired

All connections are checked every 5 minutes


Trouble

Most severe conditions result in the administrator being notified. These include loss of network connectivity, loss of HTTP access, and disk conditions over 95% full, since these can result in a system hang. Furthermore, any "NOTICE" messages in the message file causes a notification since this may signal a disk fault.

Under these circumstances, the screen should turn red. Click on the corresponding red dot for additional information about the condition.

If a severe situation is occurring that is not being noticed by Big Brother, use the PAGE/ACK button on the main screen to notify the administrator manually.


Attention

These include HTTP server errors, disks 90-94% full, the death of important processes, and "WARNING" messages in the system logs.

The screen should turn yellow if this is the most severe situation at the time. Click on the corresponding yellow dot for additional information, and notify the administrator manually if necessary.


No Report

Each report is checked for freshness. If any report is more than 30 minutes old, it is marked with a purple dot, and the screen turns purple, assuming that it is the most serious situation at the time.

These may be the result of heavily loaded systems, but may also indicate a more serious loss of communication within the Big Brother system itself.


Disabled

Notification for this test has been disabled. Used when performing maintenance tasks on a host


Unavailable

Under some conditions, the administrator may elect to disable some tests, in which case the reported condition becomes clear.


OK

Green dots indicates that all is well. Green screens represent a seldom achieved state of administrative bliss.


Pager Codes

The administrator will be notified when conditions merit. The numeric message is formatted as follows: [3 DIGIT CODE] [IP-ADDRESS]

  • 100 - Disk Error. Disk is over 95% full...
  • 200 - CPU Error. CPU load average is unacceptably high.
  • 300 - Process Error. An important processes has died.
  • 400 - Message file contains a serious error.
  • 500 - Network error, can't connect to that IP address.
  • 600 - Web server HTTP error - server is down.
  • 7-- - Generic server error - 7 + server port number i.e. 721 = ftp down
  • 800 - DNS server on that machine is down
  • 911 - User Page. Message is phone number to call back.
  • 999 - The service reported in an error could not be found in the svcerrlist token in etc/bbwarnsetup.cfg file.

System Information

Click on any server name for additional details about the machine. Information about all components are available, including serial numbers, partition sizes, SCSI addresses, and the physical locations of the devices. This information lives in the www/notes directory.


General Information

The current status of any individual component is always available by clicking the appropriate dot in the display matrix. You may have to hit Reload to get the most recent entry.

Occasionally the screen changes color for CPU or HTTP warnings. These can usually be disregarded since Big Brother has been instructed to be very sensitive during this initial test. Similarly, internet connections may turn yellow when the network is heavily loaded. Although it should be checked out, this is usually not a problem unless the whole Internet section goes yellow.


Big Brother Column Information

conn

The conn column denotes the ping check performed periodically. This code is located in bb-network.sh.


nntp

The nntp column denotes the nntp check performed periodically. This code is located in bb-network.sh. It makes sure the news server is alive and well.


cpu

The cpu column denotes the cpu check performed periodically. This figure is based on the 5 minute load average as reported by the 'uptime' command, in the second column. The code for this test is located in bb-local.sh.


disk

The disk column denotes the disk check performed periodically. This test is just the 'df' command with the disk most full being reported. The warning amount is 90% by default, and the system is set to panic at 95%. These values are set in $BBHOME/etc/bbdef.sh and may be changed. The code for the disk test lives in bb-local.sh. You may also set warning/panic level individually in the etc/bb-dftab file. See the etc/bb-dftab.DIST.


dns

The dns column verifies the status of the DNS server on that machine. The test is basically an nslookup with the server name and IP address as arguments.


ftp

The ftp column denotes the ftp check performed periodically. This code is located in bb-network.sh. It is part of the new group of generic server tests performed. To test this service on a given machine, just include 'ftp' on the line in the bb-hosts file.


http

The http column denotes the http check performed periodically. This code is located in bb-network.sh. It will return OK if the server is there and does not return a string containing the word 'Error'. It should be more rigourous. Note that password-protected pages return an error when they shouldn't.


msgs

The msgs column denotes the msgs check performed periodically. This code is located in bb-local.sh. Only NOTICE and WARNING conditions are considered. Note that a NOTICE condition will cause a notification (code red) whereas a WARNING just turns the screen yellow. There is no way to turn these messages off, short of clearing out the messages file manually or modifying the tags from WARNING to wARNING and NOTICE to nOTICE. You may also introduce tags in the etc/bbdef.sh file in the PAGEMSG and MSGS variables. You can also have the check performed on multiple log files by set MSGFILE in bbsys.local to all log files to be checked. The msgs test also checks that the logs files are readable and non-empty. These values can be set for all hosts using the etc/bb-msgstab single configuration file.


pop3

The pop3 column denotes the pop3 check performed periodically. This is part of the generic test code in bb-network.sh. It checks that the pop3 server is alive and well. To test a machine for the pop3 server, put the word 'pop3' on that server's line in the bb-hosts file. You may have to put pop-3 instead on certain platforms. Check /etc/services for the correct spelling.


procs

The procs column denotes the procs check performed periodically. This code is located in bb-local.sh. It makes sure that the processes defined in etc/bbdef.sh in the PROCS variable exist on the local machine. If a process does not exist, and it has been defined in the PAGEPROC variable, then the code is red and a notification is sent out. The ps command is used to get a current process listing.


smtp

The smtp column denotes the smtp check performed periodically. This is part of the generic server test code located in bb-network.sh. It makes sure that the SMTP process (usually sendmail) is alive and well.




© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-notify.html0100644002342100007640000000445307616533101014575 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Understanding the Notification feature (BBWARN)


BB comes preconfigured to notify to root@localhost if there's a problem. For most admins, this setup is not enough. As you start modifying bbwarnrules.cfg & bbwarnsetup.cfg, and somethimes BBWARN breaks. This document explains how are notifications handled by BB.


Everything starts on the client

On each client, there's a set of scripts that are executed and send their status using the 'bb' program. The primary task of the 'bb' program is to send a status to the BBDISPLAY host(s). But if the color level of the status is defined by the environment variable PAGELEVELS then a "page" message is sent to the BBPAGER host(s) defined in the etc/bb-hosts file. Note that you can define multple BBPAGER hosts in the bb-hosts file (new from version 1.3).

The PAGELEVELS variable is derived from two locations. The default is defined in the etc/bbdef.sh script: the default is "red purple". Those values are overridden by the values defined in the etc/bbwarnsetup.cfg file with the "pagelevels" token.


... and make their way to the BBDPAGER host(s)

On each BBPAGER host, a "bbd" process listens for messages and if a "page" message is received then it takes the message data associated with the "page" message and fork/exec itself to handle the notification.







© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/purple.html0100644002342100007640000000765307616533101014220 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Purple Problems


This question is asked in one form or another so often that it's getting it's own help file.

In the outside world when things go bad, they turn green. Well, green is good here. In the world of Big Brother, when things go bad, things turn purple.

Of course the only things we have are reports, and purple means they're over 30 minutes old. This indicates that the remote client has stopped sending reports, possibly because either BB or the machine has stopped working.


The background is purple, where's the purple dot?


It is possible to have a purple background without seeing any purple dots on screen. How?

The main BB display bb.html is generated based on the information contained in the etc/bb-hosts file. However, the background color is determined from the contents of the status logs (in the $BBLOGS directory), so it's possible they're out of sync. This happens when:

  • A host is removed from the bb-hosts file
  • A host is renamed in the bb-hosts file
  • FQDN is enabled or disabled

Essentially, when then host file changes, the report names change, and the old reports are left behind, become stale, and go purple.

To see the offending entries, hit the "Condended View" button , and the purple dots should magically appear.


How do I get rid of these old reports?


Once you know the name of the offending files, it's pretty easy to get rid of them. Remove all files with that name from the following directories(location of BBLOGS/BBHIST/BBHISTLOGS found in $BBHOME/etc/bbinc.sh):

  • $BBLOGS - this is the only one that really matters
  • $BBHIST - these are just to be tidy
  • $BBHISTLOGS
  • www/html
You can use the bin/bbrm script to accomplish this task for you.


When I click on a purple dot, it's not purple any more


This can happen with any color dot, actually. The Big Brother display is just a snapshot of all the status reports in the $BBLOGS directory at the time posted on screen.

New reports are coming in all the time, and if a report with a different status comes in after the display screen was generated, the color won't be the same. Remember that when you click on a dot, you always get the newest report. This new condition should be reflected the next time the Big Brother main display is regenerated, in five minutes or so.


Why doesn't Big Brother remove the old files itself?


The philosophy behind Big Brother is to Monitor and Notify, but don't Act. Big Brother can't tell the difference between a status report that is old because of a change to the bb-hosts file, versus a legitimate problem report. So, to be safe, and not to miss anything, BB treats the old report as a problem, and turns the screen purple.





© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-ack.html.DIST0100644002342100007640000000547107616533101014566 0ustar bbbb Big Brother - Contact
Get Big Brother
Condensed view Report Help
contact
Contact


Big Brother Users

Page the admin



Enter your phone number or message below


For Administrator Use only

Acknowledge that you've been paged and are working on the problem


Don't page me again about this for minutes
Optional Message:
Enter Security Code:


© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-rep.html.DIST0100644002342100007640000001126007616533101014607 0ustar bbbb Big Brother - Availability Report
Get Big Brother
Contact Condensed view Help
availability report
Report


Big Brother Availability Report

- to -


© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/bb-look.html0100644002342100007640000000732507616533101014232 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Changing the look of BB


Starting with version 1.3, you have a little more control over the general appearance of the BB status pages. This document is a quick reference as to what you can change and how.


Where do BB pages come from?


Big Brother pages are generated in 3 different ways. The summary pages bb.html and bb2.html are created by the web/mkbb.sh and web/mkbb2.sh scripts respectively. Don't mess with these files. If you mess with these files, and everything stops working, don't ask for help.

Individual system reports are generated in real time by the bbd daemon and placed in the html directory. Likewise, it is unwise to mess with the code in bbd.c; it's both ugly and unhealthy.

Finally, pages like the history status pages are generated on the fly by CGI programs like bb-hist.sh. Don't touch.


Controlling Fonts


The fastest way to change the look and feel of Big Brother is via the MKBB* variables in etc/bbinc.sh. These variables are simply arguments to the HTML FONT command, and therefore allow you to specify the font, color, and size for the following:

Title font is controlled by the MKBBTITLE variable. This is the font that machine grouping will be displayed in.

Column headers are controlled by MKBBCOLFONT. These are the headings that appear over the generated HTML tables like "conn", "cpu", etc.

System font is controlled by MKBBROWFONT. This is the font used for all the system names that appear down the left side of the BB display.

Note that you will need to stop and restart BB for these changes to take effect.


General structure of the BB pages


Because modifying source code is difficult and relatively unpleasant, we've provided some simplified methods for making changes. In particular the header and footer files located in the web/ directory are used for page generation. These files are named according to the files they control, i.e.

BB Main Display Page (bb.html)	bb_header bb_footer
BB Summary Display (bb2.html)	bb2_header bb2_footer
Individual status reports	hostsvc_header hostsvc_footer
History Pages			hist_header hist_footer		
Historical Status info		histlog_header histlog_footer
Within these files, the only change you may want to make would be to define your own stylesheets.


Miscellaneous Issues


Expect to see support for "skins" in a future release of Big Brother, as well as proper multilingual support. GIFS, as always live in the www/gifs directory.

Finally, no matter what you do, please leave a link back to the Big Brother site - credit where credit is due! Thanks.





© Copyright Quest Software, Inc. 1997-2002 All rights reserved.
./bb/bb19c/www/help/memory.html0100644002342100007640000001422207616533101014207 0ustar bbbb The Big Brother Systems and Network Monitor
Big Brother help
Help

Big Brother - BB-Memory - Help


memory

The memory column shows the current memory usage on the host. It attempts to show physical, actual, and swap.


Definitions:

The term memory identifies data storage that comes in the form of chips, and the word storage is used for memory that exists on tapes or disks. Moreover, the term memory is usually used as a shorthand for physical memory, which refers to the actual chips capable of holding data. Some computers also use virtual memory, which expands physical memory onto a hard disk.
Physical Memory:
The memory hardware (normally RAM) installed in a computer. The term is only used in contrast to virtual memory.
Virtual Memory:
The address space available to a process running in a system with a memory management unit (MMU).
Actual Memory:
A computed value that reflects physical memory +/- any buffers or cache that is currently in use. This value may not be available on all operating systems.
Swap Memory:
An area of disk (e.g. a swap file) used to store the state of a process that has been swapped out. Under a virtual memory system, it is the amount of swap space rather than the amount of physical memory which determines the maximum size of a single process and the maximum total size of all active processes.


Currently supported operating systems:

  • Linux (RedHat, Slackware, Debian)
  • AIX
  • HPUX
  • IRIX
  • OSF
  • SOLARIS


Distribution

The current copy of bb-memory can be obtained from either the development site or the Big Brother archives.
   Big Brother Archives: http://www.deadcat.net
   Development Site:     http://www.ben-tech.com/projects/bb/bb-memory
   
Note: The MOST-CURRENT-COPY will always be on the development site.


*NIX Customization

Within the bb-memory.sh script there are a few variables that are customizeable to better suit various environments. These variables are the warning levels for the various parts of the memory test.

PERCENT_PHYS_WARN   Warning level for physical memory.
PERCENT_PHYS_PANIC   Panic level for physical memory.
PERCENT_ACT_WARN   Warning level for actual memory.
PERCENT_ACT_PANIC   Panic level for actual memory.
PERCENT_SWAP_WARN   Warning level for swap/paging memory.
PERCENT_SWAP_PANIC   Panic level for swap/paging memory.


Windows NT Usage

Command line usage for Windows NT <.>bb-memory test.
usage: bb_memory.exe [OPTIONS...]

where:
   -p PATH         - Set the PATH to place the output.
                     (Creates the file PATH\memory)
   -P "WARN PANIC" - Set WARN and PANIC values for physical memory.
   -S "WARN PANIC" - Set WARN and PANIC values for swap/paging memory.
   -V "WARN PANIC" - Set WARN and PANIC values for virtual memory.
   -F              - Turn on "Fully Qualified Domain Names" (FQDN).

If a PATH is not specified, then output will be directed to STDOUT.

NOTE: For the warning values, you will need to enclose them with
      quotation marks.

   

Example:

* To run bb_memory.exe using FQDN and directing output to C:\EXT_OUT run...

   bb_memory.exe -F -p C:\EXT_OUT
   

* To run bb_memory.exe using FQDN, directing output to C:\EXT_OUT, and using the values 75 & 90 for physical memory run...

   bb_memory.exe -F -p C:\EXT_OUT -P "75 90"
   


Support

Support for bb-memory can be obtained by sending a message to either the Big Brother mailing list bb@bb4.com or to the current maintainer of the bb-memory package bb-memory-support@ben-tech.com.

$Id: memory.html,v 2.3 2000/09/06 00:44:42 brs Exp $

./bb/bb19c/www/html/0040755002342100007640000000000007616533101012027 5ustar bbbb./bb/bb19c/www/html/.helloworld0100644002342100007640000000000007616533101014166 0ustar bbbb./bb/bb19c/README0100644002342100007640000003722307616533101011123 0ustar bbbbTHE BIG BROTHER SYSTEM AND NETWORK MONITOR ========================================== Version 1.9c May 15th, 2002 (c) Copyright Quest Software, Inc. 1997-2002 All rights reserved. Questions? Contact: BB4 Technologies Inc. E-mail: info@bb4.com Tel: +1 (514) 996-INET Please read the LICENSE agreement before using this package. For installation instructions please refer to the README.INSTALL file. For documentation, consult the install/README file, better yet the complete documentation is available in HTML format in www/help/bb-man.html, www/help/bb-faq.html & www/help/bb-info.html or point your browser at http://bb4.com/ and hit the "HELP" button *** READ THE README.SECURITY FILE BEFORE INSTALLING *** If you're new to BB, we suggest that you subscribe to the BB mailing list. To do so, follow these instructions: Send an e-mail to MajorDomo@bb4.com In the body of the e-mail message (not the Subject line), place the statement: subscribe bb We have searchable archives of the mailing list available at http://support.bb4.com. Thanks to Nick Silberstein for initially creating and housing it. When you have finished installing BB on all of your monitored hosts, you might want to check out the FTP archive that contains many contributed scripts. Adam Goryachev house them at ftp://ftp.deadcat.net/pub/BB, better yet try http://www.deadcat.net/ Changes (for more details see the README.CHANGES file) ======= new in 1.9c LARRD graph integration in status logs. Fixed a performance problem in bb-network.sh. new in 1.9b bbrun is now compiled C program. Escalated/delayed recipients with large intervals are now notified properly. Reuse ACK id when pagetype is EVENT. Timestamp qualifiers s/m/h/d are now available in status messages. new in 1.9a Fix for SuSE ping bug in 1.9 wasn't complete new in 1.9 Color and minutes are configurable for server reboot check. Generated HTML pages in pages/subpages can have their own header/footer and rep_header/rep_footer files based on the page/subpage. Fixes misc bugs: red warning instead of yellow in process check, SUSE ping bug, log file subset name problem, HTTP test with & in the name, don't match noconn and dialup on hostnames. new in 1.8d4 fix in 1.8d3 wasn't complete... new in 1.8d3 Correct mistake introduced in 1.8d2: bb-combo.sh not counting bytes in current message correctly. new in 1.8d2 Fixed bugs with "subpage" directive. BB can now safely check local tests in bb-procs.sh. Added WCC and MAILC paths. Misc bug fixes and display issues. new in 1.8d1 Fixed multiple subpage bug: top directory would be lost after 1st subapge. new in 1.8d Added subpage keyword to bb-hosts. Darwin support added. Fixed misc. bugs. new in 1.8c Minor bug fixes new in 1.8b4 summary directive now sends color of given URL so a subpage summary can be sent to a remote BBDISPLAY. Improve handling of large files in bb-msgs.sh. Added script to backup BB data. New network test name is defined in bbdef.sh not bb-network. Added numerous HTML anchors in generated web pages. Minor changes to SUN, AIX, OSF and Linux platforms. Minor fixes: bbmv, bbrm, mkbb.cols, mkbb.page. new in 1.8b3 Combo messages weren't properly relayed. new in 1.8b2 Minor bug fixes to message checking, notification http testing and installation script. new in 1.8b1 Aestetic change to bb-replog.sh. BBRELAY check in bbchkhosts.sh. new in 1.8b Fixed Messages file test. Time Non-Critical wasn't displayed proprely in bb-replog.sh. Minor changes of HTML pages. new in 1.8a Fix handled of undefined red/yellow strings in bb-msgstab new in 1.8 Added SuSE installation support. Network and local tests now use combo message to send status logs. Location of BBPID & BBOUT are now user definable. WAP displays also acknoledgements. BBRELAY implemented: messages can be forwarded to another BBDISPLAY/BBPAGER. bbmv/bbrm can be used to work on a single service. PINGWARN defines how many failed pings before yellow status is reached. Minor display changes. Introduced etc/bb-msgstab and etc/bb-bbexttab: defines parameters for logs file checking and external scripts execution. new in 1.7b4 WAP acks were always sent to BB4 ... new in 1.7b3 Added support for &CGIBINRUL in headers, small changes to mail acknowledgements, modified installation script when checking validity of user ID. Misc bug fixes: Wap page generation, regular expressions in SCO, sendpage integration, wrong background colors in reporting, manual notification. new in 1.7b2 Number of pings and sleep factor in connectivity test, and default external test values are now configurable. Bugs: removed unecessary sleep in bb-ping.sh, unitialized variable in dohostsvc.c and out of scope variable in bbsend.c new in 1.7b1 Changed over how sms- was modifed in 1.7b ;) new in 1.7b Introduced bb-cputab, WAP Acknowledgements. bb.wml an bb2.wml can span multiple pages to circumvent WAP device cache size. Real load average can be displayed in CPU test. An hostname alias can be used. minor display bug fixes. new in 1.7a minor fixes to eventlog.sh and acklog.sh new in 1.7 Checkmark image appears for events that are current and that are acknowledged. Combo message type introduced. Process test can now check for the number of instances is running. Yellow/Red thresholds are now user-definable for SLA reporting. Options for the bbnet executable can now be defined in the bb-hosts file. Messages file(s) check can now use old method or new method (msg exipry). Misc bug fixes: SMS message length, briefrcpt message, WML generation. Added more descriptive comments on certain error messages. new in 1.6e1 Fixed compilation problem under non-gcc compilers new in 1.6e Added: TOP support in CPU check, event counts in stats reporting. Fixes to: notifications, network testing and subpage display. new in 1.6d Fixed missing recoveries on certain OSes new in 1.6c Added a change that should have made it in 1.6b new in 1.6b Fixed improper handling of ! rules and recipients. Changed how putenv() is handled. Corrected incorrect status when disabling local tests. new in 1.6a Fixed "invalid time range" error. new in 1.6 Final release from betas. new "bbd" test. fixed bug in bb-hist.sh, connectivity and string replacement function. Specific port # can be defined for TCP network tests. new in 1.6beta3 Fixes to 1.6beta2. Added /bin/ln. Ack script C-fied. added index.wml. minor changes to bb-network.sh new in 1.6beta2 Proper bbnet error messages, TCP code displayed properly in error message. new in 1.6beta1 Some code fixes, debugging set with -DDEBUG=1, local tests can be disabled new in 1.6beta Notification feature rewritten in C. Some SCO changes. Mail acknowledgements for events now available. Misc bug fixes. new in 1.5d3 Fixed low-priority security issue new in 1.5d2 Fixed reenabling hosts bug. new in 1.5d1 Fixed RedHat ping problem. Removed additional characters from incoming message. Changed function name in bbd.c to prevent name clash with external lib. new in 1.5d briefrcpt can be specified with a regular expression. minor coding cleanup. new in 1.5c2 Misc bug fixes. Security fix. Unsupported SNMP trap support. new in 1.5c1 More bug fixes new in 1.5c Fix to acknowledge output, HTML generation bug fix new in 1.5b Bug fixes: Report generation in Solaris and in historical data new in 1.5a Performance enhancements to HTML generation(3x to 5x faster). tag removed; URL paths relative to /. Reporting script merged with HTML generating script. Local tests modularized. Bug fixes: HTTP tests now handled properly if ? or | is part of URL, pg- recipient escalation, SMTP test fix, error handling in reporting. new in 1.5 Availability reporting. WAP enabled display (optional). ?ftp describes a dialup service (returns clean on failure). Implemented new structure. Fixed bugs: recovery handling, no paging when using status+feature. new in 1.4h dialup host's local test turn to clear instead of purple when the log expires. Fixed duplicate offline/online messages. Optional message in disable request. Parallelized network tests. dialup hosts are tested only once. Sleep interval is adjusted to script run time. Fixed touchtime bug on Alpha Linux. new in 1.4g fix handling of enable/disable of all hosts. Added group-only directive. Fixed potential security problem. Fixes to LYNX. Added sanity checks new in 1.4f corrected documentation for failover. Fixed a bug in security file handling where on Solaris bbd would core dump. new in 1.4e Maintenance release. Fix a fgets call. that's all. new in 1.4d Fix bug in security file handling..., bug where temporary files were left around, proper status color match, neon yellow remove from history, fixed erroneous purple reports. Other misc changes. Introduced failover mode for BBPAGER and BBNET. new in 1.4c bug fixes (especially a nasty notification bug), minor tweaks and mandrake support. new in 1.4b fixes to 1.4, 1.4a new in 1.4a fixes to 1.4 new in 1.4 Clean 64-bit networking code enable/disable of paging messages now can be valid for a predetermined amount of time basic support for skins (different looks) Added 'data' & 'notes' message types Added Caldera support Self-correcting installation procedure Event logs by host and install (all hosts) new in 1.3a HTML status logs can be created dynamically. Many OS specific changes. Updated the installation procedure, again. bug fixes. Code is more modular for the display of status logs. new in 1.3 Support for multiple BBDISPLAY and BBPAGERS, totally new look and feel, much of it user configurable. new in 1.2b Partial support for https, multiple http tests for same host, logs of notification & recovery msgs, added brief option for specific recipients, group of hosts and recipients to simplify notification rules setup. Specific fix in bbnet for Linux users. Usual tidying up of code and fixing up minor bugs and annoyances. new in 1.2a Fixed subpages bugs: subpage don't required groups and don't repeat the last line of the last subpage in the main page. runbb.sh output should always go to $BBHOME/BBOUT. Also fixed bb-network.sh which didn't always send back the proper status. new in 1.2 Escalation & initial delay for notification. Notification on recovery of problem. Option to create display subpages. Added new exclude rule in bbwarnrules.cfg. Certain messages can be ignored in system messages file check. BBDISPLAY/BBPAGER can be on DHCP systems ! External programs easily integrated now. Startup is now much simpler and flexible (start/restart/stop). It's even more lynx friendly. Minor cosmetic changes. New in 1.09d Fixed security problem New in 1.09c Addes dgux support, some cosmetic changes, changed the color of the text from white to FFFFCC to be printer-friendly. Also fixed buglet with alarm timeouts in bbnet. New in 1.09b HTMLized history. bbnet less prone to false alarms. Added options to touchtime. Fixed bugs: buffer overflow, summary handling, ... Added IMAP support, custom service checking. Dynix support. New in 1.09a Oops ! forgot to add anything :) New in 1.09: Status file are HTMLized. Notifications are sent with an ticket number of seven digits. Using this number the notification can be acknowledged and won't be repeated for a specified amount of time. Notifications can be sent for any level (not just red). Default is now notify on red/purple. Mail only notifications can also be sent on a specified alert level(s). bbnet can now send an initialization string. New in 1.08b: Official support for BDSI from Matt Simerson BBWARN (notification matrix: see Sept '98 SysAdmin Mag) merged in. Added scripts to verify validity of hosts and config files. New in 1.08a: Support for multiple disk partition level monitoring, using the etc/bb-dftab file, kermit version 6 numeric pager support, fixes for AIX and some Web display cleanup. New in 1.08: Groups that don't have data for all the columns in a BB display can remove those columns by using the keyword "group-compress" in the etc/bb-hosts file. The BB summary display now only displays columns that contain non-green data. New in 1.07c: The most significant change in this release is that more info is being sent to the BB server - full df output as well as the entire HTTP server responses. New in 1.07b: Now all internet services are paged on if they fail. If you don't want to be paged, add the service to NONETPAGE in etc/bbdef.sh. Thanks to Patrick Hopewell for pointing out this problem. New in 1.07a: Better testing for services in bb-network.sh - no more can't shift errors. Less obscure error messages from bb and bbnet New in 1.07: The MacLawran Group Inc now has a proper server on the net. All addresses have changed to http://MacLawran.ca/bb-dnld. New bb-hosts keyword - "noping" if you want to disable the ping test. DNS failures now mention where from, and the Subject line of BB mail has been made more concise. New in 1.06e: No more touch command! touchtime has been modified to create files all by itself. Fixes bugs created by 1.06d. Dialup hosts now generate clear dots when network tests fail and a minor change to bb-local.sh for process paging. New in 1.06d: Bugfix and y2k change to touchtime.c. Arguments returned now include a 2 digit year. Fix to ping parameters for hpux 10.X from Steve Bonds New in 1.06c: dns server testing from Frank Kujawski A DNS server running on a host can be tested by putting the keyword 'dns' on the corresponding host line in etc/bb-hosts. Corrected a bug where 'dialup' connections paged when they shouldn't. Found by rpeiffer@smacek.com (Rich Peiffer) . New in 1.06b: NT client now available (not included here) Minor change to support Roxen proxy server testing. Support for proxy calling in bb-hosts file. If you're using a proxy server, specify it in the hosts file as follows: http://proxy.com:port/http://check-this-addr.com Better security in bbd.c: bounds checking, better handling of etc/security file, better error messages and immediate restart on Solaris (SO_REUSEADDR). Better support for Redhat, better error messages New in 1.06a: Big Brother now supports display grouping of machines. Just put the word "group" on a line in etc/bb-hosts and a new table will be created with the contents of that line. i.e. the following line in bb-hosts: group

Web Servers

will create a new table called "Web Servers". The table will contain every line up until the next group directive or summary/dialup lines, that have their own syntax. These lines can contain HTML commands, at your own risk. The generated pages are now a little cleaner in terms of HTML syntax, and will load *much* faster if grouping is enabled. Additions for 1.06: Copyright clearly asserted just about everywhere. New and clearer license agreement. Fixes for 1.05a: Improved redhat support (finally) and fixed PAGINGLOCK call in runbb.sh. From Martin Richard New Features in 1.05: Added security feature to allow bbd to control incoming requests. If the file $BBHOME/etc/security exists, only those systems whose network or IP addresses listed will be considered. Others are ignored. Make BB Explorer friendly by adding HEIGHT and WIDTH tags notes file can now be .html / .htm / or no extension touchtime can now return arbitrary times New default minimum time between pages Preliminary support for groups within BB Support for polling IP addresses only Support for devices that aren't always present Bugfix in web/mkbb2.sh (Ruediger.Schuetz@Munich.Netsurf.DE) Have fun. -- Sean MacGuire sean@bb4.com ./bb/bb19c/LICENSE0100644002342100007640000000474507616533101011253 0ustar bbbb THE BIG BROTHER SYSTEM AND NETWORK MONITOR ========================================== This program is Copyright (c) 1997-2002 BB4 Technologies Inc. All Rights Reserved The Big Brother System and Network Monitor is not free software. The terms and conditions under which you may use the Big Brother System and Network Monitor at no charge is detailed in our license below. If you need a commercial license, you can get one online from http://bb4.com/ We've put thousands of hours into our software, please take 30 seconds to read our license, it's not long, or complicated, but it is important, Thanks. ==================================== License Agreement & Lack of Warranty ==================================== By installing, copying or otherwise using this software product, you agree to abide by the following terms and conditions: 1. NON-COMMERCIAL USE No part of the Big Brother System and Network Monitor may be used for any commercial purpose after a 30 day evaluation period without obtaining a commercial license from BB4 Technologies Inc. Commercial purpose includes any activity engaged for the purpose of directly generating revenues including the sale of the product, use of the product to provide a service or in support of a service for which you charge. 2. TRADEMARKS AND NOTICES The software, graphics and documentation which make up the Big Brother System and Network Monitor are Copyright (c) 1997-2002 BB4 Technologies Inc. "Big Brother System and Network Monitor" is a trademark of BB4 Technologies Inc. You agree to respect these rights and leave all notices and product references intact. 3. REDISTRIBUTION This software may not be redistributed without prior written permission from BB4 Technologies Inc. 4. REQUIRED LINKS At least one link to the Big Brother System and Network Monitor home site at http://bb4.com must be available from the status pages generated by the Big Brother System and Network Monitor so that others may obtain a copy of this software. 5. LIMITATION OF LIABILITY AND DISCLAIMER OF WARRANTY You understand that this software is provided as-is. BB4 Technologies Inc. makes no claims towards its suitability for any purpose and accepts absolutely no liability for any damages the software may cause. Use at your own risk. Questions? Comments? Contact: BB4 Technologies Inc. E-mail: info@bb4.com Tel: +1 (514) 996-INET Fax: +1 (514) 996-0326 ./bb/bb19c/README.CHANGES0100644002342100007640000025275607616533101012204 0ustar bbbbChanges for 1.9c 15 May 2002 install/bbconfig Use -w3 option in PINGPAR1 if install/bbsys.redhat version >= 7.3 03 May 2002 bin/bb-network.sh Removed an unecessary loop. Thanks to "Richard Finegold" 05 May 2002 src/dohostsvc.c Add hook for LARRD graph in HTML page of a status log using the -DLARRD compile directive. Thanks to Scott Walters Changes for 1.9b 01 May 2002 web/mkbb.sh Fixed "Empty page" message appearing when page wasn't empty. 09 Apr 2002 web/mkbb.sh When resending purple messages, also remove lines containing STATUNCHGMSG and RECVFROMMSG (defined in bbinc.sh) 08 Apr 2002 src/bbrun.c C program replacement for bin/bbrun script. 07 Apr 2002 src/bbpage.c Escalated and delayed recipient weren't notified if notification requests are sent with large intervals between each. 07 Apr 2002 src/bbpage.c Reuse ACK id for same problem when for subsequent notifications. Only works for pagetype EVENT. 28 Mar 2002 src/bbd.c qualifiers s/m/h/d for timestamp can be used for status messages. 25 Mar 2002 bin/bb-cpu.sh Changed WARNCOLORSONREBOOT to WARNCOLORONREBOOT. Reported by Tim Meader Changes for 1.9a 22 Mar 2002 install/bbconfig Fix in 1.9 for SuSE ping bug was incorrect. Noticed by Peter Bruderer Changes for 1.9 12 Mar 2002 src/bb.h Compile without FUNCINFUNCOK under Solaris 12 Mar 2002 etc/bbchkhosts.sh Handle unknown directives more effectively 16 Jan 2002 bin/bb-network.sh noconn/dialup directives should not match on host names. Discovered by Casey Feskens 15 Jan 2002 etc/bbchkcmds.sh Added tests for DF and PS. 15 Jan 2002 bin/bb-network.sh Fixed HTTP test, it seems on some platforms the test would fail if & was in the URL... Thanks to Ralf.Strandell 15 Jan 2002 web/mkbb.sh page/subpage can have their own header/footer and rep_header/rep_footer files. Also &PAGENAME and &SUBPAGENAME can be inserted in those files and the actual names will replace the tags. 11 Jan 2002 install/bbconfig Inserted special code for handling install/bbsys.suse SuSE PINGPAR1 value for versions 7.0 and up 10 Jan 2002 bin/bb-cpu.sh Color and minutes are configurable etc/bbdef.sh for notice on server reboot 07 Jan 2002 bin/bb-msgs.sh If a message filename is a subset of another file name (file vs fileA) then some invalid checking might be performed. Found by gus 06 Jan 2002 install/bbconfig Changed data input loops for data verification. Thanks to R.G.Hall 04 Jan 2002 bin/bb-procs.sh Fixed bug where processes defined using strings: i.e "syslogd -s" would show up as yellow instead of red even if they were defined as red. Bug noticed by Marco Horner Changes for 1.8d4 03 Jan 2002 etc/bbsys.sh Fix in 1.8d3 wasn't complete. WC paths that weren't the same as those in bbsys.sh would be incorrectly used... Bug noticed by Peter Jennings Changes for 1.8d3 01 Jan 2002 bin/bb-combo.sh Missing -c with WCC command. Side-effect was that sometimes purples would occur. Thanks to Roland E. Lipovits Changes for 1.8d2 23 Dec 2001 install/bbconfig keep case of supplied user ID 23 Dec 2001 runbb.sh Let bb-local.sh script start last and bin/bb-local.sh make bb-procs.sh run last so BB can check it's own processes 23 Dec 2001 etc/bbsys.sh Added WCC and MAILC. They are bin/bb-combo.sh the WC and MAIL commands without the arguments. 22 Dec 2001 web/mkbbwml.sh Deal with same name subpapes within 2 different pages 21 Dec 2001 web/bb-rep.sh Display date ranges of the same day web/bb-replog.sh by the day itself, not a range. 21 Dec 2001 web/mkbb.sh Fixed bug introduced by work on 20/12/01 20 Dec 2001 etc/bbdef.sh Changed www/rep to $BBREP and also web/bb-replog.sh added BBREPURL web/bb-rep.sh web/mkbb.sh 19 Dec 2001 install/bbconfig "tr" command not substituting as expected under SCO. Thanks to Henry Wong 19 Dec 2001 bin/bb-disk.sh Fixed regular expression ".**" to ".*" Thanks to Henry Wong 19 Dec 2001 web/mkbb.sh Exclude files that start with '.' when looking for expired logs in bbvar/logs 07 Dec 2001 web/mkbb.sh group directive in a page/subpage would not generate the column underline properly. Found by Torsten Richter. 07 Dec 2001 bin/bb-procs.sh Invalid process definition would make bb-procs.sh stop running (and bb-local.sh as well) Changes for 1.8d1 03 Dec 2001 web/mkbb.sh Fix invalid subpage directory. 26 Nov 2001 web/mkbb.sh Parse http:// location properly for summary directive Changes for 1.8d 24 Nov 2001 ext/mkbb/eventlog.sh Add font attributes to "no events" message. 22 Nov 2001 install/bbconfig Include certain include files src/bb.h if they are present. 22 Nov 2001 web/mkbb.sh Introduced "subpage" keyword web/mkbb.comp Creates a subpage under a page. web/mkbb.page web/mkrep.page etc/bbinc.sh 16 Nov 2001 web/mkbb.comp Removed unused code 16 Nov 2001 src/bbsend.c Fixed "TIME OUT" error to display proper destination IP address. Thanks to Michael Reggio 16 Nov 2001 src/bbd.c Fixed intermittent purple src/utils.c problem. Thanks to Nicolas Chuche 16 Nov 2001 bin/bb-msgs.sh Incorrect regular expression in removing empty IGNMSGS Thanks to craig.cook@uk.pwcglobal.com 13 Nov 2001 web/mkbb.sh Fixed bug where wrong stats were displayed if a hostname was a substring of another hostname 13 Nov 2001 bin/bb-msgs.sh Check for default values before they are used ... REDMSGLINES/YELLOWMSGLINES Thanks to Mark Deiss 13 Nov 2001 bin/bb-msgs.sh Fix error when FIND is done web/mkbb.sh against a linked directory web/mkbbwml.sh Thanks to Ralf.Strandell@silja.com web/bb-rep.sh 12 Nov 2001 bin/bb-procs.sh Fixed bug where a process that was down was indicated as yellow instead of red. 09 Nov 2001 install/bbclient bbaliasname not copied back properly. 09 Nov 2001 install/bbsys.osf Changed the DFUSE variable to take in account AdvFS Thanks to "Deiss, Mark" 09 Nov 2001 web/mkbbwml.sh Check if CGIBINURL is already a full path. Thanks to Douwe.Dijkstra@I-Pay.com 09 Nov 2001 src/bbpage.c Fixed trap sending on Solaris when using snmp_trapsend Thanks to dbalkwill@hemscott.co.uk 08 Nov 2001 src/bbd.c Fixed zero-length historical files src/bb.h on darwin. 08 Nov 2001 src/bb.h Added support for stdlib.h (after all these years...) 08 Nov 2001 install/bbsys.darwin Fixed TOP 01 Nov 2001 runbb.sh Remove unnecessary sed commands Thanks to JStoner@blackboard.com 01 Nov 2001 install/bbsys.aix change options form auxw to auxww 19 Oct 2001 install/bbsys.osf Added msf: to DFEXCLUDE. Thanks to Malcolm.Salameh@det.nsw.edu.au and Mark.Deiss@acs-inc.com 15 Oct 2001 bin/bb-network.sh Got rid of "$GREP -w" as is seemed not portable 11 Oct 2001 etc/bbdef.sh Path definition for LYNX. Not in bbsys.local because cUrl can also used as LYNX. 11 Oct 2001 install/bbsys.caldera LYNX removed install/bbsys.redhat install/bbsys.debian 07 Oct 2001 src/bb.h Added Darwin support install/Makefile.darwin Thanks to fhlist@online.co.ma install/bbsys.darwin 06 Oct 2001 src/bbnet.c Fixes to "GET" and timing issues Changes for 1.8c1 03 Oct 2001 etc/bbdef.sh Added imap2 to BBNETSVCS Thanks to Tom Diehl 02 Oct 2001 bin/bb-network.sh HTTP 503 error generates a red Thanks to Christian.Perrier@onera.fr 01 Oct 2001 src/bbpage.c Double slashes in path removed Thanks to helge.jacobsen@mch.sbs.de 25 Sep 2001 web/bb-replog.sh Fixed non-critical time that was sometimes wrong. 25 Sep 2001 src/dohostsvc.c &CGIBINURL handled incorrectly in footer. Changes for 1.8c 10 Sep 2001 src/bbpage.c Specific SCO3 change to pid_t Thanks to Mark.Deiss@acs-gsg.com 10 Sep 2001 bin/bbmv Unnecessary specification of WC -l, ext/mkbb/eventlog.sh using WC is enough. Thanks to ext/mkbb/acklog.sh Douwe.Dijkstra@I-Pay.com 10 Sep 2001 src/bbpage.c Fixed some debug statements 07 Sep 2001 bin/bb-network.sh Ignore ping output with "prohibited" bin/bb-ping.sh 04 Sep 2001 bin/bbrm Fixed bug where unwanted hosts bin/bbmv would be removed or moved. Thanks to "Aaron Seet" Changes for 1.8b4 03 Sep 2001 bin/bbprune New script to archive BB data 31 Aug 2001 src/bbpage.c When adding HTML path to host status during notification, make sure that CGIBINURL does not contain already the BBWEBHOST path. 29 Aug 2001 web/mkbb.sh Added anchor to each hostname, summary name and dialup name. Anchors to beginning of hosts, subpages, summaries and dialups. 29 Aug 2001 web/mkbb.cols Fixed "arg list too long" error. web/mkbb.bkg Thanks to Patrick Rogan rogan@lycos-inc.com 28 Aug 2001 bin/bb-network.sh New TCP tests are added etc/bbdef.sh in the BBNETSVCS variable of etc/bbdef.sh. Makes upgrading a little easier. Richard Finegold Raf@deainc.com suggested something similar. 28 Aug 2001 etc/bbchkhosts.sh Added dig 28 Aug 2001 bin/bb-msgs.sh Accelerate test for large files. 28 Aug 2001 install/bbclient Do not include etc/bbaliasname in the client archive Thanks to craig.cook@uk.pwcglobal.com 24 Aug 2001 src/bbsend.c Insert BB agent specific code 20 Aug 2001 src/bbd.c Renamed env variable to jmpenv src/bbnet.c to prevent conflicts with external src/bbsend.c libraries 08 Aug 2001 bin/bb-network.sh Removed SO_TIMESTAMP output from ping.Thanks to Michael McLagan 07 Aug 2001 bin/bb-network.sh Modified how DNS/DIG test are handled. 06 Aug 2001 web/bb-ack.sh Use proper argument variable 19 Jul 2001 src/bbsend.c Add NULL check in one test 14 Jul 2001 web/mkbb.sh Summary directive nows uses the color of the given URL for status. Alternate tags for acked event 11 Jul 2001 bin/bb-cpu.sh Fixed TOP problem under SUN Thanks to David A Smith 09 Jul 2001 web/bb-ack.sh Handle empty message properly. Thanks to Mark Galbraith who noticed it. 02 Jul 2001 install/bbsys.aix Added SP nodes messages file 02 Jul 2001 runbb.sh Stop/Restart uses common code. 24 Jun 2001 web/mkbb2.sh Modified how acks are displayed web/mkbb.sh web/mkbbwml.sh 22 Jun 2001 install/bbsys.osf If AWK isn't found in the default location, set it to /usr/ucb/awk. Newer version of OSF uses that location. Thanks to Mark.Deiss@acs-gsg.com Changes for 1.8b3 21 Jun 2001 src/bbd.c Fixed BBRELAY issue that combo message only contained the 1st status when relayed to another host. Changes for 1.8b2 20 Jun 2001 src/bbpage.c Fixed error while generating tmp/np_ filename (on certain OSes) Thanks to Sven De Vilder 19 Jun 2001 bin/bb-mailack.sh Expanded reply prefixes 19 Jun 2001 install/bbconfig Fixed up how SunOS/Solaris are determined. Thanks to Bill Earle Also changed how Unixware version is determined 18 Jun 2001 bin/bb-msgs.sh Multi-line specifications would not be handled properly. Thanks to TJimenez@outpost.com Also remove identical expressions specified in multi-line specifications 18 Jun 2001 bin/bb-network.sh HTTP return would sometimes contain illegal character Thanks to Marc.Pohl@wwf-gruppe.de Changes for 1.8b1 15 Jun 2001 www/help/bb-man.html Ooops ! Incorrectly documented www/help/bb-hosts.html BBRELAY directive 15 Jun 2001 etc/bbchkhosts.sh Validate BBRELAY directive 12 Jun 2001 web/bb-replog.sh Aestetic changes, Total duration is COLSPAN=2 to reduce size of event duration Suggested by "Richard Finegold" Changes for 1.8b 02 Jun 2001 bin/bb-msgs.sh Messages file test weren't conducted properly if a host had no entry in bb-msgstab. Extra spaces in bb-msgstab file would prevent test to be done properly in some cases. Recent messages associated with a file are removed when file is rotated. 30 May 2001 web/bb-replog.sh Time Non-Critical wasn't displayed properly 30 May 2001 www/help/bb-rep.html Style