Subject: Another problem with 1.2G 970629
To: None <current-users@NetBSD.ORG>
From: I can teach you how to fish... <greywolf@starwolf.starwolf.com>
List: current-users
Date: 07/01/1997 20:38:47
I'm having some serious incompatibility problems here, it seems.

Now my pppd is blown up.  It won't install a default route, whether
specified in the /etc/ppp/ip-{up,down} files, or as an option in
/etc/ppp/options.

I am including the following files:
	/etc/ppp/options
	/etc/ppp/ip-up
	/etc/ppp/ip-down
	/etc/rc
	/etc/rc.conf
	/etc/netstart
	/etc/rc.local

This used to work just fine; now I get such problems as:

	named won't resolve properly
	pppd won't route properly
	"ifconfig lo0 localhost" no longer works -- I have to say
		"ifconfig lo0 inet 127.1"
	Ditto with "route add starwolf 127.1" (can't use "localhost")

I had to kludge rc.local to add a default route immediately after pppd
started up.

Here's the files.  Perhaps someone can point out any boneheaded moves
or assumptions I may have made which broke with the last installment.

Thanks.

				--*greywolf;

### /etc/ppp/options ###
207.33.232.91:207.33.232.1
crtscts
noipdefault
defaultroute
demand
persist
bsdcomp 15
deflate 15
lock
modem
netmask 255.255.255.255
connect /etc/ppp/connect
disconnect /etc/ppp/disconnect
holdoff 5
#-vj
idle 150
mru 296
mtu 296

### /etc/ppp/ip-up ###
#! /bin/sh
#
exec 1>/dev/null 2>&1 0<&1

# usage: ip-up interface tty speed local-ip remote-ip
interface=$1 tty=$2 speed=$3 localip=$4 remoteip=$5

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

ifconfig $interface inet $localip $remoteip netmask 0xffffffff
route add default $localip

### /etc/ppp/ip-down ###
#! /bin/sh
#
exec 1>/dev/null 2>&1 0<&1

# usage: ip-down interface tty speed local-ip remote-ip
interface=$1 tty=$2 speed=$3 localip=$4 remoteip=$5

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

ifconfig delete $interface
route delete default

### /etc/rc ###
#	$NetBSD: rc,v 1.77 1997/05/11 05:08:16 cjs Exp $
#	originally from: @(#)rc	8.2 (Berkeley) 3/17/94

# System startup script run by init on autoboot
# or after single-user.
# Output and error are redirected to console by init,
# and the console is the controlling terminal.

stty status '^T'

# Set shell to ignore SIGINT (2), but not children;
# shell catches SIGQUIT (3) and returns to single user after fsck.
trap : 2
trap : 3	# shouldn't be needed

export HOME=/
export PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Configure ccd devices.
if [ -f /etc/ccd.conf ]; then
	ccdconfig -C
fi

if [ -e /fastboot ]; then
	echo "Fast boot: skipping disk checks."
elif [ "$1" = autoboot ]; then
	echo "Automatic boot in progress: starting file system checks."
	fsck -p
	case $? in
	0)
		;;
	2)
		exit 1
		;;
	4)
		echo "Rebooting..."
		reboot
		echo "Reboot failed; help!"
		exit 1
		;;
	8)
		echo "Automatic file system check failed; help!"
		exit 1
		;;
	12)
		echo "Boot interrupted."
		exit 1
		;;
	130)
		# interrupt before catcher installed
		exit 1
		;;
	*)
		echo "Unknown error; help!"
		exit 1
		;;
	esac
fi

trap "echo 'Boot interrupted.'; exit 1" 3

swapon -a

umount -a >/dev/null 2>&1
mount -a -t nonfs
rm -f /fastboot		# XXX (root now writeable)

if [ -f /etc/rc.conf ]; then
	. /etc/rc.conf
fi

# set flags on ttys.  (do early, in case they use tty for SLIP in netstart)
echo 'setting tty flags'
ttyflags -a

# load any kernel modules specified in /etc/lkm.conf
if [ "$lkm_init" != NO ] && [ -f /etc/rc.lkm ]; then
	. /etc/rc.lkm
fi

# set hostname, turn on network
echo 'starting network'
sh /etc/netstart
if [ $? -ne 0 ]; then
	exit 1
fi

mount /usr >/dev/null 2>&1
mount /var >/dev/null 2>&1

# clean up left-over files
rm -f /etc/nologin
rm -f /var/spool/lock/LCK.*
rm -f /var/spool/uucp/STST/*
(cd /var/run && { rm -rf -- *; install -c -m 664 -g utmp /dev/null utmp; })

# start the system logger first, so that all messages
# from daemons are logged, and the name server next.

if [ "$syslogd_flags" != NO ]; then
	if [ "$syslogd_flags" = DEFAULT ]; then
		syslogd_flags=""
	fi
	echo 'starting system logger'
	rm -f /dev/log
	syslogd $syslogd_flags
fi

if [ "$named_flags" != NO ]; then
	if [ "$named_flags" = DEFAULT ]; then
		named_flags=""
	fi
	echo 'starting name server';	named $named_flags
fi

# now start the rpc servers, for YP server/client, NFS.
echo -n 'starting rpc daemons:'

# note that portmap is generally required for all other rpc services.
if [ "$portmap" != NO ]; then
	echo -n ' portmap';             portmap
fi

if [ "$ypserv_flags" != NO ]; then
	if [ "$ypserv_flags" = DEFAULT ]; then
		ypserv_flags="-d"
	fi
        echo -n ' ypserv';              ypserv $ypserv_flags
fi

if [ "$ypbind_flags" != NO ]; then
	if [ "$ypbind_flags" = DEFAULT ]; then
		ypbind_flags=""
	fi
        echo -n ' ypbind';              ypbind $ypbind_flags
fi

if [ "$yppasswdd_flags" != NO ]; then
	if [ "$yppasswdd_flags" = DEFAULT ]; then
		yppasswdd_flags=""
	fi
        echo -n ' rpc.yppasswdd';       rpc.yppasswdd $yppasswdd_flags
fi

if [ "$bootparamd_flags" != NO ] && [ -r /etc/bootparams ]; then
	if [ "$bootparamd_flags" = DEFAULT ]; then
		bootparamd_flags=""
	fi
        echo -n ' rpc.bootparamd';      rpc.bootparamd $bootparamd_flags
fi

nfs_locking=NO

if [ "$nfs_server" = YES ] && [ -r /etc/exports ]; then
	if [ "$mountd_flags" = DEFAULT ]; then
		mountd_flags=""
	fi
        rm -f /var/db/mountdtab
        echo -n > /var/db/mountdtab
        echo -n ' mountd';              mountd $mountd_flags
	if [ "$nfsd_flags" = DEFAULT ]; then
		nfsd_flags="-tun 4"
	fi
        echo -n ' nfsd';                nfsd $nfsd_flags
	nfs_locking=MAYBE
fi

if [ "$nfs_client" = YES ]; then
	if [ "$nfsiod_flags" = DEFAULT ]; then
		nfsiod_flags="-n 4"
	fi
        echo -n ' nfsiod';              nfsiod $nfsiod_flags
	nfs_locking=MAYBE
fi

if [ "$nfs_locking" != NO ]; then
	if [ "$statd_flags" != NO ]; then
		if [ "$statd_flags" = DEFAULT ]; then
			statd_flags=""
		fi
		echo -n ' rpc.statd';		rpc.statd $statd_flags
	fi

	if [ "$lockd_flags" != NO ]; then
		if [ "$lockd_flags" = DEFAULT ]; then
			lockd_flags=""
		fi
		echo -n ' rpc.lockd';		rpc.lockd $lockd_flags
	fi
fi

if [ "$amd_flags" != NO ] && [ -d "$amd_dir" -a -r "$amd_master" ]; then
	if [ "$amd_flags" = DEFAULT ]; then
		amd_flags="-l syslog -x error,noinfo,nostats"
	fi
        echo -n ' amd'
        amd $amd_flags -p -a $amd_dir `cat $amd_master` > /var/run/amd.pid
fi

echo '.'
mount -a -t nfs

if [ -f /sbin/ldconfig ]; then
	echo 'creating runtime link editor directory cache.'
	if [ -f /etc/ld.so.conf ]; then
		ldconfig `cat /etc/ld.so.conf`
	else
		ldconfig
	fi
fi 

# /var/crash should be a directory or a symbolic link
# to the crash directory if core dumps are to be saved.
if [ "$savecore_flags" != NO ] && [ -d /var/crash ]; then
	if [ "$savecore_flags" = DEFAULT ]; then
		savecore_flags=""
	fi
	echo checking for core dump...
	savecore $savecore_flags /var/crash
fi

				echo -n 'checking quotas:'
quotacheck -a
				echo ' done.'
quotaon -a

# build ps databases
echo 'building databases...'
kvm_mkdb /netbsd
dev_mkdb

chmod 666 /dev/tty[pqrs]*

# check the password temp/lock file
if [ -f /etc/ptmp ]
then
	logger -s -p auth.err \
	'password file may be incorrect -- /etc/ptmp exists'
fi

# Check that vi.recover exists...
if [ ! -d /var/tmp/vi.recover ]; then
    (umask 0; mkdir -p /var/tmp/vi.recover; chmod 1777 /var/tmp/vi.recover)
fi

virecovery=/var/tmp/vi.recover/recover.*
if [ "$virecovery" != "/var/tmp/vi.recover/recover.*" ]; then
	echo preserving editor files
	for i in $virecovery; do
		sendmail -t < $i
	done
fi

echo clearing /tmp

# Prune quickly with one rm, then use find to clean up /tmp/[lq]* (this
# is not needed with mfs /tmp, but doesn't hurt anything).
(cd /tmp && rm -rf [a-km-pr-zA-Z]* &&
    find . ! -name . ! -name lost+found ! -name quota.user \
	! -name quota.group -exec rm -rf -- {} \; -type d -prune)

# Update kernel info in /etc/motd
# Must be done *before* interactive logins are possible to prevent
# possible race conditions.
if [ "$update_motd" != NO ]; then
	echo 'updating motd.'
	if [ ! -f /etc/motd ]; then
		install -c -o root -g wheel -m 664 /dev/null /etc/motd
	fi
	T=/tmp/_motd
	rm -f $T
	sysctl -n kern.version | sed 1q > $T
	echo "" >> $T
	sed '1,/^$/d' < /etc/motd >> $T
	cmp -s $T /etc/motd || cp $T /etc/motd
	rm -f $T
fi

if [ -f /var/account/acct ]; then
	echo 'turning on accounting';	accton /var/account/acct
fi

echo -n standard daemons:
if [ "$update_flags" != NO ]; then
	if [ "$update_flags" = DEFAULT ]; then
		update_flags="30"
	fi
	echo -n ' update';		update $update_flags
fi
echo -n ' cron';		cron
echo '.'

# now start all the other daemons
echo -n starting network daemons:

if [ "$gated_flags" != NO ] && [ -r /etc/gated.conf ]; then
	if [ "$gated_flags" = DEFAULT ]; then
		gated_flags=""
	fi
	echo -n ' gated';		gated $gated_flags
elif [ "$routed_flags" != NO ]; then
	if [ "$routed_flags" = DEFAULT ]; then
		routed_flags="-q"
	fi
	echo -n ' routed';		routed $routed_flags
fi

if [ "$mrouted_flags" != NO ]; then
	if [ "$mrouted_flags" = DEFAULT ]; then
		mrouted_flags=""
	fi
	echo -n ' mrouted';		mrouted $mrouted_flags
fi

if [ "$timed_flags" != NO ]; then
	if [ "$timed_flags" = DEFAULT ]; then
		timed_flags=""
	fi
	echo -n ' timed'; 		timed $timed_flags
fi

if [ "$ntpdate_hosts" != NO ]; then
	if [ "$ntpdate_hosts" = DEFAULT ]; then
		ntpdate_hosts=`awk '/^server/ {print $2}' </etc/ntp.conf`
	fi

	if [ -n "$ntpdate_hosts"  ]; then
		echo -n 'ntpdate:'
		ntpdate -b $ntpdate_hosts
	fi
fi

if [ "$xntpd_flags" != NO ]; then
	if [ "$xntpd_flags" = DEFAULT ]; then
		xntpd_flags="-p /var/run/xntpd.pid"
	fi
	echo -n ' xntpd';		xntpd $xntpd_flags
fi

if [ "$dhcpd_flags" != NO ] && [ -r /etc/dhcpd.conf ]; then
	if [ "$dhcpd_flags" = DEFAULT ]; then
		dhcpd_flags=""
	fi
	echo -n ' dhcpd';		dhcpd $dhcpd_flags
fi

if [ "$rwhod" = YES ]; then
	echo -n ' rwhod';		rwhod
fi

if [ "$lpd_flags" != NO ]; then
	if [ "$lpd_flags" = DEFAULT ]; then
		lpd_flags=""
	fi
	echo -n ' printer';		lpd $lpd_flags
fi

# We call sendmail with a full path so that SIGHUP works.
if [ "$sendmail_flags" != NO ] && [ -r /etc/sendmail.cf ]; then
	if [ "$sendmail_flags" = DEFAULT ]; then
		sendmail_flags="-bd -q30m"
	fi
	echo -n ' sendmail';		/usr/sbin/sendmail $sendmail_flags
fi

if [ "$rarpd_flags" != NO ] && [ -r /etc/ethers ]; then
	if [ "$rarpd_flags" = DEFAULT ]; then
		rarpd_flags="-a"
	fi
	echo -n ' rarpd';		rarpd $rarpd_flags
fi

if [ "$rbootd_flags" != NO ] && [ -r /etc/rbootd.conf ]; then
	if [ "$rbootd_flags" = DEFAULT ]; then
		rbootd_flags=""
	fi
	echo -n ' rbootd';		rbootd $rbootd_flags
fi

if [ "$mopd_flags" != NO ]; then
	if [ "$mopd_flags" = DEFAULT ]; then
		mopd_flags="-a"
	fi
	echo -n ' mopd';		mopd $mopd_flags
fi

if [ "$inetd_flags" != NO ] && [ -r /etc/inetd.conf ]; then
	if [ "$inetd_flags" = DEFAULT ]; then
		inetd_flags=""
	fi
	echo -n ' inetd';		inetd $inetd_flags
fi

echo '.'

# Kerberos runs ONLY on the Kerberos server machine
if [ "$kerberos_server" = YES ]; then
	echo -n 'starting kerberos daemons:'
	echo -n ' kerberos';	kerberos >> /var/log/kerberos.log &
	echo -n ' kadmind';	kadmind -n >> /var/log/kadmind.log &
	echo '.'
fi

. /etc/rc.local

date
cat /.startup.au > /dev/audio
exit 0

### /etc/rc.conf ###
#	$NetBSD: rc.conf,v 1.13 1997/05/12 11:33:31 lukem Exp $
#
# see rc.conf(5) for more information.

# uncomment this if you want to use local paths in rc
#export PATH=$PATH:/usr/local/sbin:/usr/local/bin

# `NO' disables a toggle or a program with flags.
# `YES' enables a toggle.
# `DEFAULT' enables a program with the default flags (as listed).
# Any other string is used as a set of flags.

# Basic network configuration
hostname=""			# Name of host. If "", extract from /etc/myname
domainname=""			# Domainname. If "", try /etc/defaultdomain
defaultroute=""			# Default route. If "", try /etc/mygate

# Actions to take on boot
update_motd=YES			# YES or NO

# Programs run on boot
savecore_flags="-z /var/crash"		# default: ""
lkm_init=YES			# YES or NO.
ipfilter=NO			# YES or NO.
ntpdate_hosts=NO		# default: extract from /etc/ntp.conf

# Network Interfaces
net_interfaces="le0"		# default: use "ifconfig -l" to get a list

# Daemons required for other daemons
inetd_flags=		# default: ""; use "-l" for libwrap logging
portmap=YES			# YES or NO; normally required.

# Commonly used daemons
update_flags=DEFAULT		# default: "30"
syslogd_flags=DEFAULT		# default: ""
timed_flags=NO			# default: ""
xntpd_flags=NO			# default: "-p /var/run/xntpd.pid"
sendmail_flags="-bd -q1h"	# default: "-bd -q30m"
named_flags=DEFAULT		# default: ""
lpd_flags=DEFAULT		# default: ""

# Routing Daemons
routed_flags=DEFAULT		# default: "-q"
gated_flags=NO			# default: "" (not distributed with NetBSD)
mrouted_flags=NO		# default: ""

# Daemons used to boot other machines over a network
rarpd_flags=le0			# default: "-a"
bootparamd_flags=DEFAULT	# default: ""
dhcpd_flags=NO			# default: ""
rbootd_flags=NO			# default: ""
mopd_flags=NO			# default: "-a"

# YP (NIS) daemons
ypbind_flags=NO			# default: ""
ypserv_flags=NO			# default: "-d"
yppasswdd_flags=NO		# default: ""

# Network file system daemons
nfs_client=NO			# YES or NO.
nfsiod_flags=DEFAULT		# default: "-n 4"
nfs_server=YES			# YES or NO.
mountd_flags=DEFAULT		# default: ""
nfsd_flags=DEFAULT		# default: "-tun 4"
lockd_flags=NO			# default: ""
statd_flags=NO			# default: ""
amd_flags=NO			# default: "-l syslog -x error,noinfo,nostats"
amd_dir=/amd			# AMD's mount directory
amd_master=/etc/amd/master	# AMD 'master' map

# Other daemons:
rwhod=YES			# YES or NO.
kerberos_server=NO		# YES or NO.
pppd=YES			# YES or NO.
pppd_flags=DEFAULT		# default: "/dev/ttya 38400 file /etc/ppp/options"
xdm=YES				# YES or NO.
xdm_flags=DEFAULT		# default: ""
XHOME=/usr/X11

### /etc/netstart ###
#!/bin/sh -
#
#	$NetBSD: netstart,v 1.39 1997/05/22 21:41:09 cjs Exp $
#	from: @(#)netstart	8.1 (Berkeley) 7/23/93

if [ -f /etc/rc.conf ]; then
	. /etc/rc.conf
fi

# If $hostname is set, use it for my symbolic name, otherwise use /etc/myname
if [ -z "$hostname" ]; then
	hostname=`cat /etc/myname`
fi
echo "hostname: $hostname"
hostname $hostname

# Check $domainname first, then /etc/defaultdomain, for domain name
if [ -z "$domainname" -a -f /etc/defaultdomain ]; then
	domainname=`cat /etc/defaultdomain`
fi
if [ -n "$domainname" ]; then
	echo "domainname: $domainname"
	domainname $domainname
fi

# Enable, flush and install packet filter rules before configuring interfaces.
if [ "$ipfilter" != NO ] && [ -f /etc/ipf.conf ]; then
	echo 'installing packet filter rules ... '
	ipf -E -Fa -f /etc/ipf.conf
fi

# Configure all of the network interfaces listed in $net_interfaces;
# if $net_interfaces is DEFAULT, grab all interfaces from ifconfig.
# In the following, "xxN" stands in for interface names, like "le0".
# For any interfaces that has an $ifconfig_xxN variable associated,
# we do "ifconfig xxN $ifconfig_xxN".
# If there is no such variable, we take the contents of the file
# /etc/ifconfig.xxN, and run "ifconfig xxN" repeatedly, using each
# line of the file as the arguments for a seperate "ifconfig" invocation.
#
# In order to configure an interface reasonably, you at the very least
# need to specify "[addr_family] [hostname]" (as in "inet my.domain.org"),
# and probably a netmask (as in "netmask 0xffffffe0"). You will
# frequently need to specify a media type, as in "media UTP", for
# interface cards with multiple media connections that do not autoconfigure.
# see the ifconfig manual page for details.

if [ "$net_interfaces" != NO ]; then
	if [ "$net_interfaces" = DEFAULT ]; then
		tmp="`ifconfig -l`"
	else
		tmp="$net_interfaces"
	fi
	echo -n 'configuring network interfaces:'
	for int in $tmp; do
		eval `echo 'args=$ifconfig_'$int`
		if [ -n "$args" ]; then
			echo -n " $int"
			ifconfig $int $args
		elif [ -f /etc/ifconfig.$int ]; then
			echo -n " $int"
			(while read args; do
				ifconfig $int $args
			done) < /etc/ifconfig.$int
		else
			if [ "$net_interfaces" != DEFAULT ]; then
				echo
				echo -n "/etc/ifconfig.$int missing"
				echo -n "& ifconfig_$int not set"
				echo "; interface $int can't be configured"
			fi
			continue
		fi
		if [ "$int" = "lo0" ]; then
			configured_lo0=yes
		fi
		configured_interfaces="$configured_interfaces $int"
	done
	echo '.'
fi

# Set the address for the loopback interface if it's not configured
if [ "$configured_lo0" != "yes" ]; then
	ifconfig lo0 inet 127.1
fi

# Use loopback, not the wire
route add $hostname 127.1

# Check $defaultroute, then /etc/mygate, for the name of my gateway host.
# That name must be in /etc/hosts.
if [ -z "$defaultroute" -a -f /etc/mygate ]; then
	defaultroute=`cat /etc/mygate`
fi
if [ -n "$defaultroute" ]; then
	route add default $defaultroute
fi

# Check if each configured interface xxN has an $ifaliases_xxN variable
# associated, then configure additional IP addresses for that interface.
# The variable contains a list of "address netmask" pairs, with "netmask"
# set to "-" if the interface default netmask is to be used.
# 
if [ -n "$configured_interfaces" ]; then
	echo 'adding interface aliases:';
fi
for int in $configured_interfaces; do
	eval `echo 'args=$ifaliases_'$int`
	if [ -n "$args" ]; then
		set -- $args
		while [ $# -ge 2 ]; do
			addr=$1 ; net=$2 ; shift 2
			if [ "$net" = "-" ]; then
				ifconfig $int inet alias $addr
			else
				ifconfig $int inet alias $addr netmask $net
			fi
			# Use loopback, not the wire
			route add $addr localhost
		done
	fi
done

# /etc/ifaliases, if it exists, contains the names of additional IP
# addresses for each interface. It is formatted as a series of lines
# that contain
#	address interface netmask
if [ -f /etc/ifaliases ]; then
	echo 'adding interface aliases:';
(
	while read addr int net; do
		if [ -z "$net" ]; then
			ifconfig $int inet alias $addr
		else
			ifconfig $int inet alias $addr netmask $net
		fi
		# use loopback, not the wire
		route add $addr localhost
	done
) < /etc/ifaliases
fi

if [ -s /etc/netstart.local ]; then
	. /etc/netstart.local
fi

### /etc/rc.local ###
#	$NetBSD: rc.local,v 1.14 1995/12/17 02:01:13 thorpej Exp $
#
# site-specific startup actions, daemons
#
#	From: @(#)rc.local	5.4 (Berkeley) 12/14/90
#

if [ ! -f /etc/motd ]; then
	install -c -o root -g wheel -m 664 /dev/null /etc/motd
fi
T=/tmp/_motd
rm -f $T
sysctl -n kern.version | sed 1q > $T
echo "" >> $T
sed '1,/^$/d' < /etc/motd >> $T
cmp -s $T /etc/motd || cp $T /etc/motd
rm -f $T

if [ -f /sbin/ldconfig ]; then
	echo 'creating runtime link editor directory cache.'
	ldconfig /usr/X11/lib
fi 

echo -n 'starting local daemons:'

# Get PPP up and going

case "$pppd" in
YES)
	DEFAULT_PPPD_FLAGS="/dev/ttya 38400 file /etc/ppp/options"
	case "$pppd_flags" in
	DEFAULT)
		pppd_flags="$DEFAULT_PPPD_FLAGS"
		;;
	esac
    test -f /usr/sbin/pppd &&
    /usr/sbin/pppd $pppd_flags &&
    echo -n ' pppd';
# XXX
	route add default `cat /etc/mygate`
esac
	
# Kerberos runs ONLY on the Kerberos server machine
if [ X${kerberos_server} = X"YES" ]; then
	echo -n ' kerberos';	kerberos >> /var/log/kerberos.log &
fi

# XDM startup

case $xdm in
YES)
	DEFAULT_XDM_FLAGS=""
	case $xdm_flags in
	DEFAULT)
	    xdm_flags="$DEFAULT_XDM_FLAGS"
	    ;;
	esac
	test -d $XHOME/bin -a -f $XHOME/bin/xdm -a \
		-d $XHOME/lib/X11/xdm -a -f $XHOME/lib/X11/xdm/xdm-config &&
	nice -n -15 $XHOME/bin/xdm &&
	echo -n ' xdm'
	;;
esac

echo '.'


				--*greywolf;
--
	Microsoft Network Adapter (120 VAC)
 (o)========\\           
 _______     \\     //   -----
/::::::.\===== ====//===| | l |	 
---------     //   77    \_n_/	 
 [""""]======''	  //		 
  -==-