ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÇÍÌ843210/.-,+*)('&%$¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿž�œedcba`_^À¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿž�œ›š™˜—–•”“’‘��Ž�Œ‹Š‰ˆ‡†…„ƒ‚�€~}|{zyxwvutsrqponmlkjihg$_4ÁûYinstalNET1.6WÇhwý~ åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå€$WN<$WN<$WN?@ABCD$V K$V L$WNt�´1{FGHIJKLMNOP$V L$V M$WNu�´ ÁTUVW$V M$V M$WNv�ýÝ3XYZ[\]^_`ab$V M$V P$WNy�´ ‘’“”$V P$V P$WN|�´4c•–—˜™š›œ�žŸ$V P$V Q$WN–�ýÖN¤¥¦§¨©ª«¬­®$V Q$V S$WN˜�´©ÛÜÝÞßàá$V S$V S$WN˜�´=âãäå$V S$V T$WN˜�´@—æçèéêëìíîïð$V T$V T$WN™Aýpø$Uâ!$WNŸ$WNŸ�$Pùú$Uâ$Uâ$WNœ�$…û$Uâ$Uâ$WNœ�$Küýþÿ$Uâ$Uâ $WN��$ 9$Uâ $Uâ $WNž�$%$Uâ $Uâ!$WNŸAý@$Uâ"$WN·$WN·�$ž     $Uâ!$Uâ!$WN¶�$ ·$Uâ"$Uâ"$WN·Aý0$Uâ)$WNØ$WNØ�$ ·$Uâ#$Uâ#$WNº�$ã$Uâ#$Uâ#$WNº�$ó$Uâ#$Uâ#$WN»�$( !"#$Uâ#$Uâ$$WN¼�$;$%$Uâ$$Uâ$$WN¼�$!1&'()*+,-.$Uâ$$Uâ$$WN½�$&/012345678$Uâ$$Uâ%$WN¾�$:ã9:;<=>?@ABC$Uâ%$Uâ&$WNÀ�$ ËIJK$Uâ&$Uâ&$WNÁ�$5LM$Uâ'$Uâ'$WNÃ�$ NOPQR$Uâ'$Uâ'$WNÄ�$@STUVWX$Uâ'$Uâ($WNÄ�$:YZ[\]^_`abc$Uâ($Uâ($WNÈ�$Ýij$Uâ($Uâ)$WN×�$ßk$Uâ)$Uâ)$WNØ�$ Þlmno$Uâ)$Uâ)$WNØ�$/p$Uâ)$Uâ)$WNØ�$ q$Uâ$Uâ$WNÙ�$ Frst$Uâ$Uâ$WNÚ�$¥uv$Uâ$Uâ$WNÛ�$5wx$Uâ$Uâ$WNÛ�$ðyz$Uâ$Uâ$WNÜ�$&{|$Uâ$Uâ$WNÜAý0}$Uâ $WNà$WNàAý0~$Uâ $WNä$WNäAýà$Uâ$WNí$WNí�$h€$Uâ$Uâ$WNè�$ é�‚ƒ$Uâ$Uâ$WNè�$—„…$Uâ$Uâ$WNé�$w†‡$Uâ$Uâ$WNé�$Lˆ‰$Uâ$Uâ$WNê�$›Š‹Œ�Ž$Uâ$Uâ$WNê�$m��$Uâ$Uâ$WNë�$@‘’$Uâ$Uâ$WNë�$.“$Uâ$Uâ$WNë�$M”•–—˜$Uâ$Uâ$WNì�$n™$Uâ$Uâ$WNì�$›š$Uâ$Uâ$WNíAýp›$Uü]$WNñ$WNñ�$Rœ$Uâ$Uâ$WNð�$r�$Uâ$Uâ$WNð�$©ž$Uâ$Uâ$WNð�$äŸ$Uâ$Uâ$WNñ�ÀE^ ¡¢£¤¥¦§¨©ª$Uü]$Uü^$WNò�$.³´$UþÓ$UþÓ$WNóAýÀµ$Uâ$WO$WO�$ù¶$Uâ$Uâ$WO�$>·$Uâ$Uâ$WO�$Ú¸¹$Uâ$Uâ$WO�$1º$Uâ$Uâ$WO�$G»$Uâ$Uâ$WO�$¼$Uâ$Uâ$WO�$.½$Uâ$Uâ$WO�$̾$Uâ$Uâ$WO�$�¿$Uâ$Uâ$WO�$bÀ$Uâ$Uâ$WOAý0Á$Uâ$WO $WO �$8ÂÃÄÅ$Uâ$Uâ$WO �$�Æ$Uâ$Uâ$WO �$Ç$Uâ$Uâ$WO �$˜È$Uâ$Uâ$WO �$]É$Uâ$Uâ$WO �$•Ê$Uâ$Uâ$WO �$6Ë$Uâ$Uâ$WO ...new installBOOT...usr etc...optionsincludeadminlocal...win.name...arpa$netimp'sys9lastlog.h:netdb.h;resolv.hwin_hook.h...?menu...NdomainTnslookup.help ...Umaster.d`init.dbhostscnamed.bootdnetworkseprotocolsfresolv.confgservices ... INSTALL UNINSTALL RlistmknodessetupunsetupORDER # SCCS_ID - "@(#)INSTALL (TWG) 3.3 88/11/16 " # # @(#) Copyright (c) 1985 The Wollongong Group, Inc. All Rights Reserved # if u3b2 then INSPATH="/install/new" PKGNAME="`cat ${INSPATH}/usr/options/win.name`" else PKGNAME="Wollongong Integrated Networking WIN/3B: Release 3.0.1" DRIVE=/dev/rmt/0mn fi echo "Installing ${PKGNAME}." echo "Copyright (c) 1985 The Wollongong Group, Inc." echo "All Rights Reserved" if u3b2 then # # Verify that the NSU package has been installed. # if [ ! -f /usr/options/nsu.name ] then echo "**ERROR** ${PKGNAME} cannot be installed --" echo "It requires the Networking Support Utilities package to be installed first." exit 1 fi # # Verify that the Directory and File Management Utilities have been installed. # if [ ! -f /usr/options/dfm.name ] then echo "**ERROR** ${PKGNAME} cannot be installed --" echo "It requires the Directory and File Management Utilities to be installed first." exit 1 fi # # Verify that the User Environment Utilities have been installed. # if [ ! -f /usr/options/usrenv.name ] then echo "**ERROR** ${PKGNAME} cannot be installed --" echo "It requires the User Environment Utilities to be installed first." exit 1 fi else # # Verify that the NI hardware has been installed. # if [ "`/etc/getmajor ni5`" = "" ] then echo "*** ERROR *** The NI5 peripheral hardware must be installed" echo " prior to the installation of WIN/3B software." exit 1 fi fi # # Determine space requirements for WIN3B # ROOTneeds=650 USRneeds=6500 # # How much space is available in the necessary filesystems? # USRspace=`expr "\`df /usr 2>/dev/null\`" : '.*: *\([0-9]*\)'` ROOTspace=`expr "\`df / 2>/dev/null\`" : '.*: *\([0-9]*\)'` fatal=0 if [ "${USRspace}" -lt "${USRneeds}" ] then fatal=1 echo "**ERROR** ${PKGNAME} cannot be installed --" echo "Not enough space on the hard disk." echo "There are $USRspace blocks available" echo "on the /usr file system --" echo "$USRneeds blocks are needed." fi if [ "${ROOTspace}" -lt "${ROOTneeds}" ] then if [ $fatal -eq 0 ] then echo "**ERROR** ${PKGNAME} cannot be installed --" echo "Not enough space on the hard disk." fi echo "There are $ROOTspace blocks available" echo "on the / (root) file system --" echo "$ROOTneeds blocks are needed." exit 1 fi if [ $fatal -eq 1 ] then exit 1 fi if u3b2 then expect=1 while true do if [ "`cat /install/install/ORDER`" != "$expect" ] then echo "**WARNING** Floppy out of sequence." echo "Expecting floppy diskette number $expect." echo "Try another floppy diskette." else cd ${INSPATH} find . -print | cpio -pdumv / if [ $expect = 6 ] then sh /install/install/setup echo "\n" echo "The WIN/3B network has been installed." echo "\nReboot the system with the 'reboot' option of" echo "the sysadm 'machinemgmt' menu." exit 0 fi expect=`expr $expect + 1` fi cd / while true do /etc/umount /dev/diskette > /dev/null 2>&1 echo "Insert floppy number $expect" echo "Press when ready: \c" read ans /etc/mount /dev/diskette /install -r 2>/dev/null if [ $? = 0 ] then if [ -f ${INSPATH}/usr/options/win.name ] then break fi echo "ERROR:The floppy you have inserted does not belong" echo " to $PKGNAME package. Please" echo " insert the correct floppy\n" continue fi echo "ERROR: Unable to mount diskette. Either the diskettte" echo " is not inserted correctly or a wrong diskette" echo " is inserted. Try again." done done else # At this point the install scripts should have been # read in via sysadm installpkg. # first read in the BOOT files cd /install/install cpio -icdBumv < $DRIVE # now read in the rest cd / cpio -icdBumv < $DRIVE # # Installation of WIN/3B files is complete # Peform the setup # sh /install/install/setup echo "\n" echo "The WIN/3B network has been installed." echo "\nReboot the system with the 'reboot' option of" echo "the sysadm 'machinemgmt' menu." exit 0 fi # SCCS_ID - "@(#)UNINSTALL (TWG) 3.1 88/08/22 " # # @(#) Copyright (c) 1985 The Wollongong Group, Inc. All Rights Reserved # # # Save package name (PKGNAME) # if u3b2 then PKGNAME=`cat /install/new/usr/options/win.name` else PKGNAME=`cat /usr/options/win.name` fi DRVINSTALL=/etc/drvinstall echo "Removing the ${PKGNAME}." # # Shutdown the network. # /bin/sh /etc/rc0.d/K76win3b stop $DRVINSTALL -u -f -m /etc/master.d/tty_pts -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/tty_ptc -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/ip -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/tcp -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/udp -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/loop -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/arp -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/w_ -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/raw -v1.0 > /dev/null $DRVINSTALL -u -f -m /etc/master.d/circ -v1.0 > /dev/null # # Save /.rhosts, /etc/hosts, /etc/hosts.equiv and /etc/networks # mv /.rhosts /.rhosts.SAVE 2>/dev/null mv /etc/hosts /etc/hosts.SAVE 2>/dev/null mv /etc/hosts.equiv /etc/hosts.equiv.SA 2>/dev/null mv /etc/resolv.conf /etc/resolv.conf.SA 2>/dev/null mv /etc/networks /etc/networks.SAVE 2>/dev/null mv /etc/protocols /etc/protocols.SAVE 2>/dev/null mv /usr/etc/inetinit.cf /usr/etc/inetinit.cf.SA 2>/dev/null mv /etc/named.boot /etc/named.boot.SAV 2>/dev/null cd /usr/local/domain; ls | cpio -oc > /etc/named.files 2>/dev/null # # Remove the files found in the Rlist file from the hard disk. # echo "The following files and directories are being removed:" cd / for i in `cat /install/install/Rlist` do echo $i rm -fr $i done # # remove sendmail entry from mailx.rc # grep -v /usr/lib/sendmail /usr/lib/mailx/mailx.rc > /tmp/mailx$$ cp /tmp/mailx$$ /usr/lib/mailx/mailx.rc rm -f /tmp/mailx$$ # # Remove all nodes from /dev and other extraneous files # rm -f /dev/tty[pqrs]? /dev/pty[pqrs]? /dev/tcp* /dev/ip* /dev/udp* /dev/loop /dev/win-net /dev/arp* /dev/raw* /dev/circ* # # remove /usr/etc directory if it is empty # rmdir /usr/etc 2>/dev/null sh /install/install/unsetup echo "The ${PKGNAME} has been removed." /usr/bin/finger /usr/bin/rlogin /usr/bin/hostid /usr/bin/hostname /usr/bin/nslookup /usr/bin/rcp /usr/bin/tftp /usr/bin/remsh /usr/bin/ruptime /usr/bin/rwho /usr/bin/telnet /usr/bin/netstat /usr/bin/ftp /usr/options/win.name /usr/etc/arpbypass /usr/etc/fingerd /usr/etc/ftpd /usr/etc/named /usr/etc/netlogin /usr/etc/rlogind /usr/etc/route /usr/etc/remshd /usr/etc/gettable /usr/etc/telnetd /usr/etc/rwhod /usr/etc/htable /usr/etc/routed /usr/etc/rexecd /usr/etc/inetinit /usr/etc/inetinit.cf /usr/etc/tftpd /usr/etc/tcplisten /usr/etc/rfsaddr /usr/etc/ping /usr/etc/ifconfig /usr/lib/libnet.a /usr/lib/sendmail /usr/bin/newaliases /usr/bin/mailq /usr/lib/sendmail.cf /usr/lib/aliases /usr/lib/aliases.dir /usr/admin/menu/packagemgmt/win3bmgmt /usr/local/nslookup.help /usr/local/domain /usr/include/lastlog.h /usr/include/netdb.h /usr/include/resolv.h /usr/include/routed.h /usr/include/sigbsd.h /usr/include/win_hook.h /usr/include/arpa /usr/include/netimp /usr/include/sys/arp.h /usr/include/sys/icmp.h /usr/include/sys/win_if.h /usr/include/sys/in.h /usr/include/sys/in_var.h /usr/include/sys/inet.h /usr/include/sys/inetioctl.h /usr/include/sys/ip.h /usr/include/sys/raw.h /usr/include/sys/route.h /usr/include/sys/socket.h /usr/include/sys/socketvar.h /usr/include/sys/tcp.h /usr/include/sys/time.h /usr/include/sys/tty_pty.h /usr/include/sys/udp.h /usr/include/sys/un.h /etc/named.pid /etc/master.d/ip /etc/master.d/loop /etc/master.d/arp /etc/master.d/tcp /etc/master.d/udp /etc/master.d/tty_ptc /etc/master.d/tty_pts /etc/master.d/w_ /etc/master.d/raw /etc/master.d/circ /etc/rc2.d/S??win3b /etc/rc3.d/S??win3b /etc/rc0.d/K??win3b /etc/init.d/win3b /etc/hosts /etc/hosts.equiv /etc/networks /etc/protocols /etc/resolv.conf /etc/services /etc/ftpusers /etc/gateways /etc/HostName /etc/HostId /usr/spool/rwho /usr/spool/mqueue # SCCS_ID - "@(#)mknodes (TWG) 2.3 88/06/13 " # # @(#) Copyright (c) 1985 The Wollongong Group, Inc. All Rights Reserved # SHELL=/bin/sh MASTER=/etc/master.d MKBOOT=/etc/mkboot DRVINSTALL=/etc/drvinstall if u3b2 then BOOTDIR=/install/BOOT else BOOTDIR=/install/install/BOOT fi nptys=${1:-8} CLONE=`/etc/drvinstall -d /boot/CLONE -v 1.0 -nb` ################################################# ## Install network drivers and make device files $MKBOOT $BOOTDIR/ip.o $MKBOOT $BOOTDIR/tcp.o $MKBOOT $BOOTDIR/tty_pts.o $MKBOOT $BOOTDIR/tty_ptc.o $MKBOOT $BOOTDIR/loop.o $MKBOOT $BOOTDIR/udp.o $MKBOOT $BOOTDIR/raw.o $MKBOOT $BOOTDIR/arp.o $MKBOOT $BOOTDIR/W_.o $MKBOOT $BOOTDIR/circ.o # # TCP=`$DRVINSTALL -m $MASTER/tcp -v1.0` IP=`$DRVINSTALL -m $MASTER/ip -v1.0` UDP=`$DRVINSTALL -m $MASTER/udp -v1.0` RAW=`$DRVINSTALL -m $MASTER/raw -v1.0` PTS=`$DRVINSTALL -m $MASTER/tty_pts -v1.0` PTC=`$DRVINSTALL -m $MASTER/tty_ptc -v1.0` LOOP=`$DRVINSTALL -m $MASTER/loop -v1.0` W=`$DRVINSTALL -m $MASTER/w_ -v1.0` ARP=`$DRVINSTALL -m $MASTER/arp -v1.0` CIRC=`$DRVINSTALL -m $MASTER/circ -v1.0` /bin/rm -f /dev/ip /dev/ip? /dev/arp* /dev/loop /dev/tcp* /dev/udp* /dev/raw* /dev/win-net /dev/circ /etc/mknod /dev/tcp c $CLONE $TCP /etc/mknod /dev/udp c $CLONE $UDP /etc/mknod /dev/raw c $CLONE $RAW /etc/mknod /dev/circ c $CLONE $CIRC /etc/mknod /dev/win-net c $W 0 /etc/mknod /dev/tcp0 c $TCP 0 /etc/mknod /dev/udp0 c $UDP 0 chmod 666 /dev/tcp* /dev/udp* /dev/circ /etc/mknod /dev/ip c $CLONE $IP /etc/mknod /dev/arp c $CLONE $ARP /etc/mknod /dev/loop c $CLONE $LOOP /etc/mknod /dev/ip0 c $IP 0 /etc/mknod /dev/arp0 c $ARP 0 /etc/mknod /dev/raw0 c $RAW 0 chmod 600 /dev/ip* /dev/loop /dev/arp* /dev/raw* chmod 644 /dev/win-net ################################## #### Makes nodes for pseudo ttys NODES="p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 pa pb pc pd pe pf q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 qa qb qc qd qe qf r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 ra rb rc rd re rf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 sa sb sc sd se sf" j=0 rm -f /dev/pty[pqrs]? /dev/tty[pqrs]? for i in $NODES do if [ $j -ge $nptys ] then break fi /etc/mknod /dev/pty$i c $PTC $j /etc/mknod /dev/tty$i c $PTS $j j=`expr $j + 1` done chmod 666 /dev/pty[pqrs]? # 600 chmod 622 /dev/tty[pqrs]? # 622 ################ END ################ # SCCS_ID - "@(#)setup (TWG) 3.10 89/04/25 " # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # # # ****** customize WIN/3B network ******************************************** # RCFILE=/etc/rc2.d/S86win3b mkdir /etc/rc3.d 1>/dev/null 2>&1 chown root /etc/init.d/win3b /etc/rc2.d /etc/rc3.d /etc/rc0.d chgrp sys /etc/init.d/win3b /etc/rc2.d /etc/rc3.d /etc/rc0.d ln /etc/init.d/win3b /etc/rc0.d/K76win3b ln /etc/init.d/win3b /etc/rc2.d/S86win3b ln /etc/init.d/win3b /etc/rc3.d/S86win3b ln /usr/local/domain/named.kill /usr/local/domain/named.reload ln /usr/local/domain/named.kill /usr/local/domain/named.restart ln /usr/local/domain/named.kill /usr/local/domain/named.stats ln /usr/local/domain/named.kill /usr/local/domain/named.dump ln /usr/local/domain/named.kill /usr/local/domain/named.debug ln /usr/local/domain/named.kill /usr/local/domain/named.undebug ln /usr/lib/sendmail /usr/bin/mailq ln /usr/lib/sendmail /usr/bin/newaliases mkdir /usr/spool/rwho /usr/spool/mqueue chmod 777 /usr/spool/rwho /usr/spool/mqueue # # SETUP NAMESERVER # domain="" while true do echo "do you wish to run the nameserver on this host? [y, n]: \c" read nameserver if [ "$nameserver" = "" ] then continue fi if [ "$nameserver" = "n" -o "$nameserver" = "y" ] then break fi done resolver="n" if [ "$nameserver" = "n" ] then while true do echo "do you wish to run this host as a resolver? [y, n]: \c" read resolver if [ "$resolver" = "" ] then continue fi if [ "$resolver" = "n" -o "$resolver" = "y" ] then break fi done if [ "$resolver" = "n" ] then # # install using /etc/hosts # nameuse="n" echo "the default setup is to use /etc/hosts" lname=`uname -n` echo "removing /etc/resolv.conf" rm /etc/resolv.conf > /dev/null 2>&1 echo "removing named from startup scripts" found=`grep "ETC/named" /etc/rc2.d/S86win3b` if [ "${found}" = "" ] then ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /netstat/ i NONAMESERVER=1; export NONAMESERVER # . w q DONE else ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /ETC\/named/ d i NONAMESERVER=1; export NONAMESERVER . w q DONE fi echo "setting environment variable NONAMESERVER in /etc/profile" found=`grep NONAMESERVER /etc/profile` if [ "${found}" = "" ] then ed - /etc/profile < /dev/null 2>&1 $ a NONAMESERVER=1; export NONAMESERVER . w q DONE fi else # # install as a resolver host # nameuse="y" found=`grep "ETC/named" /etc/rc2.d/S86win3b` if [ "${found}" = "" ] then : else ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /ETC\/named/ d w q DONE fi rsave="n" if [ -r /etc/resolv.conf.SA ] then while true do echo "do you wish to use the previously saved /etc/resolv.conf ? [y, n]: \c" read rsave if [ "$rsave" = "" ] then continue fi if [ "$rsave" = "n" -o "$rsave" = "y" ] then break fi done fi if [ "$rsave" = "y" ] then mv /etc/resolv.conf.SA /etc/resolv.conf > /dev/null 2>&1 domain=`awk ' /domain/ {print $2; exit} ' /etc/resolv.conf` fi if [ "$rsave" = "n" ] then while true do echo "enter the name of your domain> \c" read domain if [ "$domain" = "" ] then continue fi echo "your domain is: ($domain) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" ] then continue fi if [ "$ans" = "y" ] then break fi done lname=`uname -n`.$domain rm /etc/resolv.conf > /dev/null 2>&1 echo "domain $domain" > /etc/resolv.conf fi ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /uname/ d i /usr/bin/hostname \`uname -n\`.$domain > /dev/null 2>&1 . w q ! if [ "$rsave" = "n" ] then echo "enter the addresses of nameservers you wish to resolve to: (type q when done)" while true do echo "> \c" read naddr if [ "$naddr" = "" ] then continue fi if [ "$naddr" = "q" -o "$naddr" = "quit" ] then break fi echo "the address of the nameserver is: ($naddr) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi if [ "$ans" = "y" ] then echo "entering $naddr into /etc/resolv.conf " ed - /etc/resolv.conf< /dev/null 2>&1 $ a nameserver $naddr . w q ! fi done fi # # end of if rsave = n # found=`grep NONAMESERVER /etc/profile` if [ "${found}" = "" ] then : else ed - /etc/profile < /dev/null 2>&1 /NONAMESERVER/ d w q DONE fi fi # # end of if resolver = n # else # # install as a nameserver host # echo "removing /etc/resolv.conf" rm /etc/resolv.conf > /dev/null 2>&1 nameuse="y" namesave="n" if [ -r /etc/named.boot.SAV ] then while true do echo "do you wish to use the previously saved NAMESERVER files? [y, n]: \c" read namesave if [ "$namesave" = "" ] then continue fi if [ "$namesave" = "n" -o "$namesave" = "y" ] then break fi done if [ "$namesave" = "y" ] then echo "restoring /etc/named.boot and directory /usr/local/domain " while true do echo "enter the name of your domain> \c" read domain if [ "$domain" = "" ] then continue fi echo "your domain is: ($domain) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" ] then continue fi if [ "$ans" = "y" ] then break fi done lname=`uname -n`.$domain ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /uname/ d i /usr/bin/hostname \`uname -n\`.$domain > /dev/null 2>&1 . w q ! cp /etc/named.boot.SAV /etc/named.boot > /dev/null 2>&1 if [ -r /etc/named.files ] then rm /usr/local/domain/* cd /usr/local/domain; cpio -ic /dev/null fi fi fi if [ "$namesave" = "n" ] then while true do echo "enter the name of your domain> \c" read domain if [ "$domain" = "" ] then continue fi echo "your domain is: ($domain) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" ] then continue fi if [ "$ans" = "y" ] then break fi done lname=`uname -n`.$domain hname=`uname -n` while true do echo "enter the network number your host is on> \c" read netnum if [ "$netnum" = "" ] then continue fi echo "your net number is: ($netnum) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" ] then continue fi if [ "$ans" = "y" ] then break fi done ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /uname/ d i /usr/bin/hostname \`uname -n\`.$domain > /dev/null 2>&1 . w q ! ed - /usr/local/domain/named.local < /dev/null 2>&1 1,\$s/twg\.com/$domain/g 1,\$s/vax2/$hname/g w q ! munten=`echo $netnum | awk -F\. '{ if ($3 != "") printf "%s.", $3 if ($2 != "") printf "%s.", $2 if ($1 != "") printf "%s", $1 }'` ed - /etc/named.boot < /dev/null 2>&1 /twg\.com/s//$domain/ /89/s//$munten/ w q ! found=`grep "ETC/named" /etc/rc2.d/S86win3b` if [ "${found}" = "" ] then ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /Domain Name/ +1 a pids=`/bin/ps -e | /usr/bin/egrep "named" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then : $ETC/named fi . w q DONE fi found=`grep NONAMESERVER /etc/rc2.d/S86win3b` if [ "${found}" = "" ] then : else ed - /etc/rc2.d/S86win3b < /dev/null 2>&1 /NONAMESERVER/ d w q DONE fi found=`grep NONAMESERVER /etc/profile` if [ "${found}" = "" ] then : else ed - /etc/profile < /dev/null 2>&1 /NONAMESERVER/ d w q DONE fi echo "Consult your Administrator's Guide for Domain setup" echo "for the database files named.rev and named.hosts" fi # end of if namessave = n fi # end of if nameserver = n # # SETUP SPECIAL NETWORK FILES # /ETC/HOSTS # /ETC/HOSTS.EQUIV # /ETC/NETWORKS # /ETC/PROTOCOLS # /.RHOSTS hostssave="n" if [ -r /etc/hosts.SAVE ] then while true do echo "do you wish to use the previously saved NETWORK and HOST database files? [y, n]: \c" read hostssave if [ "$hostssave" = "" ] then continue fi if [ "$hostssave" = "n" -o "$hostssave" = "y" ] then break fi done case $hostssave in [yY]) echo "restoring: " hostssave=y; echo "/etc/hosts " mv /etc/hosts.SAVE /etc/hosts if [ -r /etc/hosts.equiv.SA ] then echo "/etc/hosts.equiv " mv /etc/hosts.equiv.SA /etc/hosts.equiv else echo "me" > /etc/hosts.equiv echo "$lname" >> /etc/hosts.equiv fi if [ -r /etc/networks.SAVE ] then echo "/etc/networks " mv /etc/networks.SAVE /etc/networks fi if [ -r /etc/protocols.SAVE ] then echo "/etc/protocols " mv /etc/protocols.SAVE /etc/protocols fi if [ -r /.rhosts.SAVE ] then echo "/.rhost " mv /.rhosts.SAVE /.rhosts else echo "me" > /.rhosts echo "$lname" >> /.rhosts fi if [ -r /usr/etc/inetinit.cf.SA ] then echo "WARNING: if you are installing WIN/3B 3.0.1 on a host that previosly saved " echo "WIN/3B 2.1 inetinit.cf you must use the new inetinit.cf from WIN/3B 3.0.1 " echo "are you installing 3.0.1 on a old 2.1? (default y) [y, n]: \c" read ans if [ "$ans" = "n" ] then echo "restoring saved /usr/etc/inetinit.cf " mv /usr/etc/inetinit.cf.SA /usr/etc/inetinit.cf else echo "using the installed version of inetinit.cf " fi fi break ;; [nN]) hostssave=n break ;; esac fi if [ "$hostssave" = "n" ] then if [ "$nameuse" = "y" ] then lname=`uname -n` fi while true do if [ $netnum ] then num=$netnum break else echo "enter host's network number> \c" read num if [ "$num" = "" ] then continue fi echo "your host's net number is: ($num) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" ] then continue fi if [ "$ans" = "y" ] then break fi fi done while true do echo "enter name of network host is on> \c" read network if [ "$network" = "" ] then continue fi echo "your host's net name is: ($network) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" ] then continue fi if [ "$ans" = "y" ] then break fi done echo "enter aliases your network is known by> \c" read aliases while true do echo "ente/012345r host's internet address> \c" read lnetaddr if [ "$lnetaddr" = "" ] then continue fi nladdr=`expr $lnetaddr : "\($num\).*"` if [ "$nladdr" = "" ] then echo "the network number portion of your address ($lnetaddr) doesn't match $num " echo "do you wish to enter the address this way? (default n) [y, n]: \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue elif [ "$ans" = "y" ] then break fi fi echo "your host's address is: ($lnetaddr) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi if [ "$ans" = "y" ] then break fi done echo "\nHost's official name is $lname\n" echo "enter alias names host will be known by> \c" read laname ed - /etc/networks < /.rhosts echo "me" > /etc/hosts.equiv echo "$lname" >> /.rhosts echo "$lname" >> /etc/hosts.equiv while true do echo "do you want to enter other hosts into your /etc/hosts file? [y, n]: \c" read ans if [ "$ans" = "" ] then continue fi if [ "$ans" = "n" -o "$ans" = "y" ] then break fi done if [ "$ans" = y ] then echo "enter internet address, official host name, and aliases (type q when done)" while true do echo "> \c" read netaddr name aname if [ "$netaddr" = "" ] then continue fi if [ "$netaddr" = "q" -o "$netaddr" = "quit" ] then break fi oladdr=`expr $netaddr : "\($num\).*"` if [ "$oladdr" = "" ] then echo "the network number portion of your address ($netaddr) doesn't match ($num) " echo "do you wish to enter the address this way? (default n) [y, n]: \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi fi echo "($netaddr $name $aname) is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi if [ "$ans" = "y" ] then if [ "$name" = "" -o "$netaddr" = "" ] then echo "Host name and address must be specified !" else ed - /etc/hosts<> /etc/hosts.equiv fi fi done fi fi while true do echo "do you wish to have TFTP daemon enabled? [y, n]: \c" read answer if [ "$answer" = "" ] then continue fi if [ "$answer" = "n" -o "$answer" = "y" ] then break fi done if [ "$answer" = "y" ] then ed - $RCFILE < /dev/null /\$ETC\/tftpd s/#// w q EOF fi while true do echo "do you wish to have ROUTE daemon enabled? [y, n]: \c" read answer if [ "$answer" = "" ] then continue fi if [ "$answer" = "n" -o "$answer" = "y" ] then break fi done if [ "$answer" = "y" ] then ed - $RCFILE < /dev/null /\$ETC\/routed s/#// w q EOF fi # # Add logging facility to FTPD # while true do echo "do you wish to have FTP daemon logging enabled? [y, n]: \c" read answer if [ "$answer" = "" ] then continue fi if [ "$answer" = "n" -o "$answer" = "y" ] then break fi done if [ "$answer" = "y" ] then ed - $RCFILE < /dev/null /\bin\/echo s/#// w q EOF fi # # Find out whether /usr/net/nls directory is created for RFS # if [ -d /usr/net -a ! -s /usr/net/nls ] then mkdir /usr/net/nls chmod 775 /usr/net/nls chown root /usr/net/nls chgrp sys /usr/net/nls fi # # Start up RFS # if [ -s /usr/options/rfs.name ] # RFS installed ? then while true do echo "do you wish to have RFS enabled ? [y, n]: \c" read answer if [ "$answer" = "" ] then continue fi if [ "$answer" = "n" -o "$answer" = "y" ] then break fi done if [ "$answer" = "y" ] then if [ ! -s /usr/net/nls/tcp ] # Not initialized yet ? then /usr/bin/nlsadmin -i tcp /usr/bin/nlsadmin -a 105 -c "/usr/net/servers/rfs/rfsetup" \ -y "RFS server" tcp /usr/etc/rfsaddr -h `uname -n` > /usr/net/nls/tcp/addr else pids=`grep 105 /usr/net/nls/tcp/dbf` if [ "${pids}" = "" ] then /usr/bin/nlsadmin -a 105 -c"/usr/net/servers/rfs/rfsetup" \ -y"RFS server" tcp fi # should use nlsadmin -l, but we do what it does, assuming # the nodename has been set. /usr/etc/rfsaddr -h `uname -n` > /usr/net/nls/tcp/addr fi fi fi # # ADD PTY's # nptys=8 while true do echo 'how many pseudo ttys do you wish to have? (default 8) [1-64]: \c' read answer if [ "$answer" ] then if [ "$answer" -le 64 ] && [ "$answer" -gt 0 ] then nptys=$answer echo "creating $answer pseudo ttys, is this what you want? (default n) [y, n]: \c" read ans if [ "$ans" = "y" ] then break fi else echo "($answer) is out of range!, try again! " fi else echo "using default value of 8 pseudo ttys " break fi done ed - /etc/master.d/tty_ptc < /dev/null 2>&1 /^NPTY[ ]*=/d a NPTY=$nptys . w q EOF echo "\nSetting up the WIN/3B network. Please wait.......\n" # SETUP SENDMAIL AND SENDMAIL.CF ed - /usr/lib/sendmail.cf <> /usr/lib/mailx/mailx.rc set sendmail=/usr/lib/sendmail ! if [ -r /usr/lib/aliases ] then cat < /usr/lib/aliases MAILER-DAEMON:root postmaster:root #ADD USERS HERE TO BE ALIASED # eg: joe: bob@3b2B ! cp /dev/null /usr/lib/aliases.dir cp /dev/null /usr/lib/aliases.pag chmod 644 /usr/lib/sendmail.cf /usr/lib/aliases* /usr/lib/mailx/mailx.rc fi # set up hostid to default value /usr/bin/hostid 0 ############################################################################ # # Install the drivers in /boot file and make nodes in /dev # sh /install/install/mknodes $nptys if [ "$nameuse" = "y" -a "$resolver" = "n" ] then echo "Edit the nameserver files named.rev and named.hosts" echo "before the system is rebooted. \n" fi echo "The default broadcast address for WIN/3B release 3.0.1 is 1's as per RFC919" echo "See ifconfig(1M) to change the broadcast value \n" # # fix signal.h # FILE=/usr/include/signal.h if grep sigbsd $FILE 1>/dev/null 2>&1 then : else cat >> $FILE << ! #include ! fi # # fix if.h # FILE=/usr/include/sys/if.h if grep IFF_UP $FILE 1>/dev/null 2>&1 then cat > $FILE << ! #include ! else if grep win_if $FILE 1>/dev/null 2>&1 then : else cat >> $FILE << ! #include ! fi fi # SCCS_ID - "@(#)unsetup 3.3 (TWG) 88/11/30" # # @(#) Copyright 1988. The Wollongong Group, Inc. All Rights Reserved. # FILE=/usr/include/signal.h if grep sigbsd $FILE 1>/dev/null 2>&1 then /bin/ed - $FILE << ! > /dev/null 2>&1 /sigbsd/ d w q ! fi # # fix if.h # FILE=/usr/include/sys/if.h if grep win_if $FILE 1>/dev/null 2>&1 then /bin/ed - $FILE << ! > /dev/null 2>&1 /win_if/ d w q ! fi 6 Wollongong Integrated Networking WIN/3B: Release 3.0.1 ...W_.oarp.ocirc.oip.oloop.oraw.otcp.otty_ptc.otty_pts.oudp.op$V!Ä\ @@€€Ð€ˆ.text€€Ð€€Ð@ÐD¸ .data€ˆ€ˆ@!t@.bss€ˆP€ˆP€.comment ôPF„è@„ÀFøOÿt@<_W@w ø_ÿtH<HO‡ÚpÉôL H G F I€G{ F,ÌüÐGA„@�”p�GœFÐH@<€ˆ€GKÚ+ÚpwÐH@„€ˆ€@,\PÉôL H G F IppI(@ˆ€pw,\(@,\– €€„@ˆ€pÉèL IIÉèL IpHœoLL„èHp€@„@Ép„@Ép„@lp(XpC‡ÚpÉìL H I(Xpw€ìp$Á€€<PXO „PXp<XO „ÿÉ(p{ ÐX@”@„@É(p(ÈpL„ÈÉ@pYÉDp É@ ÉD„ÉHp ÉH,Ìô(@„@{€@‡@Úp+Úp$Á€€¸É(Yp{€Yp(ÈpL„ÈÉ@pdÉDp É@ ÉD„ÉHp ÉH,Ìô(@„@{€@‡@Úp+Úp$Á€€¸É(dp{€dp(È pL„È É@phÉDp É@ ÉD„ÉHp ÉH,Ìô(@„@{€@‡@Úp+Úp$Á€€¸É(hp{€hp(Èpw$º€€„ÈÉ@pÉÉDp É@ ÉD„ÉHp ÉH,Ìô(@„@{€@‡@Úp+Úp$Á€€É@ @,Ìü¯¥ (@‡Úp$Á€€p„K@p°OàKp„É,p„@É p„@¤od@¨_è@„@É0¬odÉ0É@ @É,@ @,Ìø¯¡ p„K@„É Kp{ „OÿÿÿÉp(Èp<<ÉO$�€€<Éw"„@¤od@¨_è@¬od@<É@K$�€€p„K@È Kp„@É p O°,Ìü(@,\¯ ‡Úpp„K@„É Kp$Á€€Y@ @l@ @É@ @,Ìô¯¸(@ p„K@„É Kp{^üOä@¬_¸@ @ ,Ìø,\¯¬p„K@„É Kppp„K@È Kp„@É pY@ @l@ @,Ìø¯Ü„@ìpp„K@„É Kp(Èp:lÉ4p„ÈÉ8p É4 É8„ÉäwÅ(Á pw(QpºÜÁ Q@?ÁRä@[®„@ÉèL IpppI€B{)„B@¨ @„€p„B@¨ @ÜO@p�B<BKÒ€B{6„B@¨@„BA¨AÜOA€p„B@¨@„BA¨AÜOA€p�B<BKÅ„Op„pÉèL IppIüOä@¬_¸@p„@B¨@„€@w$ €€{„PA„Pp„@p„A@(@wè„B@¨@€€p„B@¨@„BA¨A„��p„B@¨@„€@„BA¨A„�Àp„B@¨@„BA¨A¨BœOB„B�p„�€p: €€G+ €€xB €€Š: €€‘: €€š+ €€ËB €€Ý: €€ä: €€í+ €€+ €€%B €€7: €€>: €€G+ €€^: €€e+ €€xC €€†D €€ÍC €€Õ+ €€ÝC €€åD €€ÿ+ €€: €€E €€,: €€<+ €€gF €€l: €€~G €€³: €€äH €€ú: €€#H €€9: €€bH €€x: €€’+ €€»+ €€Ä+ €€Í+ €€Õ+ €€ñ: €€û: €€F €€!: €€A: €€ÑI €€âJ €€üK €€- €€L €€:+ €€N+ €€[+ €€j+ €€p- €€„L €€ M €€¿+ €€ÜN €€æ+ €€ì- €€ò= €€ù= €€L €€M €€#O €€4P €€GQ €€WR €€uS €€…T €€©M €€²- €€¾L €€ ¤? €€ ©U €€ ¶U €€ ¼? €€ ÅV €€ ÞW €€ äW €€ ÷W €€ ýW €€ X €€ > €€ > €€ > €€ > €€ 2F €€ 7: €€ JW €€ S+ €€ ^? €€ g? €€ {W €€ ŽW €€ “W €€  W €€ ­W €€ ÅW €€ ÍW €€ ÔW €€ ÙW €€ à> €€ å> €€ í- €€ õY €€ û- €€ F €€ : €€ #X €€ -: €€ 4- €€ <L €€ Y+ €€ ‚+ €€ ‹+ €€ ”+ €€ œ+ €€ ¸: €€ Â: €€ Þ? €€ è? €€ ó- €€ ûL €€ : €€ ): €€ AW €€ PW €€ ‹W €€ ”+ €€  > €€ ¥W €€ ²> €€ ·W €€ ¾> €€ ËW €€ ÛW €€ á> €€ òW €€ ûW €€ - €€ + €€ Z €€ - €€ >+ €€ I@ €€ RZ €€ Y- €€ `> €€ kC €€ uC €€ }D €€ £W €€ ºW €€ É[ €€ Ü> €€ å@ €€0D €€:D €€šB €€ÄH €ˆ€ˆ5€ˆ 6€ˆ(7€ˆ08€ˆ89€ˆD-€ˆH-.fileÿþgW_hook.cW_ioctl€€Ð ŒW_open€€^ ,W_close€€Š  .text€€ÐÄ .data€ˆ4.comment¬W_init€ˆ@.file4ÿþgW_sel.cW_select€€”$ò€€†$1€€º$p€€ *$i&€€ –$–0€€ .$Ù:€€ $/D€€ :$»!N€€ ö$T#Z€€J$B%Copyin€€Ž$''Copyout€€¸$')W_ffs€€â$.+.text€€” |­ .data€ˆD .comment¬HS_inet€ˆDS_time€ˆHW_timeID€ˆLW_sysent€ˆreadwriteexececlosefcntlufuwordsusergSel_headt‚vcopyintimelboltsetjmpprocsleepcopyoutMAJORMINORs5readiprintfcdevswcanputptcreadŒiureadiu_ttyptsreadpt_tty–¤Sel_list²EÀtimeoutwakeupÊW_selscanW_sel_inodeW_ttyselectW_do_initW_rem_selW_add_selW_timeoutW_itimerfixW_timevaladdcanput_W_selSel_file_freeW_in_timeptcselectSel_file_poolw_maxselfilesw_maxselprocsuntimeoutp$V{*BZ.textœŒ °Ñ .dataœœP((Ú$@.commentìì8xIÉèL IpppFÔt@¸o@‡€@ø_ÿtFÜF@F<|wa„OH„@¨@œO@<@HS (Xp„@¨@œO@œH<@H[äüOHF¬F<FKE„ÿ@ÉôL H G F I„Z@(Àp„F@ÉôL H G F I(FKÕ<FCÌ„FH¨HœOH„Z@„HÀ8p„À8A„AÀpƒÈ p‚Èp„ZXp€Èp„F@ÉôL H G F IpG„ZH„ÈG H ,Ìø8âÈä)Ü$H@ @ ,Ìø G ,ÌøÉðL H G Iü$H@{ÙH„Z@„ÀH Z ,Ìøü$Z@ @ ,Ìø H  ,ÌøÉìL H IH„ZH„OB{(<ÂÈw>_ >_�Âw„B@ÉìL H Iœ BÐ@œO@<@B[È€@ÉìL H IpH„ZH„OB{<ÂÈw„B@ÉìL H IœB„@¨@œO@<@B[Ö€@ÉìL H IpppI„ZB„OA{<Á Bw „A@ÉèL Iœ AÐ@œO@<@A[Û€@ÉèL IppCœoHL„Z@„ÀH„t@„À@‡À @<@<@ w$´<@}<@_ƒ$"„t@„À dpÐ@œO@„HÉp„OÉp<@É[$„É@„ÉA<ÁÀ$ç„É@>_À„É@>_�À$ç„É@$„t@„À F(Xp„t@„ÀEw3„Æp„t@„À@‡_‚À p Z t,ÌøYL H G F E D C I„Å D„V@<@_Iw$Ù<@_Iw$í<@_ Iw$<@_!Iw$j<@_ Sw$6<@_ Sw‡„t@„À@„À C„ÃYp„OGÐ@œO@<@G[$<<ÃÇ $$ü„VÉp  ,Ìø„@Épwz#ü„ÉA„Á@‡_ƒÀ p„ÁB€Rp„ÉBÜÁÂp„É@ À  É„À @„Ð@,ÌøPzéû<@J<@_ƒC<@_ˆ~mÿ<@_‰~áþ<@_Š~þ„U@ À  G„U@„À @„Ð@,ÌøPYL H G F E D C I„Ç D„T@zÑý„É@@p„CA<ÁÀw„C@{œC„@¨@œO@<@C[Õ€@„@E„Ç@‡À @zoÿpppG(pw„„pÉðL H G I Ož   _p,Ìô„OH€G{3(Èp(:Èw":È„@{„@�Èp<@ÈK  H,Ìü¯ÉœH�G<GKÈÉðL H G IEœL„Z@„ÀF„È G t,Ìü t„@H,Ìü H ,Ìø(@w$?„È G†Æ@<@<@$?†hp{†hp†Æjp†Ælp„âÇ@„âlA_ÄA>_‚Ä9<ÈÄw2 Ç,Ìü„@É(p  T„âÉ"@ @†Ä@ @É@ @ É(,Ìì¯7Ð@œO@œ D<@D[Ÿ G,Ìü€@ÉüL H G F E D I„É@¤à@Ð@@„€LF}<ÉÆwq<âÉ"Æ {g€ÆpàÆÉ@ @ ,Ìô„ODÐ@œO@<@DS5(Tp>_Ä>_‚Ä <ÈÄsÐ@œO@œ D<@D[Ï„VFw‡„ODÐ@œO@<@D[$ô(Tpw$¯>_Äw$¯>_‚Äw$¯<ÈÄN$¯†ÄÉ$p T„âÉ"@ @„âÉ$@ @É@ @ Ç,Ìì¯ù€Çp G,Ìü€@ÉüL H G F E D I„âÉ"@<@ <@wA†hp{†hp„âÄ@ @ ,Ìø†@jp„â@@ @ ,Ìø„@Ypw* G,Ìü G,Ìü„ÿ@ÉüL H G F E D I„Y@„ÀE†hUp†ÄÅp‡Åp‡Åp†ÅpàÄàÅ ,Ìô„Ädpd@ @àÅ ,Ìô„Édpd@ @àÅ ,Ìô„Y@œâjäÀp<âÉ"w †_É$p{ †_‚É$p T„âÉ"@ @„âÉ$@ @ O Y,Ìì¯ÏÐ@œO@œ D<@DZhþz-ÿF„ZHpp„K@p°OàKp„@F„È@¤à@Ð@@œOL@„@G(Wpe„W@<ÀÈwS„âÈ @„WA„âÁ A¸¸Èä‹‹|""""` U` 5 í ãí @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)in.h (TWG) 2.4 88/05/11 @(#)ip.h (TWG) 2.8 88/06/22 @(#)arp.h (TWG) 2.2 88/04/04 arparpopen arpopen: failed dev %x arpoput: changed arp addr to %x arpoput: changed arpb addr from %x to %x arpoput: type %x arpiput: get M_PROTO prim %x arpiput: ERR_ACK, prim %x, LLC err %x, unix err %x arpiput: UDERROR, type %x arpiput: unknow info_ack type %x arpiput: unknown DL_prim %x arp_rcvd: Entered. ea->arp_op=0x%x bad exp %x got %x arp_rcvd: sap=0x%x arp_rcvd: ea->arp_op=0x%x arpiput: tpa=0x%x, ap->ab_inaddr=0x%x arp_rcvd:forgery inet %x arp_rcvd:bad arp, type %x, bp %x arp_install: Entered. in=0x%x arp_install: ok:in %x, type %x arp_install: fail: inaddr %x, type %x arp_resolve: inaddr %x arp_resolve: broadcasting, ab_sap=0x%x arp_resolve: found addr in arp tbl; b4 dl_arpsend, sap=0x%x arp_resolve: addr not found in arp tbl; b4 dl_arpsend, sap=0x%x dl_arpsend: canput_dlarpsnd=%d dl_arpsend: allocb OK dl_arpsend: unsupport type %x @(#)arp.c 3.6 14:34:46 - 88/10/26@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/systm.h.sl 1.3 3.1 06/02/86 17788 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/log.h.sl 1.1 3.0 09/25/85 48536 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/lihdr.h.sl 1.1 3.0 12/19/85 33071 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF= .> 5? ?> P? Z> i> t? ª? ¹> A A %B KA [A gB {C «D ²C Ï> î? ø> C 4D ;C t& †& •D œC ¨C ·& Ì& ê& ô& (E N& [& h& u& ‚& ŸC §D ®C º& Ç& Ò& âD éC ðC D C TE ‰4 áF & HC PD WC i& ‡C ©G  D C 'D .C >C YG ¾A ÏA ÜB êD ñC H $I H& V& \( ~C ‡& ×C áD èC D C (I U> \& �F šI ÀF óI & *& ?I €& ”& »G È& å& G '& ð& & C( TG pH ŠA ›A ¨B ²I & "& ;G H& ’& ¦& ¿G w? �> ¢C ¬( ¾& ÌJ ÒK L 6M CN OO Y& q& ™& «F ½F Ò& Þ& ÷&  R & :4 tF ¤& °& ÙF ëF ûF  F EI g( pC y( €& �J ¡4 ÓK èF L K 6F S4 `4 «F ·& âC êD ñC V JD QC dI ‰4 ´F ºC ÂD ÉC òD ùC  C D C (& 3& A& O& \& �I ÌW àG QRSðI úI >F UF lF £X ²D ¹C î4 &F „Y ‘3 šI ¸G ÈI F iF I ŠI ªG G RG œ( (¤(¨(¬(°(´(¼(Ð&Ô&Ü(ä&ø(&(:0(8(<(@(D(H&L&P&T&X&\&`&d&h&l&p&t&x&|&€&.fileÿþgarp.carpinit$ arpopen $ãarpcloseð$J=:$: findbotqthS findtopqÈhEarpmuxqh>arpoputP$îarpbiput>$]arptimer ž$‚arp_rcvd $8GX$ ^z$PSÊ$¬�x$( ¿ $U"Êö$P$×H$Q&.textœÑ.dataœP$.commentì8S_inetœS_socket S_if¤S_in_var¨S_in¬S_ip°S_arp´Larp_info¸arprinitÈarpwinitä(putqarpinfo8arpfirst„MINORarparp_cnt2Ïflushqw_bzeroarpbarpb_cntqreplybcopyallocbputctl1freemsgtimeoutarptabjunlinkbfreebuÖ‰ûbcmp“¨?³dupmsgmaxBcastnidcanputåcanput_dlarpsndarp_bhasharpmrinitarpmwinitarp_openitarpbclosearp_installarp_deletearp_resolvearptab_cntpullupmsgarpgetrpyarpgetreqarpsndrpydl_arpsendarpfreemsgarp_ipbroadarpdl_bindarpdl_unbindarpdl_inforeqp$V™ ‚+.textLŒü .dataLLìØ @.comment888ÄIÉèL IpppH„ZH„tA<|w €A$¥ÔA@¸o@‡€@¸_ÿAÜA@A<AK‡Úp„ÿ@ÉìL H I(Èp„A@ÉìL H I„AB¨ BœOB„BÈ8p„BÈpÜ$HRp‚Âp„A@ÉìL H I„A@¨ @(€p˜�A<AKè{‹H„Z@„ÀH€Xp‚Èp(Èp-„È@€Ðp„È@„À@€Àp„È@ À  _‰,Ìø€ÈpÉìL H IG„ZH„tG„ÈA„Ç@‡À @<@L<@_†w{;×  H ,Ìø;× NàÈÜ ,Ìø»_ý× p H G,ÌøÉðL H G I H G,Ìø¯ H G,ÌøÉðL H G I G,ÌüÉðL H G I(Ápw( Èè _Š ,Ìô G,ÌüÉðL H G I H G,ÌøÉðL H G IF„ZH„ÈF{S„Ç@?_€À W.„Æ@ À ,Ìü(@w H G,ÌøÉôL H G F I„Æ@ À  G„Æ@„À @„Ð@,ÌøP H,Ìü„@Gw¢ÉôL H G F IppI„Z@„ÀA(ÁpÜ$Á@ @,ÌüÉèL IpFœL„ZA„tB„ G„ÁH„Fþ8âÅ ä_@ ²Å pz,þ²_ Å p U,ÌüÔO€€zþ„@ À  G„À @„Ð@,ÌøPÉüL H G F E D IF„ZHpp„K@È Kp H„@F,Ìü„@G G È,Ìø'€€ H,Ìü„@Gwæp„K@„FKpÉôL H G F IpppH„ZA‡wB„OH{6?BÈw-„XBA„ @8âÀäw5 Â  A„ @„Ð@,ÌøPÉìL H Iœ H„@¨ @œO@<@H[¸ A,ÌüÉìL H IH„tH   ,Ìø„@Ap„Á@œ Áp†Pp„ZÀp„xÁp„Á@‡ À p„OB{1ÇC%�¼p H,ÌüYL H G F E D C I?Ç w �Àp{×ÜFF@àÀ Ü@C,Ìø„@D½œCÄpÜFÄ E<t_ O#ˆ€,ÌüÐt@�€Äp‡wUp<tw „|Åp{€Åp< tw ‡{Åp€xp‡{Åp GàÅàÆ,ÌôÜE@Ü@hpÜâÙFæÙp„Ä E G E F,Ìô†CÅp‡Å pœFÄ p„E@„ÀE„À Àp À„@G„DF„GB,Ìüü€€ @,ÌüP€€„@@„ÀE„EÇ p‡_ÿÇp F G,Ìø¯²zàþpCœ(L„ZC„à G†ÇäYpÌW@Ðã@ädp<YC�p$o$€€ Y $,ÌøÜd@Füà Ã@< YK9„t@„ÀE0‡Xp„Å4Èp(Ç pw „Å @8âÀ äw„Å @8âÀ ä„ÅÇ pžfÇp� p„ÇÉp„Ç Çp Ç„CÉp„GE„EB,Ìüü€€ @,ÌüP€€„@Ép „ÉA„ÁÉp„ÉÅ p‡_ÿÅp É E,Ìø¯%YL H G F E D C I<$Y[ÌÈ@Ðã@@œ@<@YS �p{{„Ç |!ˆ€p„Èx!ˆ€p(D<Dw; È,Ìüü€€ @ ,Ìø�€€ @„@t!ˆ€p x!ˆ€  |!ˆ€,Ìð0K€€{'„Èt!ˆ€p t!ˆ€ x!ˆ€  |!ˆ€,Ìð0K€€ C,ÌüYL H G F E D C IpppF„ZH„tG„ÇF„Ç Çp Ç,Ìüü€€ @,ÌüP€€„@@„ÀF„FÇ p‡_ÿÇp H G,Ìø¯ÉôL H G F IpE„ZH„t@ÌPGÐãGG„È F‚Æp€E HüGæÀ@ @,ÌøtT€€†@Æp¼GÈ p„È @ÌP@Ðã@@¼@m ( ,Ìø„@E\ H E,Ìø V€€ E _‚,Ìøº@€€,\¬3€€„@G" G E,ÌøVI€€ H E,Ìø¯Ö G,ÌüüÅ Å@w E,Ìü€E H E  ,Ìð–9€€ÉøL H G F E IpHœLp„K@È Kpp„@H„@¤O€Q@¨_è@„A¤odA¨_èA¬odA¬_èAœA@„@Ypp„K@„HKp„Y@ÉìL H IppI„Z@„À A @ _ÿ,ÌøŽ€€ÉèL II„Z@„À@„À @„À@ÉèL IEœL„tA„Z@„À G„Á HüÁ ÁE$ý&€€‡X@p(@ <@w„F{~ÉøL H G F E I‡ÈFp(FOê<@a<@oD[<@_‚T<@_ƒ<@_…F<@_ˆ?<@_‰w8àÇY@ @ ,ÌôàÈàÇ ,ÌôY@ @àÈ ,Ìô{¼FEœFH(EFjÿÉøL H G F E IpppCœ8L„ZH*üÈ È@<@S1 H ,Ìø(@w!�(p$+€€YL H G F E D C I8È w$R(€€ ( ,Ìø„(É(p„HÉ$p„@É,pw €@$C(€€(É(pG$5(€€(É$pw$5(€€ É(„É$AüÁ Á@ @„AB,Ìø„@É4p5„É$A Á „É,A Á É4,Ìô„É,AœÉ4Áp„É$AœÉ4Á p¼É4É(p„É$Ap„ABüÁ cdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��Â@w2„É$A„ÁÉ0p„É$A€Áp É$,Ìü„É0É$p(É(pO (É$pvoÿ„É,A„É$Áp„É,@„@hpw$+€€„hH„È GÌW@Ðã@@üÈ ÈA„@YpÇäFC�$p$+€€ HüFæÇ@ @,Ìø(@w Oœ%ˆ€,Ìü$+€€€Ü#ˆ€p?oUW<Y_ H,Ìü¯=(@wu„CV<ÇÃw„à @„âÀ @8@;<ÇÃb<Ã8Ç[„Çhp<Ã0hP<Ã(hJˆÃ4@°Ã0@<@h=ˆÃ,@°Ã(@<@h0„Ã@Cw®<ÿÇ$(Çp H t,Ìø¯ž YL H G F E D C I„ #ˆ€EÈÃG „à CÈäFC È F,Ìø(@¾FÈpžFÈp{o È,Ìü€@YL H G F E D C I>ÃäFC Ã F,Ìø(@˾FÃpžFÃp{B„ÃE„à C„ÃF„Æ@„Æ À p„Æ @„ÆÀp E,Ìü€€ Y ,Ìø„@Épw „_ÜhpzÌþ„É@„À Ép<Yw ƒÉp„É@„B„GA„QPpœAœ@”BGô{ G É D,Ìô¯;‡@Ép„É@ÜÀ AßÉäAÀp„É@ÔDAú_ÿŸÇBÞBAÀp:Ç_  „É@²_ ÀpÜED@<@w„F{‡ÈF W,Ìüü€€ X,Ìüü€€ W,Ìüü€€„@Ép X,Ìüü€€<@Éw <ÈÇw{ ÜGF„VGw°„Z@<@_I;<@_Iw (Gw„hp„h@ÉôL H G F I„ÇVp G ,Ìø‚R€€�p{Ø(G„hp{Î:ÈwG€lp:È„XÌ(ˆ€p OÈ(ˆ€,ÌüŒ€€„@lp(lpw:„ÈÌ(ˆ€p OÈ(ˆ€,Ìüú€€„@lp{„ÈÌ(ˆ€p OÈ(ˆ€,ÌüŒ€€„@lp(lpw(„ÈÌ(ˆ€p OÈ(ˆ€,Ìüö€€„@lpw „_Øhpz>ÿ„OG„@¨@œO@<@GS'(Çpw*Çp$„@¨@œO@œG<@G[Ý„_Ühpzóþ„ÙÇp„GÙp„XWp„ÈÇpúÈ@ò@Çp€Çp W,Ìüü€€„@Ç p„l@„À Çp„l@üOÀ @Ôà@@z£þpppIœLY@ @ ,Ìø‚R€€„ZYp„tdp†~hp xY@ @,Ìø¯áýÉèL IG„ZG„tH;Ø  G ,Ìø;Ø >8âÇä0Ü$G@ @ ,Ìø»_þØ p G H,ÌøÉðL H G Iü$G@{Ò H,ÌüÉðL H G IpppI  ,Ìø„@Aw „ÿ@ÉèL I„Á@‡À p„Á@„Pp„tÀpœÁp„Z@ À  A„À @„Ð@,ÌøP€@ÉèL IpI  ,Ìø„@Aw „ÿ@ÉèL I„Á@‡À p„Á@„PpœÁp„Z@ À  A„À @„Ð@,ÌøP€@ÉèL IppG  ,Ìø„@Hw„ÿ@ÉðL H G I„È@‡_ƒÀ p„ÈG€WpœÈp„Z@ À  H„Z@„À @„Ð@,ÌøP€@ÉðL H G IppE„ZH È ,Ìü(@  ,Ìø„@Gw„ÿ@ÉøL H G F E I„Ç@‡À p„ÇF„Vp„Æp€Æ p‡w@<@GÀ@@(@K$�¸+ˆ€ G,Ìü„ÿ@ÉøL H G F E IÜÆF@ | @ „@E,Ìô‡wàÅp?ww4„ÆpœÇp„ÊÇp È  G„È @„Ð@,ÌøP€@ÉøL H G F E I„Æp{ÎÜÆF@ | @ ,Ìô„Æp{´€Æp{®pI„t@p€BÜ0ZA{ ‡PQp�B�A�@+Pp<BKîƒQpÉèL IF„ZA„B{5„FÜ0BH„AG8âÇä0Ü$G@ @ ,Ìø»_ýØ p G H,ÌøÉðL H G Iü$G@{Ò H,ÌüÉðL H G IpppE„ZA„tBp€G€F‚E„Á H<ÿFwóXâE@œ@GüÁ ÁF‚E�H”F”B{üÁ ÁF„ÁArt_dst=%x with dest=%x rtreq:comparing in_netof rt_dst=%x with dest=%x rtreq:comparing rt->rt_gateway=%x with gate=%x rtreq: after the loop rt=%x rtreq: deleting rt=%x rtreq: added %x %x€ˆ+Ü€ˆ,€ˆ,'€ˆ,I€ˆ,g€ˆ,‰€€Pµ€€P™€€P™€€P™€€Pµ€€Q€€P™€€P™€€Q) @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 dl_senddata: unsupport type %x €ˆ,Ì @(#)inet.h (TWG) 2.11.1.4 88/10/26 €ˆ,ø @(#)inet.h (TWG) 2.11.1.4 88/10/26 €ˆ-$ @(#)inet.h (TWG) 2.11.1.4 88/10/26 cksum: out of data €ˆ-h€ˆ-� @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)ip.h (TWG) 2.8 88/06/22 €ˆ-¼€ˆ-ဈ.€ˆ.) @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)ip.h (TWG) 2.8 88/06/22 €ˆ.`€ˆ.…€ˆ.«€ˆ.Í€ˆ.뀈/ @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 €ˆ/4€ˆ/Y @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)ip.h (TWG) 2.8 88/06/22 @(#)if.c 3.2 12:50:29 - 88/12/08@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)/usr/include/errno.h.sl 1.3 4.2 04/20/87 25066 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)in.c 2.3 10:38:57 - 88/05/02@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/lihdr.h.sl 1.1 3.0 12/19/85 33071 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)ip_main.c 3.6 11:21:05 - 89/01/16@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/immu.h.sl 1.1 3.0 09/25/85 7594 @(#)/usr/include/sys/fs/s5dir.h.sl 1.2 3.0 11/06/85 10453 @(#)/usr/include/sys/region.h.sl 1.4 3.1 09/04/86 1855 AT&T-SF@(#)/usr/include/sys/psw.h.sl 1.1 3.0 09/25/85 18557 @(#)/usr/include/sys/pcb.h.sl 1.1 3.0 09/25/85 31176 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/proc.h.sl 1.8 3.1 10/02/86 46632 AT&T-SF@(#)/usr/include/sys/signal.h.sl 1.4 3.0 12/06/85 45123 @(#)/usr/include/sys/file.h.sl 1.3 3.1 04/16/86 9268 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/user.h.sl 1.9 3.1 09/04/86 49769 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/var.h.sl 1.2 3.1 08/01/86 38671 AT&T-SF@(#)/usr/include/sys/lihdr.h.sl 1.1 3.0 12/19/85 33071 @(#)/usr/include/sys/tiuser.h.sl 1.3 3.1 09/04/86 2842 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)ip_icmp.c 3.5 08:55:26 - 89/03/01@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)ip_input.c 3.3 22:56:31 - 89/02/21@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)ip_output.c 3.3 15:19:14 - 88/11/08@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/tiuser.h.sl 1.3 3.1 09/04/86 2842 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)ip_route.c 3.1 15:57:04 - 88/11/01@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)ip_subr.c 3.3 11:02:04 - 88/10/27@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/lihdr.h.sl 1.1 3.0 12/19/85 33071 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)bcmp.c 1.1 17:15:40 - 88/10/25@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)bp_copy.c 1.2 16:44:41 - 88/10/26@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)que.c 1.1 17:15:51 - 88/10/25@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)endflush.c 1.2 16:44:45 - 88/10/26@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)in_cksum.c 1.3 14:40:47 - 88/10/27@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)iocreply.c 1.2 16:44:48 - 88/10/26@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)ip_strip.c 1.1 17:15:47 - 88/10/25@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)ip_swap.c 1.1 17:15:50 - 88/10/25@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)up.c 1.3 16:44:52 - 88/10/26@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF@(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 €€ï €€ €€: €€© €€7: €€S: €€“© €€º: €€ €€ © €€h© €€˜ €€ªª €€À* €€¹« €€Ëª €€R® €€È® €€7® €€®® €€® €€1 €€W® €€‡® €€À¯ €€Ó° €€Þ¯ €€ê¯ €€ö° €€® €€G* €€s¹ €€‰º €€¬g €€²» €€Áº €€È³ €€Ñ¼ €€Ö³ €€Þ« €€» €€º €€$º €€/» €€9½ €€Yº €€bg €€h¾ €€w* €€†¾ €€�¿ €€œ* €€«¿ €€²À €€Á* €€ÊÁ €€ÔÀ €€á­ €€ç³ €€ô* €€ © €€ B €€ t €€ €à €€ �à €€ ™g €€ ¸ €€ Ý €€ ó! €€  €€  €€ * €€ 5© €€ O- €€ \* €€ —º €€ ³g €€ ¾g €€ Õg €€ á[ €€ g €€ +g €€ 9g €€ ?i €€ Kg €€ ji €€ i €€ ÆÄ €€ Å €€ ø €€ “® €€ ¸® €€ øà €€ 'Å €€ Jµ €€ fÅ €€ Žg €€ žg €€ òª €€Ç €€2Ò €€>È €€ji €€zi €€ÍÉ €€< €€y €€´g €€¿g €€Ìg €€Ùg €€æg €€óg €€g €€g €€*Å €€Gµ €€ui €€®g €€ài €€F €€UË €€bÇ €€nµ €€‹ €€Û €€ €€º €€QÈ €€c¡ €€mÈ €€˜º €€Õ» €€ßº €€ïÅ €€ Ì €€4º €€l» €€vº €€†Å €€µi €€Èi €€ðÍ €€i €€!Î €€-Í €€9¸ €€ii €€|i €€®Ì €€ðÌ €€ÿÅ €€[º €€Äg €€Óg €€èg €€þg €€ g €€!g €€0g €€aÄ €€¬" €€·® €€Úg €€âg €€ïg €€þg €€ g €€g €€ g €€-g €€J+ €€V® €€_g €€f® €€vg €€Ág €€Ég €€Ög €€Þg €€ëg €€óg €€g €€g €€Lg €€^g €€d­ €€kg €€wg €€œÄ €€Ýg €€ãg €€g €€-þ €€Ag €€Zg €€‚g €€• €€© €€¯g €€É© €€Ðg €€%g €€® €€Êg €€ø €€ÿg €€© €€g €€s© €€}© €€„g €€�Ï €€– €€â €€" €€. €€uÌ €€¾Ì €€ÏÅ €€& €€s €€� €€ž €€° €€ €€D €€` €€Ž €€  €€² €€à €€Å €€> €€eà €€rà €€€Ì €€³ª €€ Ð €€ Ð €€ Å €€ :Ð €€ RÌ €€ l� €€ tÒ €€ ~Ð €€ µª €€ Ùª €€! ! €€!' €€!_Ð €€!fŽ €€!r« €€!�Ó €€!—Ð €€!Ãf €€!ÍÐ €€!ÔŽ €€!äÐ €€!÷Ž €€"Ž €€" � €€"$U €€"eŽ €€"~Ž €€"�W €€"¨Ð €€"¯Ž €€"¸Ž €€"ÃŽ €€"ÝŽ €€"è! €€#! €€# # €€# €€#iÐ €€#Œ! €€#–' €€#ïÐ €€#ú� €€$� €€$! €€$$ €€$-� €€$4� €€$<� €€$Dü €€$N� €€$U� €€$[� €€$c� €€$kü €€$uÅ €€$§! €€$±' €€% f €€%5Ì €€%F} €€%TÚ €€%[³ €€%lâ €€%€Å €€%’Å €€%¤Ò €€%ͼ €€%àÔ €€&'U €€&eŽ €€&Ϫ €€&ߪ €€&ñª €€'1Ó €€';Ö €€'B¹ €€'`¹ €€'lÌ €€'…¹ €€'‘¹ €€'�¹ €€'·« €€'ת €€(Å €€(K¹ €€(wÓ €€(�Ö €€(ˆ¹ €€(’» €€(¡f €€(´Ö €€(»¹ €€(ÈÖ €€(Ϲ €€(ÙÜ €€(òÖ €€(ù¹ €€) Ý €€)» €€)Þ €€)#¹ €€))» €€)2ß €€)K® €€)л €€)×» €€*» €€* ¹ €€*g» €€*p¹ €€*|Ì €€*‡¹ €€*“» €€*›O €€+%Å €€+^» €€+”Å €€+¬Q €€+»Ç €€+Û€ €€+ùU €€,:Å €€,LQ €€,WÇ €€,ع €€,ó¹ €€-Ý €€-"Å €€-JÝ €€-„Å €€. å €€.AQ €€.LÅ €€.y» €€.„» €€.ÄÅ €€.×Q €€.åÇ €€.î» €€.÷¹ €€/æ €€/ » €€/» €€/» €€/8[ €€/V» €€/_» €€/gç €€/m» €€/Ÿß €€/Ï~ €€/ù¹ €€0¹ €€0¹ €€0)¹ €€05¹ €€0W¹ €€0d¹ €€0s¹ €€0{» €€0‚» €€0Š €€0©¹ €€0¶Ð €€0ǹ €€0è¹ €€0ø¹ €€1» €€1!ª €€12» €€1?» €€1F¹ €€1^ª €€1i! €€1s' €€1�ª €€1¤ª €€1¯¹ €€1Ö¹ €€1éª €€1ô¹ €€2>¹ €€2d» €€2nª €€2t» €€2| €€2®ª €€2½† €€2Ôª €€3w» €€3�ª €€3’» €€3ž» €€3°» €€3º» €€3ÈÌ €€3á» €€3ì» €€3ü» €€4» €€4ª €€48» €€4n» €€4x­ €€4€Ö €€4‹Å €€4®¹ €€4½ø €€4й €€4Úè €€4é¹ €€4õ¹ €€4û» €€5¹ €€5¹ €€5o® €€5´Ò €€5¿Ö €€5ÌÖ €€6 Ç €€6&Ö €€6`~ €€6ˆÌ €€6°« €€6Ū €€6ìÅ €€7ß €€7!æ €€72æ €€7:æ €€7Aß €€7Fæ €€7Pé €€7Uæ €€7\æ €€7sæ €€7|ß €€7…æ €€7‘æ €€7™æ €€7 ß €€7¥æ €€7¯é €€7´æ €€7»æ €€7íä €€8Ì €€8Å €€83ª €€8=æ €€8Jª €€8nª €€8�Å €€8Ÿæ €€8¬ª €€8åÅ €€9æ €€9ß €€9æ €€9%æ €€9-æ €€94ß €€99æ €€9Cé €€9Hæ €€9Oæ €€9Vß €€9_æ €€9k: €€9¸Ó €€9Âä €€9Ìß €€9ëä €€9õÅ €€9ûä €€:Å €€: ä €€:%ä €€:@ä €€:Wæ €€:`æ €€:ä €€:éä €€;ª €€;Fª €€;sª €€;‘ú €€;¢æ €€;©æ €€;½ €€;Î! €€;Ø' €€;ûø €€<Å €€SÌ €€>så €€>ˆf €€> M €€?ª €€?pÌ €€?Å €€?‰Å €€?¬ª €€?ƪ €€?ÐÅ €€?øÅ €€@9Å €€A*ª €€ANª €€AÔß €€Bä €€B/ä €€B=ä €€Bcä €€Bpä €€B—ä €€B ä €€BÌä €€B÷ä €€Cä €€Cä €€C"ä €€C/ä €€CEä €€CQä €€Cbß €€Ckä €€C{ä €€C„ä €€C¢* €€C°ä €€CÂß €€Côä €€D ä €€D"ä €€D2Ì €€D=ä €€DJ* €€D[ª €€Dkä €€D|ä €€D•ä €€D ß €€DÏä €€DßÌ €€Dêä €€D÷* €€Eß €€EAä €€EN* €€E~ä €€E�ä €€E¨ä €€E×ß €€Fä €€FÌ €€F!ä €€FAß €€Fpä €€F…* €€F¨ª €€Fºä €€FËä €€FÞÌ €€Féä €€Fö* €€Gß €€G@ä €€G\ê €€Gpª €€G}ä €€Gœä €€G¬Ì €€G¼ä €€GÜß €€H ä €€H * €€HBª €€HXª €€Hzë €€H�ª €€HǪ €€I:ª €€I™ß €€Iêª €€JG¾ €€JS¿ €€Jc €€Jl €€Js¿ €€J�! €€J�í €€J§ €€J°í €€K  €€KÒ €€Kì €€K7 €€K> €€KG €€Kd €€Kl €€Kví €€K‹ €€Kª* €€KÕí €€L* €€L/í €€L6í €€LMí €€LŸ¾ €€L¨¿ €€LÉ! €€LÓ! €€LÝ! €€Lì! €€M>* €€MDì €€Mg €€Mn €€Mv €€M‡ €€MŽ €€M– €€M¤ €€M« €€M³ €€MÄ €€MË €€MÓ €€MèÀ €€MïÁ €€MùÀ €€NÁ €€NÀ €€N[! €€Nr €€N”* €€NÎà €€Nìà €€NÿÄ €€OÅ €€O6Ì €€OŒÌ €€OÞÌ €€P>É €€PNÌ €€P•. €€PŸÇ €€PǪ €€Qª €€Qc© €€QÙ© €€Qö: €€S Ü €€S"Ì €€Szª €€S°« €€Tà €€T4à €€TGÄ €€TbÅ €€T×h €€Uˆj €€U�Þ €€UñÅ €€VG €€V‰ª €€Vªª €€W � €€Wvª €€W†ª €€W˜ª €€WçÅ €€XÅ €€XÌ €€X¤Å €€XÌÅ €€XØÌ €€YÄ €€Y@à €€YQò €ˆp€ˆt€ˆx€ˆ|€ˆ€€ˆ„€ˆd1€ˆh1€ˆl1€ˆp1€ˆt1€ˆx1€ˆ€i€ˆ„i€ˆˆi€ˆŒi€ˆ�i€ˆ”i€ˆ˜i€ˆœi€ˆ¨i€ˆ¸i€ˆÌg€ˆÐg€ˆØi€ˆàg€ˆäg€ˆôi€ˆüg€ˆg€ˆi€ˆµ€ˆ,i€ˆ4i€ˆ8i€ˆ<i€ˆ@i€ˆDg€ˆHg€ˆLg€ˆPg€ˆTg€ˆXg€ˆ\g€ˆ`g€ˆŒg€ˆ�g€ˆ”g€ˆ˜g€ˆœg€ˆ g€ˆ¤g€ˆ¨g€ˆ¬g€ˆ°g€ˆ´g€ˆ¸g€ˆ¼g€ˆÀg€ˆÄg€ˆÈg€ˆÌg€ˆÐg€ˆàg€ˆäg€ˆèg€ˆìg€ˆðg€ˆ!T�€ˆ!X�€ˆ!\�€ˆ!`�€ˆ!d�€ˆ!h�€ˆ!l�€ˆ!p�€ˆ!€Ž€ˆ!„Ž€ˆ!ˆŽ€ˆ!ŒŽ€ˆ!�Ž€ˆ!”Ž€ˆ!˜Ž€ˆ!œŽ€ˆ! Ž€ˆ!¤Ž€ˆ!¨Ž€ˆ!¬Ž€ˆ!°Ž€ˆ!´Ž€ˆ!¸Ž€ˆ!¼Ž€ˆ!ÀŽ€ˆ!ÄŽ€ˆ!ÈŽ€ˆ#€»€ˆ#„»€ˆ#ˆ»€ˆ#Œ»€ˆ#�»€ˆ#”»€ˆ#˜»€ˆ#œ»€ˆ# »€ˆ#¤»€ˆ%俀ˆ%èæ€ˆ%ìæ€ˆ%ðæ€ˆ%ô怈%øæ€ˆ%ü怈&怈(¤€ˆ(¨€ˆ(¬€ˆ(°€ˆ(´€ˆ(¸€ˆ(¼€ˆ(À€ˆ+ .€ˆ+¤.€ˆ+¨.€ˆ+¬.€ˆ+°.€ˆ+´.€ˆ+¸,€ˆ+¼,€ˆ+À,€ˆ+Ä,€ˆ+È,€ˆ+Ì,€ˆ+Ð,€ˆ+Ô,€ˆ+Ø,€ˆ,ÈH€ˆ,ô_€ˆ- j€ˆ-`u€ˆ-du€ˆ-¬�€ˆ-°�€ˆ-´�€ˆ-¸�€ˆ.H�€ˆ.L�€ˆ.P�€ˆ.T�€ˆ.X�€ˆ.\�€ˆ/,£€ˆ/0£.fileÿþgif.c€€Ð$*€€úh’€€Œhg/€€öhh ifconf€€^$ =€€^$Ÿ.text€€Ð0.data€ˆpô.commentŒS_inet€ˆpS_socket€ˆtS_if€ˆxS_in_var€ˆ|S_in€ˆ€S_ip€ˆ„zeroaddr€ˆˆ.file;ÿþgin.cI€€$ŽW€€�.i!in_netof€€ü.d#in_lnaof€€`.|%c€€Ü$s'p€€Ph-)}€€€$<+Š€€¼hT-•€€ B/.text€€T .data€ˆd.commentŒ¨S_inet€ˆdS_socket€ˆhS_if€ˆlS_in€ˆpS_in_var€ˆtS_ip€ˆx.file|ÿþgip_main.cipinit€€T  ?ipopen€€`$îAipclose€€N$µCipmuxq€€ h-Eipbclose€€ 4 PGipoput€€ †$öIiposrv€€ ~$ÙK¡€€X$?Mipsend€€˜$ìOipbosrv€€†$ Qipbiput€€’$¦Sipbisrv€€8$SUipdrint€€Ž nW®€€ü —Yloadav€€” X[¸€€ì ¸]Ä€€¤$§_Ѐ€N îaÛ€€<$¢c倀à#Seð€€4$µg.text€€T˜Ï.data€ˆ€Ô8.comment4TS_inet€ˆ€S_socket€ˆ„S_if€ˆˆS_in€ˆŒS_in_var€ˆ�S_ip€ˆ”ü€ˆ˜S_route€ˆœip_info€ˆ¤ib_info€ˆ´iprinit€ˆÄipwinit€ˆàipbrinit€ˆüipbwinit€ˆ€ˆd.fileŸÿþgip_icmp.c€€ì M€#€€!: Q‚.€€$Ž S„;€€$â Õ†ip_time€€%¸.ZˆE€€& ŠR€€&2.Œa€€&J ÇŽ.text€€ì(I.data€ˆ!T,.comment ˆXS_inet€ˆ!TS_socket€ˆ!XS_if€ˆ!\S_in€ˆ!`S_in_var€ˆ!dS_ip€ˆ!hS_icmp€ˆ!lS_route€ˆ!picmp_src€ˆ!ticmp_dst€ˆ!xicmp_gw€ˆ!|.fileÊÿþgip_input.cip_input€€' û£ipfree€€, V¥ip_enq€€,f (§ip_deq€€,Ž  ©ipreas€€,®h·«k€€.h ç­u€€/R '¯�€€/|$ì±save_rte€€3j$B³Ž€€3¬h¦µš€€4T "·¥€€6xhš¹.text€€'™ .data€ˆ#€d .comment àXS_inet€ˆ#€S_socket€ˆ#„S_if€ˆ#ˆS_in€ˆ#ŒS_in_var€ˆ#�S_ip€ˆ#”S_icmp€ˆ#˜S_route€ˆ#œipaddr€ˆ#ÈiptimeID€ˆ#Øip_srcrt€ˆ#à.fileöÿþgip_output.c±€€7$T΀€7hh•ÐÕ€€9$–Ò瀀9–$!Ôñ€€>¸$‹Öü€€?FhØ €€@flQÚ€€@º$ÄÜ"€€A~$JÞ/€€AÊ$<à9€€B$NâF€€IV$éä.text€€7,© .data€ˆ%äÀ.comment8˜S_inet€ˆ%äS_socket€ˆ%èS_if€ˆ%ìS_in€ˆ%ðS_in_var€ˆ%ôS_ip€ˆ%øW€ˆ%üS_route€ˆ&ip_id€ˆ&dstaddr€ˆ&c€ˆ&s€ˆ&.fileÿþgip_route.crtalloc€€J@hÀúrtfree€€K$+ü…€€K0$+þ�€€L\$.›€€LŒ$õ¥€€N„$4.text€€J@x5.data€ˆ(¤ü.commentÐS_inet€ˆ(¤S_socket€ˆ(¨S_if€ˆ(¬S_in€ˆ(°S_in_var€ˆ(´S_ip€ˆ(¸¯€ˆ(¼S_route€ˆ(Àwildcard€ˆ(Äsin€ˆ(È.file8ÿþgip_subr.c»€€N¸ qdl_bind€€O,$UÅ€€O‚$PÏ€€OÔ$\Ú€€P2$ý 怀Q0 ,"ip_getif€€Q\hb$ñ€€QÀhY&Strlen€€R$(Strncmp€€R:$G*w_bzero€€R‚ J,.text€€N¸ .data€ˆ+ (.commentèˆS_inet€ˆ+ S_socket€ˆ+¤S_if€ˆ+¨S_in€ˆ+¬S_in_var€ˆ+°S_ip€ˆ+´.fileBÿþgbcmp.cbcmp€€RÌ$0<.text€€RÌ0.data€ˆ,È.commentpà.fileMÿþgbp_copy.cbp_copy€€Rüh½F.text€€RüÀ.data€ˆ,È,.commentP¤S_inet€ˆ,È.fileYÿþgque.cc_enq€€S¼ $Qc_deq€€Sà S.text€€S¼D.data€ˆ,ô.commentô .filedÿþgendflush.cendflush€€T q].text€€Tt.data€ˆ,ô,.commentàS_inet€ˆ,ô.fileoÿþgin_cksum.cin_cksum€€Tt-hh.text€€Tth.data€ˆ- @.commentôhS_inet€ˆ- .file{ÿþgiocreply.ciocreply€€UÜ As.text€€UÜD.data€ˆ-`L.comment\ÈS_inet€ˆ-`S_ip€ˆ-d.file‰ÿþgip_strip.cü€€V  ×.text€€V Ø.data€ˆ-¬œ.comment$hS_inet€ˆ-¬S_socket€ˆ-°S_if€ˆ-´S_ip€ˆ-¸.file™ÿþgip_swap.c €€Vø À�.text€€VøÀ.data€ˆ.Hä.comment ŒhS_inet€ˆ.HS_socket€ˆ.LS_if€ˆ.PS_in€ˆ.TS_in_var€ˆ.XS_ip€ˆ.\.file©ÿþgup.c€€W¸$¹�!€€Xr$ÀŸupflush€€Y2$>¡.text€€W¸¸ .data€ˆ/,L.comment!ô4S_inet€ˆ/,S_ip€ˆ/0ipbnextbcopymin.€ˆ|>Lin_addrin_cntVmyinaddrbootime_trmask€ˆ putqipinfo€ˆ4cexp€ˆÔavenrun MINORipdipd_cnttimeurthostrtnetroute`ipbflushqqreplyfreemsgj€€ žfreebgetqcanputt€€Ounlinkballocbprocvipb_cnticmpstat¸€€ˆ!ÌpanicŽlboltiprsq€ˆ# ipstat ipcksum€ˆ#À˜€ˆ#Äip_nhops€ˆ#Ü¢€ˆ$ˆ¯€ˆ$Œmsgdsizeadjmsgprintf¿ipenq1€€*�ipenq2€€*Ÿipenq3€€*Óip_in2€€+ ip_in3€€+elinkbtimeoutÎdupbØëõrttrashrtstat rtreqend€€M!rtreqdel€€MIrtreqadd€€N~dlinfo€€P putctl1ÿif_rtinitifa_ifwithaddrifa_ifwithdstaddrifa_ifwithnetfill_iocmsginet_netmatchin_makeaddrin_localaddrin_iaonnetofin_broadcastget_inaddrfree_inaddripid_to_protip_ctlmsgip_calcloadipmuxnotifyip_doioctlip_ifinitip_sockoptipvcshangupS_inetioctlipid2prot_tableicmp_erroricmp_inputicmp_reflecticmp_sendip_raw_inputip_icmp_getdsticmp_swapiptimeoutipuntimeoutip_dooptionsip_srcrouteip_forwardip_alignmsgip_security_initadd_ipopt_securitycheck_ip_securityip_outputip_optcopyip_insertoptionscheck_optdelete_optfind_opt_lencheck_lenip_ctloutputip_install_routeS_inetioctl_my_ip_security_ip_security_initrtredirectip_rtioctlrtrequestip_rtinitS_inetioctlheadflushdl_unbinddl_inforeqdl_senddataip_setnameip_findemdip_stripoptionsip_swapsrcup_ok_ackup_error_acksubnetsarelocalin_interfacesin_ifaddrker_routeroute_cntIP_gethisipbunitdatainetctlerrmappullupmsgipforwardipforwardingipsendredirectsmy_hosts_classuntimeoutmy_hosts_authoritystream_idipopt_outp$V  ê.textDŒ  .dataDD8Ð 6@.comment|| F„ZHÔæv@¸o@‡€@ú_ÿvAÞA@vp<|$«„OG„@¨ @œO@<@GS (Wp„@¨ @œO@œ G<@G[äüOG@œ Lì @æÌôp„æÌôævp¼ L„ævvp†v@<@KO‡Úp„ÿ@ÉôL H G F I(Èp†v@ÉôL H G F I*vpKÏ<ævCņv@ª @œO@„@G„HWp€Çp€Çp„GÈp„GÈ8pp„K@È Kpp„@F²o@È>pp„K@„FKp†v@ÉôL H G F IppH„ZH„È@€Pp H ,ÌøàÈ$ ,ÌøÉìL H IppDœL„ZH„tG„ÈF„VE„Ç@‡À @<@w$<@[<@ <@)<@_ƒJ<@_† G,ÌüÉüL H G F E D I„Ç@‡_‚À p H G,ÌøÉüL H G F E D I„Ç D„T@<@GÀ@@(@K$�Ä G,Ìü{™„Ç@?À w:„Ç@„ÇAüÁÀ@<$@[' Ç,Ìü€Çp„Ç@„ÀÇp„ÇÇ p+w#{+w G,Ìü $ ,Ìø„@GE„Ç@‡_ƒÀ p„Ç @„@Yp„O A„ B„QPpœAœ@”BGôÜ$Ç Çp Å  G„Å @„Ð@,ÌøPÉüL H G F E D I„Ädp„Ç@?À w:„Ç@„ÇAüÁÀ@<@[' Ç,Ìü€Çp„Ç@„ÀÇp„ÇÇ p+w#{+w G,Ìü  ,Ìø„@GF„Ç@‡_ƒÀ p„Ç Yp„Ùp„Y@€Àp„Y@„À p„Y@„dÀpÜÇ Çp Å  G„Å @„Ð@,ÌøPÉüL H G F E D I„Ç@?À w:„Ç@„ÇAüÁÀ@<@[' Ç,Ìü€Çp„Ç@„ÀÇp„ÇÇ p+w#{+w G,Ìü  ,Ìø„@G%„Ç D„Ç@‡_ƒÀ p„Tp„ÄpÜÇ Çp(Ew$ÉüL H G F E D I„Ç Yp„ÙpÜÇ Çp Å  G„Å @„Ð@,ÌøPÉüL H G F E D IpppIÉèL IpppäV $HT8HXt ý²mññññ @(#)inet.h (TWG) 2.11.1.4 88/10/26 lolo_open: open chan %xlo_oput: unknown PROTO msg %xlo_oput: M_CTLlo_oput: unknown bp type %xlo_osrc: invoked@(#)loop.c 3.1 13:42:54 - 88/10/18@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/immu.h.sl 1.1 3.0 09/25/85 7594 @(#)/usr/include/sys/fs/s5dir.h.sl 1.2 3.0 11/06/85 10453 @(#)/usr/include/sys/region.h.sl 1.4 3.1 09/04/86 1855 AT&T-SF@(#)/usr/include/sys/proc.h.sl 1.8 3.1 10/02/86 46632 AT&T-SF@(#)/usr/include/sys/psw.h.sl 1.1 3.0 09/25/85 18557 @(#)/usr/include/sys/pcb.h.sl 1.1 3.0 09/25/85 31176 @(#)/usr/include/sys/signal.h.sl 1.4 3.0 12/06/85 45123 @(#)/usr/include/sys/file.h.sl 1.3 3.1 04/16/86 9268 AT&T-SF@(#)/usr/include/sys/user.h.sl 1.9 3.1 09/04/86 49769 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/lihdr.h.sl 1.1 3.0 12/19/85 33071 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF ' - 4 > O Y h Œ – È Ø 8 E u š  í ÷ ! I U s Û   ‘ ¹ Å D L ` d l t x ˆ � ” Ä È Ì Ð Ô Ø Ü à .fileÿþgloop.clo_open$"lo_close$$.lo_oputT$álo_osrv8$ .textD.dataD8.comment| S_inetDHlo_rinitXlo_winittlo_info� MINORlo_dlo_cntuflushqfreemsgqreplyallocbloop_infoLO_info_ackp$V q-(Y.textŒ#ŒÚ .data€¤,@.comment˜˜h$FœL„ZHÔæv@¸o@‡€@ú_ÿvAÜA@Yp„âÜà@‡Úp„ÿ@ÉôL H G F I<|wl„OG„@¨0@œO@<@GS (Wp„@¨0@œO@œ0G<@G[äüOG@„@Y¬0Y<YKK‡Úp„ÿ@ÉôL H G F I(Èp„Y@ÉôL H G F I(YpKÏ<YCÆ„YG¨0GœOG„HWp„YÇpƒÇ+p„O€@†@Ç,p„,Çp†Ç$p†_ÿÇ&p€Çp€Ç p„G,p„GÈp„GÈ8pp„K@È Kpp„@F²o@È>pp„K@„FKp„Y@ÉôL H G F IppD„OF„Z@„ÀH(Èp$•„OG{^ T? ^> o? y> ˆ> –?  = Ò? á> $ $ `. t" z> �$ ¹@ Ê@ ÖA ß? é> ú" B / ?C �@ —$ Ã@ Ô@ àA ý$ &@ 7@ CA kD �E žF Ð" à" ô" G (" 3" A" G$ oH —H £B ®/ µ" Ê$  I *J FH d" ˆ"  " ¼K H DL N" T" bH nB y/ €" ¾K ÝA *M AB �H ™/ ªN Ó. å" í" ü"  " " " *" 9" ?" M" Y" |B ‡/ ²C " %" fC µ" Ò" Þ" í" " 9" S" i" ½B È/ ôC g" t" €" �" ÕA †O ¢H Ö/ Þ/  ¡¢£ éF . /" [" p" |B ‡/ ”" ®K ¸@ ÅP ü" B )/ 0$ 8Q ™H ©H µ" ÝR æS " (B 3" =H C/ VB a" ¿" úK DK ™/ ®H ØB ã/ C t" ‹" ÔI  C H sC §F ßT é0 ð" $U /$ 6" D" O" e" |" “" Ÿ0 ¦" ¶B Á0 È" K A /V >W EW N0 U" _E j" žB «0 ²" ÃA ÜK @ W I 7H WW _H e0 n0 }H �H ã$ î$ õ$ þ$  $ M$ V$ ™B ¤/ «$ ³Q H �" «" ÅK RB ]/ ‚X ´. À. ñ@ $$ $$$($4$D$T$d$t"x"|"„$Œ"�" $¨"¬"¼$Ø$à$ä$è$ì$"" "$".fileÿþgraw.crawopen$Zrawclose\$™eö ZrawisrvP$` rawoput²$  rawosrv º$C’ $Ç�È ŒrawbiputT$Óª( hrawbisrv’$'´¼ çraw_bind¤$èÓŒ ‰†$! á8$ß".textÚ.data€.comment˜hS_inetS_ipS_in $S_socket(,rawbrstat,rawstat0$@.P9`rawrinitprawwinitŒD¨NÄrawinfoàXðrawport(MINORurawdrawd_cntfreebw_bzeroallocbqreplyflushqcanputgetqendflushfreemsgputqqenablebcopyoupflush|iocreplymsgdsizeprintfip_ttlip_tos¾ÈdupmsgrawmsgïùS_inetioctlrawd_headraw_rinforaw_winforawb_rinforawb_winforawbrinitrawbwinitRAW_info_ack_rawcloseup_error_ackup_ok_ackraw_sockoptraw_outputrawmuxnotifyrawmuxackraw_inputpullupmsgip_swapsrcraw_getmyaddrraw_ipoptionsipopt_outp$V _¸Pn Uä À€€Ð€ˆ´.text€€Ð€€ÐUäГ4 .data€ˆ´€ˆ´ ÀV´±z¯@.bss€ˆ7t€ˆ7t€.commentÀwtI„O p„ p†ðˆ€p†òˆ€pÉèL IpppD„ZH†vGÔæG@¸o@‡€@ú_ÿGAÜA@E(pw.<|(E‡Úp„ÿ@ÉüL H G F E D I,\¼.€€<|wm„OF„@¨,@œO@<@FS (Vp„@¨,@œO@œ,F<@F[äüOFE¬,E<EKV‡Úp„ÿ@ÉüL H G F E D I„ÈF„HVp„E@ÉüL H G F E D I(EKÄ<EC»„EF¨,FœOF„HVp„âÜà@ƒÆ$p{‡Æ$p€Æp€Æp„ÆÆ pø_ÿE@‡@Æ%p€Æp€ÆpƒÆ'p(E†Æ(p(Ôˆ€p²Æ"p„FÈp„FÈ8pp„K@È Kpp„@D²o@È>pp„K@„DKp„Æp„Fp„E@ÉüL H G F E D IppI(p4‡p,\¯o€p( p  ,Ìü€ pÉèL IppF„Z@„ÀH+È%pw|„G{-„ÇFÆ@$.€€(Æ$pG$@€€àÆ È „âÈ@ @ È„âÈ@ @ ,Ìè¯.ý„@Ép „É@„À F8DB É,ÌüÎU€€$ƒ€€8D$ƒ€€8Dw$ú€€„V@8âÀ"äw$@€€€F$@€€8D$ƒ€€„VE{Z(Up„U@üÅâÀ @{€@†@É p+„âÉ @ @üâÆrÆv@ @,Ìø†@Ænp„âÆnà@w„âÉ à@†É Ænp‚¦Žp†oZÆHp(Yp F Y,Ìø¯' €Yp(Åp Å,Ìü€Åp(Ép „ÉÅp€Ép>Æ@w$8D[üÆhÈ@C$@€€ü¦€È@OD$@€€üÈÆp@„@ÉpG$*€€8Dw$.€€¸ýD�Èp<âÈ&W$&€€–È&p$*€€8D+8Dw$ƒ€€ F _á,Ìøœ9€€ F,ÌüzR€€$ƒ€€8Dw$ƒ€€‚ÆDp„ÈÆ|pÜÆ|Æpp²ÆBp8D[„ÈÆTpüÆTÆX@C„ÆTÆXp E È „âÈ@ @,ÌôX3€€„âÆP@ @ F ,Ìø¯ˆ @,Ìø†@ÆPp†Æ@p F ,Ìø¯ž {†Æ@p„ÈÆ`p�Èp<âÆnæÈ W$Ê€€üâÆnæÈ äÉp GŒÉ@ @,Ìø(@w$ƒ€€†ÆnÈ p¸þD„ÈÆxp$Ê€€¸oßD”Ép>È äÉG>È äÉwB8Dw=8D ÞÈ @<@É8Dw$n€€üÆp@<@È$n€€†È äÉp¸þD²ÆBp G É G,Ìü¼É@ @,Ìô„ÉÉTp„GÉPp„@É\pw€@{O„ÉPA(Áp„ÉPA Á,Ìü„ÉPA„É\Áp„ÉPA„Á Áp„ÉPAü(Á AœÉTÁp¾ÉVÁ p„AÉXp„AB„@(@w$ƒ€€<ÉâÈ&_Ü&HÉ$püâÉÙ$æÙ$p{ ¸oßD‚È&pÜÈæÈ @ÜÆpâÆnA¼A@„@ÉpOC>È äÉK"„âÆnà@$n€€<ÆpÈ$n€€²ÆBp GŒÉ@ @,Ìø¾ÉÈ p¸öD8D]†Æ@@< @O$ƒ€€À@@(@C$ƒ€€$�¬ˆ€ F _á,Ìøœ9€€ F,Ìüä5€€ F,ÌüR€€$ƒ€€ F,ÌüzR€€$ƒ€€8D* F _Û,Ìøœ9€€ F,Ìüä5€€ F,ÌüR€€$ƒ€€8Dw$ƒ€€þÆ@ä@C$Ê€€<@O$Ê€€À@@(@C$Ê€€$�숀üÈÆT@O$@€€ü¦€È@O$@€€�ÆTpüÆTÆX@C„ÆTÆXp‚ÆDp? Å'[?p„K@È Kpp„@C„U@„O¿ÿAºAÀ>pp„K@„CKp(Up„U@üâÅÀ æÆnp{‚Ænp„âÆP@ @ F ,Ìø¯g  @,Ìø†@ÆPp†Æ@p F ,Ìø¯} üÈÆ`püÆTÈ@G$Ê€€ü¦€È@O$n€€üÆTÈÉp„⦆à@zü¦ˆÈ@Oq„⦌à@wÐ⦆榌p‚¦’p{Q„⦆@Ô⦌AüA@É pÜ_ŒFÉ$pÜâÙ$É"æÙ$p(É pCŒÉ É pÔ⦒@¼@É pÜ_’FÉ$pÜâÙ$É"æÙ$p‚¦†p<¦€Èw‚ÆDp{+Ð⦌@Ô@æÆDp>ÆDC†ÆDp><ÆDO†<ÆDp‚¦„p„Å Ép(ÉpO5œ Lè ⦔äÌôp„äÌô@¼ L„ä@@¬à @ @ Oÿÿ,Ìø†@¦”p<ÉÉO(ÜolFÉ$püâÉÙ$æÙ$p E É,ÌøÔT€€œÉÆTp{*ÜolFÉ$püâÉÙ$æÙ$p E É,ÌøÔT€€œÉÆTp€Ép„ÈÆTpüÆTÆX@C„ÆTÆXpþÆ@ä@KK<@GFÀ@@(@K>$�؈€(ÉpO2„VE† Æ@p†_ÐÆJp{!(ÉpO† Æ@p F,Ìüp1€€†ÆJp„FÉLp8DFüÈÆ`@K <ÈÆ`w7üÈÆd@K<ÈÆdw(<âÆlÈ"_ †È"Ælp„ÈÆ`p„ÈÆdp„âÆlà@‚ÆFp8D w$ „âÈ&à@w$ > Æ@>Æ@>Æ@>Æ@wp„@{m(ÉpG$ƒ€€‚Æ@p F,ÌüzR€€$ƒ€€†ÆJp8D$ƒ€€„ÆpÉ0p„ÆXÉ4p¼(Ç p„FÉ(p„É8p„GÉ,p„GB„É,A(Ápw$[€€$D€€€@(@w-ÜÈâÈ&@¼Æx@O ÜÈâÈ&äÆxp>È âÈ&W E,Ìül8€€{<ÆxÆp_„ÆpÆxp*È pw8DI>Æ@>Æ@>Æ@> Æ@w„@{€@(@w& F G,Ìø¯B„@D(¨ˆ€p ²ÆBp{²ÆBp{ G,Ìü¸þD8DV> Æ@>Æ@>Æ@>Æ@w„@{€@(@w ²ÆBp�Æpp†Æ@@< @G!À@@(@K$� ˆ€†Æ@p E ,Ìøî8€€ F,Ìü ,€€YL H G F E D C I†Æ@p{ß>Æ@ E ,Ìøî8€€† Æ@p F,Ìüp1€€†ÆJp{·†ÆJp{°8Dw$ƒ€€ E H,Ìøä3€€„@F$Ø€€¼(Ç p€É4p€É0p€É(p„É8p„GÉ,p„GB„É,A(Áp„É,A Á,Ìü„É,A€Áp„É,A„Á É@p„É,AÜ(Á @„É,A„@Áp„É@A„ÁÉÇ äDC0 C D C,Ìü¼D@ @,Ìô„DÉp„CD„@É pw$€@{T C,Ìü€@YL H G F E D C I(Äp  Ä,Ìü„É Äp„Ä Äpü(Ä @œÉÀp¾ÉÀ p„@B„@(@¬„VF$!€€ü(Æ @ÜÇæÇ D¼ÀDp„DDG$ !€€>À äDCk F D F,Ìü¼D@ @,Ìô„DÉp„FD„@É pw€@{6(Äp  Ä,Ìü„É Äp„Ä Äpü(Ä @œÉÀp¾ÉÀ p„@B„@(@w&zÿ„Vdp F,Ìü F,Ìü„dFÈ@K„@{€@(@„UCÈ@w*Ç p€@YL H G F E D C I€D$v"€€žÇ äÈppûÇ!D„SF C,Ìü„Chphdp{9„Ù@„ÙAüÁ À@w#„Ù@„@lp„ÀÙp„l@€Àp l,Ìü{ÜÙdp(ÙpwÅ„hCw$m"€€;Ç! w$Z"€€üà Ã@}†Ç @ @ ,Ìø„@Ép~ þ„Ã@ƒÀ p>Ç âÇ&_†Ç Ç&p Ã „É@ À „âÇ&@ @,Ìô„É@œâÇ&äÀp„âÇ&BœBà p Y É,Ìø¦7€€<Ãà w  C,Ìü<à àY C,Ìøæ6€€ü(Æ Gp„FCÉ.Qw<âÉ2Áw †ÆÉDp{ „TD<É4Dw³„âÉDæÙp„âÙà@vFÿ€Å p„Ç@‡_‚À p(Åpw„Åp H G,ÌøYL H G F E D C IpppCœL„ZH„tA„xB„|G„ÇF„D(F6üÆ Æ@< @[+„Æ E(Upw= G A Å,Ìô¯§„@Dw„ÇFüÆ ÆÈ p„D@YL H G F E D C I€È p{ç<UjDPw<âGÀw†ÂF{ „XHÈDC†ÈDp><ÈDO†<ÈDp„ÈTÈXp„⨆à@üÈT¨ˆ@O‚¨†p H,Ìü ,€€ÉìL H I H,Ìü¯‚²ÈBp H,Ìü ,€€ºýÈBpÉìL H I>È@J,ÿ„X@8âÀ"ä>>È@G8Ü_ŽHYpÜâÙæÙp< âÙRÿ H  üÈT@ @üÈp@ @ ,ÌèôL€€†oZÈHpÉìL H IppI„ZAÐ⡌@Ô@@Ðâ¡„ä@æÁFp> ÁFC† ÁFp><ÁFO†<ÁFp’¡„p< â¡„[‚¡„pÉèL IH„ZH?È'wp $ ,Ìø„@A_„Á@‡À p„Á@„ Pp„Àp„Àp€À p„ÀpÜÁ @„tÀp†zÀpœ$Áp„X@ À  A„X@„À @„Ð@,ÌøP‡ È'pÉìL H I H,Ìü6;€€ÉìL H ICœL„ZH„tG„È@„À F?È'?È'wC<Æ$Æ CF H,ÌüÄI€€„@C7„à E ( ,Ìø„@Dw6$!5€€ D,Ìü$!5€€ H,Ìü6;€€€@YL H G F E D C I„ÇÅp†ÇÅp„Ç Åp†ÇÅp<âÈ($<5€€ Å„âÅ@ @,Ìø:,€€„@hp— Å„âÅ@ @,Ìø:,€€„@lpw$44€€(¥˜p$44€€(¥œp$44€€ h,Ìü„@¥˜p(¥˜p~Hÿ l,Ìü„@¥œp(¥œpw8 ¥˜,Ìü€¥˜p D,Ìü E _ ,Ìø C,Ìüzÿ E,ÌüöK€€(@vìþ†oZÅHp„Ä@‡À p„Ä@„ Pp„Àp„Àp€À p„Àp�ô*ˆ€p„ô*ˆ€Å(p„Å(ÀpÜÄ @„Ç Àp†ÇÀpœ(Äp�Æ p CàÆ,Ìø„X@ À  D„X@„À @„Ð@,ÌøP‡È'p„E@YL H G F E D C IpDœL„ZA‡E„QH*Á@p;È$†ÁJpÉüL H G F E D I„XYpüãÈ'ä@K<@GÀ@@(@K$�ø*ˆ€ÉüL H G F E D I„ÿD{J„Á(D„È@„À F„ÆGÜFB{ <Ç A„WG€€„hA„Á dpÜdC„SD{2„DE„TD Å ,ÌüPJ€€ Å ,ÌüŽS€€ E,Ìü E,ÌüüÆ Æ@ÜÂÂAÀ@$}G€€ h  „h@ ÀX„h@ Àp ,ÌèôL€€„h@†ÀDpp„K@È Kp„@Ép„d@²o@À>pp„K@„ÉKp t Z ,Ìô(@$¶G€€‡ Ç'p„ ÉpÈ@C-8âÈBäw% H ,Ìø0#€€„OT5ˆ€lp„Ép„lA†@Áp{!(ÈLp„ÈL@„À lp„ÈL@„ÈLAüÁ ÀÉp(lph É ,Ìø„@Fw$‘Q€€œÉÆp l Æ  É,Ìô„FÇp GÜ(É@ @,Ìø(@w F,Ìü€Çp$‘Q€€(xp„xÇp„Ç F„|Æp„ÊÆp(H';Ê!8âÈBä<ÈTÈX”ÈXp„ÈXÆp„ÈpÆp(Hw$P€€„X@„À@ÈDC†ÈDp><ÈDO†<ÈDp*ÈFp!‚ÈFp‚¨„p{ÜEÈT@¼¨€@O ÜEÈT¨€pÜÉAÔAA‡AAÈAÆ p€Æp„ÆVpƒÆp‡ÊÆ!p†CÆ"p‚Æ$p€à@È@Æ pÞfE@ž@ÞÉ@Æ p GÜdE@œÉ@àÀ(,Ìø†@Æ$pÞfE@ž(@ÞÉ@Æp„ã@È@Vp‡Æp‡Æp(H„XDøâÄ"äÉp(Hw$´Q€€(Äpw(Épw$´Q€€(Äp „o@É p{„É p É  ,Ìø„@Fw$‘Q€€„Æ@‡À p(Ép3„ÆÉp†Ùp„É@†ÀpœÆpÉ@ @ Æ ,ÌôœÆp(ÄpG„Ä@„ÄAüÁ ÀÉ$p„ÆÉp†Ùp„É@†É&ÀpœÆp„Ä@ À  Æ É$,ÌôœÉ$Æp„Æ@„@Ép‚Àp„âÀæÙpœÆp„GÆp{((G  G,Ìü„ÿ@YL H G F E D C I„GF F,ÌüÄ€€„@@YL H G F E D C I(H(COÜCÈp@¼Èt@O ÜCÈpÈtp€@YL H G F E D C IHœL„ZH(Xp „X@‡À%@{>È@K‚È@p H   ÈX Èp ,Ìè¯Àú(Xp8„X@‡À%àdp H,Ìü¯D H,Ìüä5€€ X,Ìü H,Ìü¯ÉìL H I{ÓpppDœL„ZH(Xp „X@‡À%@{„HF(Vp„V@‡À%àÉp{„Æ4GÜ4FD{„WE G,Ìü G,Ìü„EG€€ D€ˆô€ˆô€ˆ€ˆ €ˆ<€ˆX @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 @(#)inetioctl.h (TWG) 2.8.1.5 88/12/08 tcptcptcpopen: try to open chan %x before control chan lingering..tcpiput: Error.. called with Mtype %x tcpisrv: rcount = %x tcpisrv: rcount msgdsize = %x %x tcpisrv: canput_tcpisrv=%d tcp_top_put: data = %x tcpmuxnotify: can't alloc for ip_if tcpsend: ip is not linked yet? tcpisrv: canput_tcpsend=%d tcpsend: ip full, drop packet tcpbiput: got M_ERROR tcpbiput: unknown M_CTL type %x tcpbiput: unkown message type %x tcp: lost iocblk tcpmuxack: %x %x tcp_gethisaddr: out of buffer tcp_gethisaddr: tcpsend failed €ˆ8€ˆ]€ˆƒ€ˆ¥€ˆÇ€ˆ倀€€Ý€€Ý€€«€€€€€€€€Ó€€Ó€€€€Ó€€”€€«€€I€€Ê€€i€€H€€ô€€ô€€ô€€ô€€ô€€ô€€ô€€¨€€¨€€¨€€—€€—€€¨€€Ä€€¨€€¨€€Ë€€ó @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)in.h (TWG) 2.4 88/05/11 @(#)ip.h (TWG) 2.8 88/06/22 tiu_timewait: entering TV_TIME_WAIT tcp_input: no buffer for incoming IP optionstcp_input: too short(%d) tcp_input: src = %x.%d, dst = %x.%d, flags =%x, cksum = %x tcp_input: bad checksum %x tcp_input: bad offset: off=%d, tlen=%d tcp_input: options in data = %d tcp_input: Bad header tcp_input: No buffers tcp_input: No match for %x.%d tcp_input: listen, maxcon <= 0 %x.%d tcp_input: Found a set up TCPCB(%x:%d) tcp_input: RST and ACK tw_close %x.%d tcp_input: ESTABLISHED %x.%d tcp_input: start p69 tcp_input: rcv_nxt snd_nxt %x %x b4 todrop: tp->rcv_wnd(%x), tp->rcv_nxt (%x),todrop= %d tcp_input_TH_SYN: tiflags ti_urp %x %x Dropping after ack todrop=%d, ti_len=%d tcp_input_todrop: todrop ti_urp %x %x tcp_input: tiflags %x a4 todrop:tp->rcv_wnd(%x), tp->rcv_nxt (%x),todrop= %d tcp_input: RST bit set tcp_input: RST aborting %x.%d tcp_input: RST in CLOSNG %x.%d SYN in window resetting %x.%d tcp_input: ACK bit set; tcp state = %x tcp_input: SYN_RCVD : dropwithreset snd_una %d ti_ack %d ti->ti_ack(%d) > tp->snd_max(%d) tcp_input: ACK set, 2nd switch; state = %x tcp_input_TH_URG: tiflags ti_urp %x:%x tcp_input: rcv_nxt ti_urp %x:%x tcp_input: b4 calling tiu_reass for FIN ti->ti_len = %d,tiflags=%d tcp_input: FIN bit set; state = %x tcp_input: FIN bit set tp->rcv_nxt = %d tcp_input: TH_FIN ord disc. %x.%d.tcp_input: new request %x:%x tcp_input: new request contains RST; dropping tcp_input: new request contains ACK; dropping tcp_input: New Request NO SYN dropping tcp_input: dropafterack %x.%d tcp_input: connection reset %x.%d tcp_input: error max seg set to %x tcp_reass: ti1->ti_seq=%d, ti->ti_seq=%d tcp_reass: i=%d, ti1->ti_len = %d,ti->ti_len= %d tcp_reass:overlap next i=%d, ti1->ti_seq = %d,ti->ti_len= %d tcp_reass:present i=%d, tp->rcv_nxt= %d,ti->ti_len= %d tcp_reass: BLEN = %d tiflags = %x tcp_reass: ti->ti_len=%d,ti->ti_urp = %d tcp_input: No buffers tcp_reass: returningi=%d tiu_reass: adjerr %x tiu_reass: dropall tiu_adjmsg: adjusted %x by %x tcp_bestmss: out of buffer €ˆ$t€ˆ$™€ˆ$¿€ˆ$ဈ$ÿ€ˆ%!€ˆ%?€ˆ%_€ˆ%ˆ€€$ú€€%.€€(߀€&!€€&!€€(߀€'^€€%7€€%Ô€€%'€€'³€€'Õ€€'Õ€€(% @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 @(#)icmp.h (TWG) 3.1 88/11/08 @(#)inetioctl.h (TWG) 2.8.1.5 88/12/08 @(#)un.h (TWG) 2.1 88/06/13 tcp_ioctl: unknown ioctl %x on cntl chan TCPIOC_GETMYSTATE no PCB tcp_ioctl: GETPORT: dev = %d, ino = %dtcp_sockopt: set optionstcp_sockopt: get optionstcp_sockopt: nonfatal error %0x tcp_sendipopts: out of buffer tcp_ipoptions: error 0x%x from iptcp_ipoptions: tcpsend failedfind_tcpport: can't find port for dev = %d inode = %dfind_tcpport: dev = %d, inode = %d matching port = %dfind_tcpafu: match for %x.%xfind_tcpafu: no match for %x.%x€ˆ'�€ˆ'µ€ˆ'Û€ˆ'ý€ˆ(€ˆ(= @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 tcp_output: set persist tcp_out: can't dup, snd_nxt=%x, snd_una=%x..len = %d..,tdp->td_wcount=%d tcp_output: PUSH flag settcp_output: err %x..€ˆ)t€ˆ)™€ˆ)¿€ˆ)ဈ)ÿ€ˆ*! 0@Px ððððð€€1º€€2Š€€2¯€€1ß @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 tcp_timers: REXMT went off; dropping tcp_timers: keep alive; dropping tcp_timers: 2MSL timer went off tcp_timers: will disconnect and rmtcb, timer = %d €ˆ+€ˆ+A€ˆ+g€ˆ+‰€ˆ+§€ˆ+É€€66€€66€€66€€6G€€6L€€66€€6G€€6G€€6G @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 Change to state = %x tn_connreq: drop %x.%x tn_connreq: lafu = 0x%x, fafu = 0x%x tn_connreq: rtp->t_lafu = 0x%x, rtp->t_fafu = 0x%x tn_connreq: copyb(lafu) failed tn_connreq: copyb(fafu) failed Change to state = %x tn_disconnected: incoming state = %x tn_disconnected: state = %x tn_data: Not Data(%x) tn_data: msgsize %d tn_data: Not Data(%x) tn_exdata: rdq adr %x tn_exdata: rdq adr %x tn_orddisconn: User data not allowed tn_orddisconn: incoming state = %x tn_orddisconn: outgoing state = %x €ˆ0X€ˆ0}€ˆ0£€ˆ0Å€ˆ0〈1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€;*€€B DÜ€€A”€€HN€€>œ€€=œ€€A^€€G Hh€€;6 ÿÿxŒ€€A뀀B€€BÉ€€A瀀A瀀Aç @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 tufsm: Ttype %x, final_state %x tu_fatal: state %x tu_cleancb: aborting conq tu_unbind: lport = %x tu_bind: addr %x.%x tu_bind: nonfatal %x tu_optmgmt: we are here tu_disconreq: minor device = %d tu_disconreq: seq = %x tu_disconreq: nonfatal %x tu_conreq: tv_aopen on %x.%x tu_connreq: Could not get my own address(%x) tu_con: fatal tu_connreq: nonfatal %x tu_connres: not in SYN_RCVD state (%x) tu_connres: seq %x, q %x, state %x tu_connres: nonfatal %x tu_ordrel: incoming state = %x tu_ordrel: outgoing state = %x tu_data tu_exdata:snd_up = %x tu_exdata:snd_nxt snd_una = %x %x €ˆ3耈4 €ˆ43€ˆ4U€ˆ4s€ˆ4•€€J‘€€Jp€€Jz€€Jz€€Jz€€Jz€€J‘€€J‘€€Jz€€J‘€€J¶€€J¶€€J¶€€JÄ€€JÄ€€JÜ€€J J¶€€J Jã @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 tv_close: incoming state = %x tv_close: outgoing state = %x tv_close: sending pending output and FINtv_sinit: template alloc failed €ˆ5X€ˆ5}€ˆ5£€ˆ5Å€ˆ5〈6 @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 tw_send: hbp not null, len=%d tw_send: hlen %d tw_send: no template tcp_tw: td->td_ipopt=%x, td->td_sockflags=%xtw_send: tcpsend error tw_send: err tw_drop: chan = %d tw_close: chan = %d tw_clean : chan = %ddupmsga: err %x, len=%x, off=%d tw_acked:read q not found tw_acked : len = %dtw_rmtcb..tw_rmtcb: can't find tcpcb @(#)tcp_main.c 2.10.1.14 11:23:00 - 89/01/16@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/immu.h.sl 1.1 3.0 09/25/85 7594 @(#)/usr/include/sys/fs/s5dir.h.sl 1.2 3.0 11/06/85 10453 @(#)/usr/include/sys/region.h.sl 1.4 3.1 09/04/86 1855 AT&T-SF@(#)/usr/include/sys/psw.h.sl 1.1 3.0 09/25/85 18557 @(#)/usr/include/sys/pcb.h.sl 1.1 3.0 09/25/85 31176 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/proc.h.sl 1.8 3.1 10/02/86 46632 AT&T-SF@(#)/usr/include/sys/signal.h.sl 1.4 3.0 12/06/85 45123 @(#)/usr/include/sys/user.h.sl 1.9 3.1 09/04/86 49769 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)tcp_input.c 3.4 12:10:33 - 89/02/22@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)tcp_ioc.c 2.8.1.3 08:58:26 - 88/07/06@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/tiuser.h.sl 1.3 3.1 09/04/86 2842 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)tcp_output.c 3.1 23:16:03 - 88/11/11@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)tcp_timer.c 2.5 19:10:18 - 88/06/15@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)tcp_tn.c 2.4.1.5 15:36:47 - 89/02/22@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)tcp_tu.c 2.10.1.7 00:35:54 - 88/11/12@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/tiuser.h.sl 1.3 3.1 09/04/86 2842 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)tcp_tv.c 3.3 00:01:40 - 88/11/18@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/tiuser.h.sl 1.3 3.1 09/04/86 2842 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 @(#)tcp_tw.c 2.9.1.5 23:17:11 - 88/11/11@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF @(#)tcp.h (TWG) 2.7.1.2 88/11/11 €€Ô) €€Ù) €€à) €€å) €€ì2 €€ñ, €€ø2 €€ý, €€3 €€04 €€C5 €€_Œ €€j4 €€q6 €€{4 €€Œ6 €€–4 €€¥4 €€°6 €€º5 €€÷6 €€4 €€5 €€U, €€‰, €€“, €€²+ €€¼+ €€È+ €€Ï+ €€Ø+ €€à7 €€æ+ €€, €€(8 €€=+ €€G+ €€S+ €€Z+ €€c+ €€k7 €€q+ €€yŽ €€Þ÷ €€ö9 €€ Ê €€: €€%: €€67 €€G7 €€M, €€t; €€¢, €€·< €€Á= €€á> €€ð? €€ÿ@ €€@ €€*> €€9? €€H, €€aA €€| €€–A €€�B €€¯Œ €€çA €€A €€B €€-Œ €€^* €€q* €€�* €€•* €€¡C €€Þ* €€!Ì €€57 €€N@ €€_D €€iE €€v= €€…Ä €€–a €€£= €€ÅA €€ä| €€ûA €€B €€Œ €€:F €€E+ €€W+ €€^+ €€hG €€‚+ €€‹+ €€Ÿ+ €€«+ €€Ë+ €€Þ= €€÷> €€ , €€ = €€ K+ €€ _* €€ j* €€ |* €€ ‡* €€ ’* €€ Ÿ4 €€ ²H €€ ¸+ €€ Â+ €€ Î+ €€ Õ+ €€ Þ+ €€ æ7 €€ ì+ €€ ÷= €€ D €€ ,+ €€ 5+ €€ F+ €€ S+ €€ [+ €€ p+ €€ Š+ €€ ”G €€ ±I €€ Ñ+ €€ Ú+ €€ ë+ €€ ø+ €€ + €€ + €€ $G €€ 2+ €€ R? €€ oA €€ ‚C €€ ™A €€  B €€ ²Œ €€ Æ? €€ éQ €€ , €€ ; €€ >J €€ E) €€ €K €€ ŽJ €€ §H €€ ´õ €€ º) €€ ôK €€ F €€ * €€ B+ €€ U= €€ e> €€ q, €€ z= €€ ¦= €€ à� €€»F €€ëN €€O €€%P €€/S €€\Q €€oL €€vS €€“L €€šS €€¯S €€ÎP €€ØL €€ßS €€óF €€ÿS €€R €€?R €€[) €€„S €€›S €€§S €€å €€ëS €€öS €€S €€S €€S €€%S €€\K €€¥7 €€ÒS €€áS €€ôS €€ÿS €€S €€S €€-S €€;³ €€E €€KS €€VS €€™¥ €€´S €€èS €€T €€ S €€"S €€ZS €€kS €€‰@ €€—U €€Æ= €€S €€TS €€aS €€vT €€“S €€¡S €€§U €€µ³ €€¿© €€É €€ÏS €€Ù €€ßS €€ò³ €€ü© €€ €€ S €€S €€%S €€0S €€>S €€DU €€RS €€aS €€ÕS €€þS €€ S €€S €€1 €€W €€�U €€¼� €€S €€(S €€QS €€_ €€eS €€uS €€¨S €€®S €€ݯ €€-U €€H= €€“U €€¤± €€®| €€Ù± €€è� €€S €€ § €€S €€O= €€Î €€ÔS €€7 €€(³ €€2© €€< €€LS €€‰= €€š7 €€©7 €€ö= €€u €€¿= €€> €€`= €€§ €€â= €€!S €€NS €€µF €€R €€X= €€}S €€¨S €€ÈS €€Ý@ €€êU €€ = €€ ,= €€ \S €€ xS €€ �@ €€ šU €€ ¾= €€ öV €€!= €€!W €€!\S €€!uV €€!®7 €€!ÇS €€!ÓS €€!ëF €€""R €€"E­ €€"V7 €€"i« €€"¢³ €€"¬© €€"¶ €€"Ñ@ €€"ÞU €€#= €€#BF €€#ƒ €€#˜X €€#³= €€#á+ €€$G €€$1k €€$<k €€$Jk €€$Pm €€$gk €€$sk €€$‡ €€$±k €€$ä €€% k €€%k €€%#k €€%?m €€%G< €€%Mk €€%iF €€%vk €€%¾G €€%âF €€%ïk €€&)k €€&qk €€&¥; €€&Ôk €€'k €€'1R €€'fk €€'k €€'‹k €€'œS €€'Îk €€'ßk €€'ôk €€(/k €€(Ek €€(k) €€(r) €€(ýG €€)¡k €€)¬k €€)·k €€)Äk €€)ÑY €€)ÚZ €€)êk €€*k €€*k €€*.k €€*9k €€*Dk €€*iR €€+ F €€+3[ €€+i €€+™7 €€+Ê) €€+Ñ) €€,D4 €€,~6 €€,ˆ4 €€,ÚS €€-S €€-€ €€-�~ €€-Ž~ €€-š~ €€-¨~ €€-µ~ €€.*” €€.Z €€.› €€.´~ €€.˘ €€.ÒA €€.ÜB €€.ç˜ €€.øB €€.ÿ) €€/˜ €€/ ˜ €€/˜ €€/˜ €€/˜ €€/$– €€/*˜ €€/3˜ €€/:˜ €€/?˜ €€/F˜ €€/U˜ €€/a˜ €€/m˜ €€/u| €€/˜ €€/˜– €€/ž˜ €€/®˜ €€/º˜ €€/Ç– €€/Θ €€/Ö˜ €€/ݘ €€/☠€€/é˜ €€/î˜ €€/ö– €€/ü˜ €€0˜ €€0˜ €€0 ˜ €€0˜ €€0/õ €€09 €€0?˜ €€0L˜ €€0X˜ €€0`V €€0f˜ €€0n7 €€0t˜ €€0y˜ €€0�– €€0‰˜ €€0‘˜ €€0›˜ €€0¢˜ €€0§˜ €€0¸˜ €€0¿˜ €€0Ę €€0ؘ €€0Þ˜ €€0ê˜ €€0ò˜ €€0ú˜ €€0ÿ˜ €€1 * €€1˜ €€1˜ €€1%– €€11^ €€18˜ €€1J˜ €€1S˜ €€1[_ €€1a˜ €€1¶˜ €€1Û³ €€1é €€1ó© €€1ý €€28˜ €€2}| €€2�| €€2ù €€3kF €€3×È €€4ó €€4%F €€40µ €€4:7 €€4@µ €€4JÈ €€4ƒµ €€4•i €€4­i €€4¹µ €€4Ƶ €€4Óµ €€4Ý` €€4õ` €€57 €€57 €€5+; €€557 €€5Bû €€5w· €€5~· €€5®W €€62· €€6‡V €€6œF €€6ÑD €€6þ= €€7*@ €€7;D €€7TF €€7ˆ= €€7’È €€7Á= €€7æF €€8@ €€8%D €€8@7 €€8N= €€8XÈ €€8ˆF €€8Õ7 €€8ßÈ €€9= €€9)F €€9jD €€9}È €€9•7 €€9ÈH €€9ðä €€9úä €€:ä €€:Lc €€:pH €€:¿õ €€:Ê €€:ÔV €€:Þ7 €€:íõ €€:÷ €€;V €€; 7 €€;d €€;TH €€;²õ €€;½ €€;ÇV €€;Ñ7 €€;àõ €€;ê €€;ôV €€;þ7 €€<d €€<â €€7 €€>õ €€> €€>$V €€>.7 €€>Cd €€>Qe €€>df €€>Éâ €€>Ïg €€>ÚS €€?â €€? â €€?&R €€?NR €€?`ó €€?kâ €€?˜= €€?»â €€?É= €€?ÕF €€?àâ €€@â €€@F €€@%â €€@MR €€@Ÿ) €€@§W €€@É; €€@ÚG €€Ac €€A7 €€A@= €€Asc €€AÄâ €€AÏâ €€AÝâ €€Aãä €€Aòâ €€Aü÷ €€B â €€B'õ €€B1 €€B;V €€BE7 €€B[f €€Bne €€Bœâ €€B¬c €€Bûâ €€C%â €€CHR €€C€R €€C›g €€C¯â €€CÆ( €€CÕ €€Cèâ €€C÷ù €€Dâ €€DF €€D(â €€DgR €€Dˆf €€D±c €€Eâ €€E.â €€Eaâ €€E~V €€E†) €€EŽW €€E� €€E¨7 €€E³â €€EÁâ €€EÑâ €€Eñâ €€F*õ €€F9 €€FDV €€FO7 €€Faõ €€Fl €€FwV €€F‚7 €€F�d €€F¬V €€F´) €€F¼W €€FÐâ €€Fì €€G#f €€G-â €€GBâ €€Gˆ €€G™c €€H= €€H ÷ €€HV= €€HŽ@ €€H¥7 €€H¶D €€Iä €€I ä €€Iä €€I%ä €€I,ä €€I3) €€I€ä €€I‡ä €€IŽä €€I˜) €€IÓF €€Iê; €€Jl €€J„| €€J² €€JÏ| €€K+F €€KH; €€K…* €€K�* €€Ká €€LF €€L(; €€Le* €€Lp* €€L¥) €€Lâ) €€M$ €€M0T €€M: €€MJ €€MiF €€Mt €€M‘R €€M§@ €€M¹ €€MÖQ €€MÜ €€NF €€N) €€N?R €€NUP €€Nc= €€Nm €€N¹ €€O €€ON €€P[Q €€P~j €€P‡k €€P¤ €€P¶ €€PÖF €€Pá €€QR €€QfR €€Q›= €€Q½ €€RV© €€R`d €€R·V €€RÁ= €€RÚ7 €€Rñ7 €€S 7 €€S© €€S"d €€S() €€S;V €€SQd €€S[7 €€Su) €€S´V €€S¾= €€S×7 €€Sî7 €€T7 €€T[l €€T»= €€U? €€US €€U?7 €€UVm €€Us) €€U†V €€Uœd €€U¦7 €€Uº) €€V$V €€V.= €€VG7 €€V^7 €€Vv7 €€V“V €€V�7 €ˆ´,€ˆ¸,€ˆ¼,€ˆÀ,€ˆÄ,€ˆÈ,€ˆÌ,€ˆè,€ˆø,€ˆ*€ˆ*€ˆ *€ˆ*€ˆ,€ˆ *€ˆ$*€ˆ4,€ˆ<*€ˆ@*€ˆP,€ˆl,€ˆt,€ˆx,€ˆ|,€ˆ€,€ˆ�U€ˆ”U€ˆ˜U€ˆœU€ˆ U€ˆ¤U€ˆ¬S€ˆ°S€ˆ´S€ˆ¸S€ˆ¼S€ˆÀS€ˆÄS€ˆÈS€ˆÌS€ˆÐS€ˆÔS€ˆØS€ˆÜS€ˆàS€ˆäS€ˆèS€ˆìS€ˆðS€ˆôS€ˆøS€ˆüS€ˆS€ˆS€ˆS€ˆ S€ˆS€ˆS€ˆS€ˆS€ˆ S€ˆ$S€ˆ(S€ˆ,S€ˆ0S€ˆ4S€ˆ$m€ˆ$m€ˆ$ m€ˆ$$m€ˆ$(m€ˆ$,m€ˆ$0m€ˆ$4m€ˆ$8m€ˆ$<k€ˆ$@k€ˆ$Dk€ˆ$Hk€ˆ$Lk€ˆ$Pk€ˆ$Tk€ˆ$Xk€ˆ$\k€ˆ$`k€ˆ$dk€ˆ$hk€ˆ$lk€ˆ$pk€ˆ'l€€ˆ'p€€ˆ't€€ˆ'x€€ˆ'|€€ˆ'€€€ˆ(𘀈(ô˜€ˆ(ø˜€ˆ(ü˜€ˆ)˜€ˆ)˜€ˆ)d–€ˆ)h–€ˆ)l–€ˆ)p–€ˆ*Ü·€ˆ*à·€ˆ*ä·€ˆ*è·€ˆ*ì·€ˆ*𷀈*øµ€ˆ*üµ€ˆ+µ€ˆ+µ€ˆ+µ€ˆ+ µ€ˆ+µ€ˆ+µ€ˆ+µ€ˆ-è䀈-ì䀈-ð䀈-ô䀈-øä€ˆ-ü䀈/Ü /à /ä /è /ì /ð /ô /øâ€ˆ/ü 0 0 0< 0@ 0D 0H 0L 0P 3€€ˆ3„€ˆ3ˆ€ˆ3Œ€ˆ3�€ˆ3”€ˆ3˜ÿ€ˆ3œÿ€ˆ3 ÿ€ˆ3¤ÿ€ˆ3¨ÿ€ˆ3¬ÿ€ˆ3°ÿ€ˆ3´ÿ€ˆ3¸ÿ€ˆ3¼ÿ€ˆ3Àÿ€ˆ3Äÿ€ˆ3Èÿ€ˆ3Ìÿ€ˆ3Ðÿ€ˆ3Ôÿ€ˆ3Øÿ€ˆ3Üÿ€ˆ3àÿ€ˆ3äÿ€ˆ5<€ˆ5@€ˆ5D€ˆ5H€ˆ5L€ˆ5P.file=ÿþgtcp_main.ctcpinit€€Ð 9tcpopen€€ $ €€® Dtcpclose€€ô$¥ €€š  tcpiput€€ž$0tcpisrv€€Î$tcpoput€€Î$y€€H$btcposrv€€¬$�$€€0 “tcpsend€€Ä$xtcpbiput€€ >$‰1€€ Ê ztcpbisrv€€ D$˜ ;€€ Ü "I€€ þ 6$V€€ 4 ž&d€€ Ò 5(o€€ $Å*.text€€Ð ¥.data€ˆ´Ü.commentÄS_inet€ˆ´S_socket€ˆ¸S_if€ˆ¼S_in€ˆÀS_in_var€ˆÄS_ip€ˆÈ~€ˆÌtcp_info€ˆäŠ€ˆôtcprinit€ˆtcpwinit€ˆ ”€ˆ<ž€ˆX.file_ÿþgtcp_input.c¨€€ Ð "Aµ€€ òh�CÀ€€’ ³Etiu_resp€€F nGÊ€€¶ €IØ€€6 -K怀d$4Mð€€"˜ )Oû€€"Â$kQ€€#0$™S.text€€ Ðü£ .data€ˆ� ˆ).commentÄ´S_inet€ˆ�S_socket€ˆ”S_if€ˆ˜S_in_var€ˆœS_in€ˆ S_ip€ˆ¤.filezÿþgtcp_ioc.c€€#Ì Gc€€)$Ûe(€€*ô$Ég6€€+¾-yiC€€,:hck.text€€#ÌÔ>.data€ˆ$T.commentx0S_inet€ˆ$S_socket€ˆ$S_if€ˆ$ S_in€ˆ$$S_in_var€ˆ$(S_ip€ˆ$,S_icmp€ˆ$0O€ˆ$4S_un€ˆ$8.fileŠÿþgtcp_output.c[€€, $~.text€€,  .data€ˆ'l„.comment ¨°S_inet€ˆ'lS_socket€ˆ'pS_if€ˆ'tS_in€ˆ'xS_in_var€ˆ'|S_ip€ˆ'€.file£ÿþgtcp_timer.cf€€.¼ ŠŽq€€1F '�~€€1p )’�€€1œ p”š€€3 J–.text€€.¼œS.data€ˆ(ðì .comment XìS_inet€ˆ(ðS_socket€ˆ(ôS_if€ˆ(øS_in€ˆ(üS_in_var€ˆ)S_ip€ˆ)¨€ˆ).fileÂÿþgtcp_tn.c²€€3X Œ§¿€€3ähÿ©Ê€€5ä «tn_data€€6æ ½­Ú€€7¦ ï倀8l €±8î ­³ý€€9œ 7µ.text€€3X|2.data€ˆ*Ü .commentD°S_inet€ˆ*ÜS_socket€ˆ*àS_if€ˆ*äS_in€ˆ*èS_in_var€ˆ*ìS_ip€ˆ*ð€ˆ*ô.fileñÿþgtcp_tu.ctufsm€€9Ô$TÆ€€;*, Ètu_fatal€€;6,äÊ€€< ¬Ì)€€<È ÑÎ4€€=œ,Ðtu_bind€€>œ,¿Ò>€€A^,3ÔI€€A”,LÖV€€Bâ,ùØa€€DÜ,Úl€€Gâ,jÜtu_data€€HN,Þv€€Hh,aàtcp_bind€€HÊ$ùâ.text€€9Ôð›.data€ˆ-è˜.commentô0S_inet€ˆ-èS_socket€ˆ-ìS_if€ˆ-ðS_in€ˆ-ôS_in_var€ˆ-øS_ip€ˆ-ü€€ˆ0Ž€ˆ0›€ˆ0T.file ÿþgtcp_tv.ctv_popen€€IÄhŒõtv_abort€€JP$G÷tv_close€€Jš$Rùtv_aopen€€Jì$ ûtv_sinit€€Kö$¨ý¨€€Lž$Tÿ.text€€IÄ0.data€ˆ3€¼.comment$ìS_inet€ˆ3€S_socket€ˆ3„S_if€ˆ3ˆS_in€ˆ3ŒS_in_var€ˆ3�S_ip€ˆ3”.file)ÿþgtcp_tw.ctw_send€€Lô$tw_drop€€R qtw_close€€Rz tw_clean€€SŽ �¶€€T h³tw_acked€€TÔ •tw_rmtcb€€Ul `Á€€UÎ ä.text€€Lô ÀD.data€ˆ5<8.comment°S_inet€ˆ5<S_socket€ˆ5@S_if€ˆ5DS_in€ˆ5HS_in_var€ˆ5LS_ip€ˆ5Ptcb tcp_iss€ˆÐtcpbÑÛ€ˆÔ逈Øø€ˆÜ€ˆàtcpinfo€ˆtMINORtcpdutcpd_cntfreebputctlsleepflushqw_bzeroprintffreemsgcanputgetqmsgdsize!.endflushputqqenableallocbqreplyputctl1?Nmaxtcpstat\€ˆ¨jz…in_cksumbcopyminadjmsgbp_copyc_deqc_enq�ž¬ºÄ€ˆ'„Ñ€ˆ)0timeoutÝcopyb瀈.ñ€ˆ/Üþwakeupupflush #€€G}5€ˆ5Tip_ttlip_tosdupbputbqBtcpbclose_tcpclosetcp_top_puttcpmuxnotifytcpmuxacktcp_getmyaddrtcp_free_tpdtcp_ctlnotifytcp_quenchtcp_gethisaddrS_inetioctltcpb_infotcpbrinittcpbwinittiu_timewaittiu_lookuptcp_inputtiu_dooptionstiu_ipoptionstiu_reasstiu_dropittiu_adjmsgtcp_bestmsstcp_ioctltcp_sockopttcp_ipoptionsfind_tcpportfind_tcpafuS_inetioctltcp_outputtcptimeouttcpuntimeouttcp_canceltimerstcp_timerstw_setpersisttcptimeIDtn_connectedtn_connreqtn_disconnectedtn_exdata1tn_exdatatn_orddisconntn_usrmsgtcp_connidtu_nonfataltu_cleancbtu_getinfotu_unbindtu_optmgmttu_disconreqtu_connreqtu_connrestu_ordreltu_exdataprim_to_eventTCP_info_acktcp_bindaddrtv_check_addrtw_dupmsgatw_drop_floatertcpd_headtcp_keepalivecanput_tcpisrvcanput_tcpsendcanput_dlsndatatcpwindowtcp_run_servtcp_need_timeoutip_icmp_getdstinetctlerrmaptcpnodelayackip_stripoptionsip_swapsrcpullupmsgmy_hosts_classtcp_maxrcvwintcp_minrcvwinipopt_outtcp_outflagstcp_backoffuntimeouttufsm_tbltufsm_actionup_error_ackup_ok_acktcp_maxconindtu_cres_bad_statetcp_initoptsp$V ›X9.text DŒ¸ƒ .data D DÐ ÐÖ @.comment    IœLüOZ@¬oX@¨ @œO@„@Ypp„K@È Kp„@dp„Y@(Àp+„Y@üOÀ@¬_¸@ @,Ìü„Y@€Àpº_ÿýÙp„Y@(Àp+„Y@üOÀ@¬_¸@ @,Ìü„Y@€Àpº_ÿþÙpÜZ@ @,Ìüp„K@„dKpÉèL IF„OH„OG O®  ,Ìô„@T p€F{#:WºoïWp(È4p  H,Ìü¯ÿœoXHœ G�F<FKØÉôL H G F IpI„O@€A{(À4pw�AœoX@<AKí<AK T ,Ìü€X pÉèL IpppE„ZE(X pw_ O®  �X p,Ìô„OF„OH„@T p€G{#:VºoïVp(È4p  H,Ìü¯OþœoXH�Gœ F<GKØÔæE@¸o@‡€@º_ÿEÜE@E†EE<æEK‡ÚpÉøL H G F E I†EAªoXAœOA(Á4p‡ÚpÉøL H G F E I†_$Á8p†_Á:p†;Á>p„O„Á4p²Á@p†E@ª @œO@†Pp:Á@  A,ÌüÉøL H G F E IG„ZAÔæA@¸o@‡€@º_ÿAÜA@A†AA†AGª GœOG†AHªoXHœOHºýWp:È@†ÈB@ @ ,ÌøºoïÈ@p H ,Ìø:WwD€È4p€B„OA{(Á4pw�BœoXA<BKí<BK T ,Ìü€X pÉðL H G IG„ZAÔæA@¸o@‡€@º_ÿAÜA@A†AA†AHªoXHœOH:È@0†AGª GœOG:Wi*Çp#†Ç@ @,Ìü(@K‚ÇpÉðL H G I ,Ìü(@C4ÉðL H G I:W‡_ÈÚpÉðL H G IàÈ ,Ìø(ÈpÕ:È@_wÍ{g<_€@wK8âÈ:ä,(\ p€\ p @,Ìü(@C:{]„\ p{. @,Ìü(@C €\ p{< @,Ìü(@Kë€\ p(øp(ÈpàÈ,Ìü„@@K$úºoßÈ@p:È@o@ºo¿È@pàÈ,Ìü:È@_ (Èpwº_ÿßÈ@pàÈ:,ÌüÉðL H G IpppCœ_L„ZAÔæA@¸o@‡€@ú_ÿAHÜH@H¨oXHœOHÔæA@¸o@‡€@ú_ÿADÜD@D¨ DœOD€C:È@wYL H G F E D C I ø _,Ìø„@EY@ @ E „@G,Ìô+Úpw;ÜEGF{T:TBüGF@¼@ôpüGF@œ@øpüGF@¼@üp‡_ÈÚpYL H G F E D C IàÈ ,Ìø:T w$ð(Xpw „G©p{‡¹@ @ H�©p,Ìø„E@”E(@Gã  H,Ìø H,ÌüYL H G F E D C I+ÈEpw$´<_þXK} H,Ìü:LüGF@¼@ôpüGF@œ@øpüGF@¼@üp(C$‡_ÈÚpYL H G F E D C I H ,ÌøYL H G F E D C I‡W@p�G(È,p08âÈ8ä ¸o@ø_ÿ@ãØ,p–È0p H ÐãÈD@„€@,ÌøP�C:È@_ (Èpwº_ÿßÈ@pàÈ:,Ìü:Wo@ ºo¿Wp†Çp<_ÈÈC²WpÉðL H G IºoïWp² È@p H,Ìü¯±ö:È@o@uøâÈ<@Ð@@<€ÈGaºo¿È@pàÈ,ÌüÉðL H G I²_È@p²o@WpÉðL H G I²È@pº_ÿ¿È@p{:È@º_÷È@p(ÈpO àÈ,ÌüÉðL H G I²È@p O H ,ÌôÉðL H G IppEÔær@¸o@‡€@ú_ÿrHÜH@H¨oXHœOHÔær@¸o@‡€@ú_ÿrAœA@¨ @œO@„@G:È@w€@ÉøL H G F E Ip„K@p°OàKp„@E„t@<@U<@w7:W Y(XpT„ÇFw$, üOF@¬_¸@<@Æ $, ²_Wpp„K@„EKp€@ÉøL H G F E I(Èp$:È@_wp„K@„EKp„@ÉøL H G F E I„ÇFüOF@¬_¸@<@Æ w ²_Wp{ „x@¨_¸@œO@„@Çp{Š„x@¨_¸@œO@„@Çpztÿp „ © Ì õôÁ Œè £ · ±È Ú @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)tty_pty.h (TWG) 1.6 87/03/12 @(#)inetioctl.h (TWG) 2.8.1.5 88/12/08 @(#)ip.h (TWG) 2.8 88/06/22 @(#)tty_ptc.c 3.7 22:02:08 - 89/02/02@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/immu.h.sl 1.1 3.0 09/25/85 7594 @(#)/usr/include/sys/fs/s5dir.h.sl 1.2 3.0 11/06/85 10453 @(#)/usr/include/sys/region.h.sl 1.4 3.1 09/04/86 1855 AT&T-SF@(#)/usr/include/sys/psw.h.sl 1.1 3.0 09/25/85 18557 @(#)/usr/include/sys/pcb.h.sl 1.1 3.0 09/25/85 31176 @(#)/usr/include/sys/termio.h.sl 1.2 3.1 04/16/86 26218 AT&T-SF@(#)/usr/include/sys/proc.h.sl 1.8 3.1 10/02/86 46632 AT&T-SF@(#)/usr/include/sys/signal.h.sl 1.4 3.0 12/06/85 45123 @(#)/usr/include/sys/file.h.sl 1.3 3.1 04/16/86 9268 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/user.h.sl 1.9 3.1 09/04/86 49769 AT&T-SF@(#)/usr/include/sys/tty.h.sl 1.2 3.1 04/16/86 48999 AT&T-SF@(#)/usr/include/sys/ttold.h.sl 1.1 3.0 09/25/85 49383 @(#)/usr/include/sys/conf.h.sl 1.2 3.0 10/07/85 41226 @(#)/usr/include/sys/buf.h.sl 1.4 3.1 08/01/86 16552 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF# $ ;% M& m% & ›& ²# ¹$ À Ì' Ó ÿ( # /( 8( A I) O e n x �' ‡$ Ž# – Â( Ô* ç( ò+ # + F Z$ o& ’* «$ ¹# Ô, æ- ÷#  ( (  &) , L* f# y$ “. °. Í+ æ/    . , 9. C P. Z a+ u0 € ž& ¾& å* ú#  * $ ?+ K1 b2 h+ �+ �+ ™+ £+ Ã/ Î ñ3 3 & . ?& E+ S+ _+ k+ v + ž- å4 ø+ &* ;# J* ^$ x … ’ Ÿ ¬ » Ì5 ÷5 )+ Y6 q0 ‹# š$ © · ½ Õ0 & h7 }& Ë& á8 í' * # 0* C$ ‘ —% ª ý% % 6% D H L P ` d h l p t x | €.fileÿþgtty_ptc.c$ ®ptctimer® e. Gptcopen^ $ ptcclose‚ º ptcread< ‘ptcwriteÐ Bptcioctl mptsproc„ xE þ$E.text Dƒ .data DÐ .comment S_inet D H LS_ip P Tfirst XseenQESC \pt_ttypt_ioctlprocwakeuptimeoutpty_cnt;MINORusignalttyflushpasscsleepgetcminiomoveputclineswcopyinptsioctlttlowatttrstrtOS_tty_ptyS_inetioctlptytimeIDptcwakeupptyuntimeoutuntimeoutptcselectp$V ¾ „$.text Œ ¤, .data   , \@.comment@@ØÌG„ZBÔæB@¸o@‡€@ú_ÿBGÜG@G¨ GœOGÔæB@¸o@‡€@ú_ÿBAœA@<@K‡ÚpÉðL H G IÔæB@¸o@‡€@ú_ÿBHÜH@H¨oXHœOH:È@w‚Èp H,Ìü(È4p²È@p{²È@p H ,Ìø:È@ë HÐãÈD@„€@,ÌüP²WpÉðL H G IpppG„ZAÔæA@¸o@‡€@ú_ÿAGÜG@G¨ GœOGÔæA@¸o@‡€@º_ÿAœA@¨oX@œO@ºþWp @„@HÐãÈD@„€@,ÌüP:Ww €È4p,\ÉðL H G IpG„ZAÔæA@¸o@‡€@ú_ÿAHÜH@H¨oXHœOHÔæA@¸o@‡€@ú_ÿAGÜG@G¨ GœOG{,:‡_ÈÚpÉðL H G I H ,Ìø:W  (XpÎ{o(È4p HÐãÈD@„€@,ÌüPàÈ,ÌüÉðL H G I H,Ìü„@AK?„ô@�ôp @ A,Ìø(@ ‡Úp{”øp<XO (øpw¶<Xw  H,Ìü(XpŒ‡ÚpÉðL H G IppI„ZAÔæA@¸o@‡€@º_ÿAÜA@A¨oXAœOA(Á4p AÐãÁD@„€ @,ÌüPÉèL IpppG„tB„ZAÔæA@¸o@‡€@ú_ÿAHÜH@H¨oXHœOHÔæA@¸o@‡€@ú_ÿAGÜG@G¨ GœOG H B x |,Ìðø_âÈ8@:W_€+(@ºÇp² Çpº_ÿWp H,ÌüÉðL H G I(@wóºoßÇp²Çp²_€Wp H,Ìü{Öpp°Õø! @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)tty_pty.h (TWG) 1.6 87/03/12 @(#)inetioctl.h (TWG) 2.8.1.5 88/12/08 @(#)ip.h (TWG) 2.8 88/06/22 @(#)tty_pts.c 3.3 15:01:28 - 88/11/02@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/immu.h.sl 1.1 3.0 09/25/85 7594 @(#)/usr/include/sys/fs/s5dir.h.sl 1.2 3.0 11/06/85 10453 @(#)/usr/include/sys/region.h.sl 1.4 3.1 09/04/86 1855 AT&T-SF@(#)/usr/include/sys/psw.h.sl 1.1 3.0 09/25/85 18557 @(#)/usr/include/sys/pcb.h.sl 1.1 3.0 09/25/85 31176 @(#)/usr/include/sys/termio.h.sl 1.2 3.1 04/16/86 26218 AT&T-SF@(#)/usr/include/sys/proc.h.sl 1.8 3.1 10/02/86 46632 AT&T-SF@(#)/usr/include/sys/signal.h.sl 1.4 3.0 12/06/85 45123 @(#)/usr/include/sys/file.h.sl 1.3 3.1 04/16/86 9268 AT&T-SF@(#)/usr/include/sys/user.h.sl 1.9 3.1 09/04/86 49769 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/tty.h.sl 1.2 3.1 04/16/86 48999 AT&T-SF@(#)/usr/include/sys/ttold.h.sl 1.1 3.0 09/25/85 49383 @(#)/usr/include/sys/conf.h.sl 1.2 3.0 10/07/85 41226 @(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SF $ 4 D N i ~ Ÿ ½ Ñ ü    3 I ^ ~ “ £ · À Ì ä   ) 4 ; H! S \ h z † ¨ ¼ Ñ ÷    0 A" n# ˜#  ¤¨¬.fileÿþgtty_pts.cptsopen éptscloseì �ptsreadn (ptswrite˜ I ptsioctlä º .text ,.data  .comment@ØS_inet ¤¨S_ip¬MINORpt_ioctlpty_cntupt_ttyttinitsleeplineswwakeupgetcsubytettiocom'1S_tty_ptyS_inetioctlptyuntimeoutptcwakeupp$V I8`d.text ¸Œ-4þ .data ¸ ¸!D7 @.comment'Ð'ÐØ(\I†ì p†î p†ü p†þ pÉèL IpppFœL„ZHÔæv@¸o@‡€@Ôæv@¸o@‡€@ú_ÿvAÜA@Yp<|wl„OG„@¨8@œO@<@GS (Wp„@¨8@œO@œ8G<@G[äüOG@„@Y¬8Y<YKK‡Úp„ÿ@ÉôL H G F I(Èp„Y@ÉôL H G F I(YpKÏ<YCÆ„YG¨8GœOG„HWp„YÇpƒÇ+p„âÜà@‚Ç6p{„O€@†@Ç6p(p ²_`Ç6p€Çp€Ç p„Ü Çp„GÜ p„GÈp„GÈ8pp„K@È Kpp„@F²o@È>pp„K@„FKp„Y@ÉôL H G F ID„OF„Z@„ÀH(Èp$ñ„OG$?©.Qw<â©2Áw†Ã ©8p„CB{„CB„ÂCp(Cwª„â©8橘p„⩘à@w$i†©˜¹¤pz?ù(¹˜ph„©˜@(Àp]„©˜@<âÀ4wQ„©˜@(À,pF„©˜@„À,@„©˜A„Á,AüÁ À@,„©˜@„À,@„À ©œp„â¹ @„©˜A<âÁ ä@w �©¤p{„©˜@„À©˜p(©˜pw‚(©¤pU(Å,pO„©¨p„Å,@„Å,AüÁ À@ü©¨@©¬p„Å,@Ü©¨À @ @Ü © @ @ ©¬,Ìô„© @„©¬Àpzeø„Y@„ÀpzaþG„ZH„ÈG{  G @,Ìø¯# H,Ìü„@@wéÉðL H G IpppCœo@L„ZC„t@„À G„Fw$U(Æ pw$U„Æ @8âÀä$U„t@üÀ À@ÜÇÇA8âÆ6ä_<Ç Æw-<âÇÆ{#<Æ É(Æ pw„V@8âÀä=� p{ „ÆFp(Fw°(D  D,Ìü H,ÌüÉüL H G F E D I?Æ+ �$p{ʆÇAÜAB8âÆ6ä_ 5„âÇà@-€Çp„ÇWpƒÇp†AÇ p H B,Ìø(@ �p{…œÈ p $ ,Ìø„@Ewzmÿ„Å@‡À p„Å@„Pp„Àp„Àp€À p„Àp„Ç Ép†ÇÉpÉ@ @ÜÅ@ @ ,ÌôÜÅ Åp Å ,ÌøœÅp„HÅp(Æ p Æ ,Ìü€Æ p(D„DÆ p V E,ÌøÉüL H G F E D IF„tF„ZG„âÇHp(H$<_HC8âFäO€w„@ÉôL H G F IFPw<âHÀw†Â G{ „ÂBp(Bw·„âG@ÉôL H G F Ip!Ü""'"I"g"‰"§"Ê"óS#ÿÿ S#ÿÿ°S#ÿÿ S#ÿÿô<˜ àVt ðÒ!!! !<!X!tÿÿÿÿÿþÿÿÿþÿÿÿþxÿÿñû^± @(#)inet.h (TWG) 2.11.1.4 88/10/26 @(#)socket.h (TWG) 2.3.1.1 88/06/13 @(#)win_if.h (TWG) 2.3 88/06/16 @(#)in.h (TWG) 2.4 88/05/11 @(#)in_var.h (TWG) 2.1 87/12/09 @(#)ip.h (TWG) 2.8 88/06/22 @(#)udp.h (TWG) 2.4.1.1 88/06/13 @(#)inetioctl.h (TWG) 2.8.1.5 88/12/08 @(#)un.h (TWG) 2.1 88/06/13 udpudpudpudpudpopen: open chan %x udpclose: %x udpisrv: Not idle, chan %x, state %x udpoput: bind nonfatal retcode 0x%xudp fatal unbind %x udpoput: unknown PROTO %x udpoput: link to ip again udp bottom busy.. udpoput: ioctl unlink what? udpoput: no dest addr for %x udpoput:no src for %x udpoput: GETPORT: dev = %d, ino = %dudpoput: GETFILE: port = 0%xudpoput: GETFILE: successudpoput: GETFILE: no matchudpoput: unknown bp type %x udp_output: ip not linked/full, drop packet udp_output: No Data.udp_output: no dest addr for %x udp_output: sending to other than connected peer. Dropped udp_output: no ip src addr for %x udp_output: allocb failed for IP argumentsupd_output: Non fatal error %d udpbiput: unkown M_CTL type %x udpbiput: unkown message type %x udp_input: no buffer for incoming IP optionsudp_input: dropping:connected-peer=%x.%xudp_input: came from %x.%x udp_input: sent up from %x.%x udp_input: log code %x udp_getmyaddr: out of buffer udp_gethisaddr: out of buffer udp_sockopt: nonfatal error %0x udp_sendipopts: out of buffer udp_ipoptions: error 0x%x from ipfind_udppoñòóôõö÷rt: can't find port for dev = %d inode = %dfind_udpport: dev = %d, inode = %d, port = %d@(#)udp.c 2.12.1.9 01:11:48 - 88/12/09@(#)/usr/include/sys/param.h.sl 1.4 3.1 10/02/86 28518 AT&T-SF@(#)/usr/include/sys/fs/s5param.h.sl 1.3 3.0 11/06/85 48148 @(#)/usr/include/sys/types.h.sl 1.3 3.1 06/02/86 48113 AT&T-SF@(#)/usr/include/sys/inline.h.sl 1.1 3.0 09/25/85 46151 @(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/stream.h.sl 1.5 3.1 06/02/86 24300 AT&T-SF@(#)/usr/include/sys/stropts.h.sl 1.3 3.0 12/06/85 35091 @(#)/usr/include/sys/tihdr.h.sl 1.1 3.0 09/25/85 48383 @(#)/usr/include/sys/tiuser.h.sl 1.3 3.1 09/04/86 2842 AT&T-SF@(#)/usr/include/sys/strlog.h.sl 1.1 3.0 09/25/85 39304 @(#)/usr/include/sys/immu.h.sl 1.1 3.0 09/25/85 7594 @(#)/usr/include/sys/fs/s5dir.h.sl 1.2 3.0 11/06/85 10453 @(#)/usr/include/sys/region.h.sl 1.4 3.1 09/04/86 1855 AT&T-SF@(#)/usr/include/sys/proc.h.sl 1.8 3.1 10/02/86 46632 AT&T-SF@(#)/usr/include/sys/psw.h.sl 1.1 3.0 09/25/85 18557 @(#)/usr/include/sys/pcb.h.sl 1.1 3.0 09/25/85 31176 @(#)/usr/include/sys/signal.h.sl 1.4 3.0 12/06/85 45123 @(#)/usr/include/sys/user.h.sl 1.9 3.1 09/04/86 49769 AT&T-SF@(#)/usr/include/sys/debug.h.sl 1.3 3.0 02/07/86 7480 AT&T-SF@(#)/usr/include/sys/sysmacros.h.sl 1.8 3.1 09/04/86 59664 AT&T-SFE * E * E !* (E -* OF _F vG }H ‡G ˜H ¢G ±G ¿H ÉI ûH  G I ;J S* ]* œ9 °( ¶G ½( Í* ùK  K K ,K 8L AH KG ]( qM ›N éK ó* K 0K AK RK ^L }* ¦K ·K ÈK ÙK åL O 4P BQ v( †( š( ¦R Î( Ù( ç( í* S =S IM T( i* ¿T ÉU åS ( )( H( U( sV ¢V ×( ýM ( 0V cS •W Ÿ( ¥( ³S ¿M Ê( V -L dX {M »S ÛY 9 ( ( +( 3( @( H( U( g( }( ‹( àM N …( ªM ÛN C( O( ^( o( ºL åN ( 1( Z( ŒV È( Ô( ã( ( -( ?( R( Š( ’( ¡( ®( ¿( Ñ( ø* ÿ( ( !( -( =( nV ØL ý( '9 =( _M j* rZ ÃS ã( þM  * Z _S ”M ¢( çV "( I( x( ‰( ›( ¨* ²( ¼S ý[ €( VV �Q ¸9 Á( Í( ß( ( ( &M 1( KV UK b\ Â( ØM è* ðZ ;S P( p( ‚( ˜M ¨* °Z ùS S ( T] €^ ‰_ §( ÇM Ò( ÜS ëM `S ­V ÷V ZM �N ò(  ( RT ŠN ”S ñN %Q [M ˆ` ¡a ¸b Â8 Û* $8 >K HS e8  ] ª8 ¾M  V !L <K UT ¦* ±* ¸* Á* Ì* * * _M j* rZ ºS ÚM å* íZ 6S Ã( á( ûV ŠM ³c å9 ñ9 "K T* ¸* ¼* À* Ä* È* Ì* Ð* Ô* Ø* ä* ô*!*!*!$(!((!,(!4*!<(!@(!P*!X(!\(!l*!ˆ*!�*!”*!˜*!œ*!È(!Ì(!Ð(!Ô(.fileÿþgudp.cudpinit 9udpopen<$\udpclose˜$Ûov | udpisrvô$` udpoputV$udposrvt$/©¦ ¢´J …udpbiputÒ$ÓÁ¦ hudpbisrv$'Ë: 0udp_bindj$çúR.} Ð {"�N$$p$Ø&œ H-o(.text ¸þ.data ¸ .comment'ÐØS_inet ¸S_socket ¼S_if ÀS_in ÄS_in_var ÈS_ip ÌS_udp Ð ÔS_un Ø Üudpstatudpb à$ ð.!9!udprinit! udpwinit!<D!XN!tudpinfo!�X! udpport!ØeMINORudpdudpd_cntuudpcksumfreebw_bzeroallocbqreplyflushqcanputgetqendflushfreemsgputqqenablebcopyyupflush†printfiocreplymsgdsizein_cksumip_ttlip_tosÕåð%/S_inetioctludpd_headudp_rinfoudp_winfoudpb_rinfoudpb_winfoudpbrinitudpbwinitUDP_info_ackudpwindow_udpcloseup_error_ackup_ok_ackudp_sockoptfind_udpportudp_outputudpmuxnotifyudpmuxackudp_inputip_stripoptionsip_swapsrcpullupmsgudp_getmyaddrudp_gethisaddrudp_ipoptionsipopt_out...ftp.h inet.h!nameser.h"telnet.h#tftp.h#ifndef IN_SCCS_ID static char *S_ftp = " @(#)ftp.h (TWG) 1.4 87/01/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* static char BSD_ftp[] = "@(#) ftp.h 4.1 83/01/13"; */ /* * Definitions for FTP * See RFC-765 */ /* * Reply codes. */ #define PRELIM 1 /* positive preliminary */ #define COMPLETE 2 /* positive completion */ #define CONTINUE 3 /* positive intermediate */ #define TRANSIENT 4 /* transient negative completion */ #define ERROR 5 /* permanent negative completion */ /* * Type codes */ #define TYPE_A 1 /* ASCII */ #define TYPE_E 2 /* EBCDIC */ #define TYPE_I 3 /* image */ #define TYPE_L 4 /* local byte size */ /* * Form codes */ #define FORM_N 1 /* non-print */ #define FORM_T 2 /* telnet format effectors */ #define FORM_C 3 /* carriage control (ASA) */ /* * Structure codes */ #define STRU_F 1 /* file (no record structure) */ #define STRU_R 2 /* record structure */ #define STRU_P 3 /* page structure */ /* * Mode types */ #define MODE_S 1 /* stream */ #define MODE_B 2 /* block */ #define MODE_C 3 /* compressed */ /* * Record Tokens */ #define REC_ESC '\377' /* Record-mode Escape */ #define REC_EOR '\001' /* Record-mode End-of-Record */ #define REC_EOF '\002' /* Record-mode End-of-File */ /* * Block Header */ #define BLK_EOR 0x80 /* Block is End-of-Record */ #define BLK_EOF 0x40 /* Block is End-of-File */ #define BLK_ERRORS 0x20 /* Block is suspected of containing errors */ #define BLK_RESTART 0x10 /* Block is Restart Marker */ #define BLK_BYTECOUNT 2 /* Bytes in this block */ #ifndef IN_SCCS_ID static char *S_arpa_inet = " @(#)inet.h (TWG) 1.5 87/01/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * External definitions for * functions in inet(3N) */ /*struct in_addr inet_addr(); */ unsigned long inet_addr(); char *inet_ntoa(); struct in_addr inet_makeaddr(); unsigned long inet_network(); #ifndef IN_SCCS_ID static char *S_nameser = " @(#)nameser.h (TWG) 2.4 88/05/03 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Copyright (c) 1983 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)nameser.h 5.15 (Berkeley) 2/12/87 */ #define BIT_ZERO_ON_LEFT /* * Define constants based on rfc883 */ #define PACKETSZ 512 /* maximum packet size */ #define MAXDNAME 256 /* maximum domain name */ #define MAXCDNAME 255 /* maximum compressed domain name */ #define MAXLABEL 63 /* maximum length of domain label */ /* Number of bytes of fixed size data in query structure */ #define QFIXEDSZ 4 /* number of bytes of fixed size data in resource record */ #define RRFIXEDSZ 10 /* * Internet nameserver port number */ #define NAMESERVER_PORT 53 /* * Currently defined opcodes */ #define QUERY 0x0 /* standard query */ #define IQUERY 0x1 /* inverse query */ #define STATUS 0x2 /* nameserver status query */ /*#define xxx 0x3 /* 0x3 reserved */ /* non standard */ #define UPDATEA 0x9 /* add resource record */ #define UPDATED 0xa /* delete a specific resource record */ #define UPDATEDA 0xb /* delete all nemed resource record */ #define UPDATEM 0xc /* modify a specific resource record */ #define UPDATEMA 0xd /* modify all named resource record */ #define ZONEINIT 0xe /* initial zone transfer */ #define ZONEREF 0xf /* incremental zone referesh */ /* * Currently defined response codes */ #define NOERROR 0 /* no error */ #define FORMERR 1 /* format error */ #define SERVFAIL 2 /* server failure */ #define NXDOMAIN 3 /* non existent domain */ #define NOTIMP 4 /* not implemented */ #define REFUSED 5 /* query refused */ /* non standard */ #define NOCHANGE 0xf /* update failed to change db */ /* * Type values for resources and queries */ #define T_A 1 /* host address */ #define T_NS 2 /* authoritative server */ #define T_MD 3 /* mail destination */ #define T_MF 4 /* mail forwarder */ #define T_CNAME 5 /* connonical name */ #define T_SOA 6 /* start of authority zone */ #define T_MB 7 /* mailbox domain name */ #define T_MG 8 /* mail group member */ #define T_MR 9 /* mail rename name */ #define T_NULL 10 /* null resource record */ #define T_WKS 11 /* well known service */ #define T_PTR 12 /* domain name pointer */ #define T_HINFO 13 /* host information */ #define T_MINFO 14 /* mailbox information */ #define T_MX 15 /* mail routing information */ /* non standard */ #define T_UINFO 100 /* user (finger) information */ #define T_UID 101 /* user ID */ #define T_GID 102 /* group ID */ #define T_UNSPEC 103 /* Unspecified format (binary data) */ /* Query type values which do not appear in resource records */ #define T_AXFR 252 /* transfer zone of authority */ #define T_MAILB 253 /* transfer mailbox records */ #define T_MAILA 254 /* transfer mail agent records */ #define T_ANY 255 /* wildcard match */ /* * Values for class field */ #define C_IN 1 /* the arpa internet */ #define C_CHAOS 3 /* for chaos net at MIT */ /* Query class values which do not appear in resource records */ #define C_ANY 255 /* wildcard match */ /* * Status return codes for T_UNSPEC conversion routines */ #define CONV_SUCCESS 0 #define CONV_OVERFLOW -1 #define CONV_BADFMT -2 #define CONV_BADCKSUM -3 #define CONV_BADBUFLEN -4 /* * Structure for query header, the order of the fields is machine and * compiler dependent, in our case, the bits within a byte are assignd * least significant first, while the order of transmition is most * significant first. This requires a somewhat confusing rearrangement. */ typedef struct { u_short id; /* query identification number */ #if defined (sun) || defined (sel) || defined (pyr) || defined (is68k) \ || defined (tahoe) || defined (BIT_ZERO_ON_LEFT) /* Bit zero on left: Gould and similar architectures */ /* fields in third byte */ u_char qr:1; /* response flag */ u_char opcode:4; /* purpose of message */ u_char aa:1; /* authoritive answer */ u_char tc:1; /* truncated message */ u_char rd:1; /* recursion desired */ /* fields in fourth byte */ u_char ra:1; /* recursion available */ u_char pr:1; /* primary server required (non standard) */ u_char unused:2; /* unused bits */ u_char rcode:4; /* response code */ #else #if defined (vax) || defined(ns32000) || defined (BIT_ZERO_ON_RIGHT) || defined (THREEB2) /* Bit zero on right: VAX */ /* fields in third byte */ u_char rd:1; /* recursion desired */ u_char tc:1; /* truncated message */ u_char aa:1; /* authoritive answer */ u_char opcode:4; /* purpose of message */ u_char qr:1; /* response flag */ /* fields in fourth byte */ u_char rcode:4; /* response code */ u_char unused:2; /* unused bits */ u_char pr:1; /* primary server required (non standard) */ u_char ra:1; /* recursion available */ #else /* you must determine what the correct bit order is for your compiler */ UNDEFINED_BIT_ORDER; #endif #endif /* remaining bytes */ u_short qdcount; /* number of question entries */ u_short ancount; /* number of answer entries */ u_short nscount; /* number of authority entries */ u_short arcount; /* number of resource entries */ } HEADER; /* * Defines for handling compressed domain names */ #define INDIR_MASK 0xc0 /* * Structure for passing resource records around. */ struct rrec { short r_zone; /* zone number */ short r_class; /* class number */ short r_type; /* type number */ u_long r_ttl; /* time to live */ int r_size; /* size of data area */ char *r_data; /* pointer to data */ }; extern u_short _getshort(); extern u_long _getlong(); /* * Inline versions of get/put short/long. * Pointer is advanced; we assume that both arguments * are lvalues and will already be in registers. * cp MUST be u_char *. */ #define GETSHORT(s, cp) { \ (s) = *(cp)++ << 8; \ (s) |= *(cp)++; \ } #define GETLONG(l, cp) { \ (l) = *(cp)++ << 8; \ (l) |= *(cp)++; (l) <<= 8; \ (l) |= *(cp)++; (l) <<= 8; \ (l) |= *(cp)++; \ } #define PUTSHORT(s, cp) { \ *(cp)++ = (s) >> 8; \ *(cp)++ = (s); \ } /* * Warning: PUTLONG destroys its first argument. */ #define PUTLONG(l, cp) { \ (cp)[3] = l; \ (cp)[2] = (l >>= 8); \ (cp)[1] = (l >>= 8); \ (cp)[0] = l >> 8; \ (cp) += sizeof(u_long); \ } #ifndef IN_SCCS_ID static char *S_telnet = " @(#)telnet.h (TWG) 1.4 87/01/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* telnet.h 4.4 82/03/16 */ /* * Definitions for the TELNET protocol. */ #define IAC 255 /* interpret as command: */ #define DONT 254 /* you are not to use option */ #define DO 253 /* please, you use option */ #define WONT 252 /* I won't use option */ #define WILL 251 /* I will use option */ #define SB 250 /* interpret as subnegotiation */ #define GA 249 /* you may reverse the line */ #define EL 248 /* erase the current line */ #define EC 247 /* erase the current character */ #define AYT 246 /* are you there */ #define AO 245 /* abort output--but let prog finish */ #define IP 244 /* interrupt process--permanently */ #define BREAK 243 /* break */ #define DM 242 /* data mark--for connect. cleaning */ #define NOP 241 /* nop */ #define SE 240 /* end sub negotiation */ #define SYNCH 242 /* for telfunc calls */ /* telnet options */ #define TELOPT_BINARY 0 /* 8-bit data path */ #define TELOPT_ECHO 1 /* echo */ #define TELOPT_RCP 2 /* prepare to reconnect */ #define TELOPT_SGA 3 /* suppress go ahead */ #define TELOPT_NAMS 4 /* approximate message size */ #define TELOPT_STATUS 5 /* give status */ #define TELOPT_TM 6 /* timing mark */ #define TELOPT_RCTE 7 /* remote controlled transmission and echo */ #define TELOPT_NAOL 8 /* negotiate about output line width */ #define TELOPT_NAOP 9 /* negotiate about output page size */ #define TELOPT_NAOCRD 10 /* negotiate about CR disposition */ #define TELOPT_NAOHTS 11 /* negotiate about horizontal tabstops */ #define TELOPT_NAOHTD 12 /* negotiate about horizontal tab disposition */ #define TELOPT_NAOFFD 13 /* negotiate about formfeed disposition */ #define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */ #define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */ #define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */ #define TELOPT_XASCII 17 /* extended ascic character set */ #define TELOPT_LOGOUT 18 /* force logout */ #define TELOPT_BM 19 /* byte macro */ #define TELOPT_DET 20 /* data entry terminal */ #define TELOPT_SUPDUP 21 /* supdup protocol */ #define TELOPT_EXOPL 255 /* extended-options-list */ #define IS 0 /* sub negotiation of status option */ #define SEND 1 /* sub negotiation of status option */ #ifdef TELCMDS char *telcmds[] = { "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC", "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC", }; #endif #ifdef TELOPTS char *telopts[] = { "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME", "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP", "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS", "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO", "DATA ENTRY TERMINAL", "SUPDUP" }; #endif #ifndef IN_SCCS_ID static char *S_tftp = " @(#)tftp.h (TWG) 1.4 87/01/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* tftp.h 4.2 83/06/11 */ /* * Trivial File Transfer Protocol (IEN-133) */ #define SEGSIZE 512 /* data segment size */ /* * Packet types. */ #define RRQ 01 /* read request */ #define WRQ 02 /* write request */ #define DATA 03 /* data packet */ #define ACK 04 /* acknowledgement */ #define ERROR 05 /* error code */ #ifndef vax struct tftphdr { short th_opcode; /* packet type */ short th_block; /* block # */ char th_data[1]; /* data or error string */ }; struct TFtphdr { short TH_opcode; /* packet type */ char th_stuff[1]; /* request packet stuff */ }; #define th_msg th_data #define th_code th_block #else struct tftphdr { short th_opcode; /* packet type */ union { short tu_block; /* block # */ short tu_code; /* error code */ char tu_stuff[1]; /* request packet stuff */ } th_u; char th_data[1]; /* data or error string */ }; #define th_block th_u.tu_block #define th_code th_u.tu_code #define th_stuff th_u.tu_stuff #define th_msg th_data #endif /* vax */ /* * Error codes. */ #define EUNDEF 0 /* not defined */ #define ENOTFOUND 1 /* file not found */ #define EACCESS 2 /* access violation */ #define ENOSPACE 3 /* disk full or allocation exceeded */ #define EBADOP 4 /* illegal TFTP operation */ #define EBADID 5 /* unknown transfer ID */ #define EEXISTS 6 /* file already exists */ #define ENOUSER 7 /* no such user */ $...%if_imp.h&if_imphost.h#ifndef IN_SCCS_ID static char *S_if_imp = " @(#)if_imp.h (TWG) 1.4 87/01/12 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright (c) 1985 The Wollongong Group, Inc. All Rights Reserved */ /* if_imp.h 6.1 83/07/29 */ /* * Structure of IMP 1822 long leader. */ struct control_leader { u_char dl_format; /* leader format */ u_char dl_network; /* src/dest network */ u_char dl_flags; /* leader flags */ u_char dl_mtype; /* message type */ u_char dl_htype; /* handling type */ u_char dl_host; /* host number */ u_short dl_imp; /* imp field */ u_char dl_link; /* link number */ u_char dl_subtype; /* message subtype */ }; struct imp_leader { struct control_leader il_dl; #define il_format il_dl.dl_format #define il_network il_dl.dl_network #define il_flags il_dl.dl_flags #define il_mtype il_dl.dl_mtype #define il_htype il_dl.dl_htype #define il_host il_dl.dl_host #define il_imp il_dl.dl_imp #define il_link il_dl.dl_link #define il_subtype il_dl.dl_subtype u_short il_length; /* message length */ }; #define IMP_DROPCNT 2 /* # of noops from imp to ignore */ /* insure things are even... */ #define IMPMTU ((8159 / NBBY) & ~01) /* * IMP-host flags */ #define IMP_NFF 0xf /* 96-bit (new) format */ #define IMP_TRACE 0x8 /* trace message route */ #define IMP_DMASK 0x3 /* host going down mask */ /* * IMP-host message types. */ #define IMPTYPE_DATA 0 /* data for protocol */ #define IMPTYPE_BADLEADER 1 /* leader error */ #define IMPTYPE_DOWN 2 /* imp going down */ #define IMPTYPE_NOOP 4 /* noop seen during initialization */ #define IMPTYPE_RFNM 5 /* request for new messages */ #define IMPTYPE_HOSTDEAD 6 /* host doesn't respond */ #define IMPTYPE_HOSTUNREACH 7 /* host unreachable */ #define IMPTYPE_BADDATA 8 /* data error */ #define IMPTYPE_INCOMPLETE 9 /* incomplete message, send rest */ #define IMPTYPE_RESET 10 /* reset complete */ /* non-blocking IMP interface */ #define IMPTYPE_RETRY 11 /* IMP refused, try again */ #define IMPTYPE_NOTIFY 12 /* IMP refused, will notify */ #define IMPTYPE_TRYING 13 /* IMP refused, still rexmt'ng */ #define IMPTYPE_READY 14 /* ready for next message */ /* * IMPTYPE_DOWN subtypes. */ #define IMPDOWN_GOING 0 /* 30 secs */ #define IMPDOWN_PM 1 /* hardware PM */ #define IMPDOWN_RELOAD 2 /* software reload */ #define IMPDOWN_RESTART 3 /* emergency restart */ /* * IMPTYPE_BADLEADER subtypes. */ #define IMPLEADER_ERR 0 /* error flip-flop set */ #define IMPLEADER_SHORT 1 /* leader < 80 bits */ #define IMPLEADER_TYPE 2 /* illegal type field */ #define IMPLEADER_OPPOSITE 3 /* opposite leader type */ /* * IMPTYPE_HOSTDEAD subtypes. */ #define IMPHOST_NORDY 1 /* ready-line negated */ #define IMPHOST_TARDY 2 /* tardy receiving mesgs */ #define IMPHOST_NOEXIST 3 /* NCC doesn't know host */ #define IMPHOST_IMPSOFT 4 /* IMP software won't allow mesgs */ #define IMPHOST_PM 5 /* host down for scheduled PM */ #define IMPHOST_HARDSCHED 6 /* " " " " hardware work */ #define IMPHOST_SOFTSCHED 7 /* " " " " software work */ #define IMPHOST_RESTART 8 /* host down for emergency restart */ #define IMPHOST_POWER 9 /* down because of power outage */ #define IMPHOST_BREAKPOINT 10 /* host stopped at a breakpoint */ #define IMPHOST_HARDWARE 11 /* hardware failure */ #define IMPHOST_NOTUP 12 /* host not scheduled to be up */ /* 13-14 currently unused */ #define IMPHOST_COMINGUP 15 /* host in process of coming up */ /* * IMPTYPE_HOSTUNREACH subtypes. */ #define IMPREACH_IMP 0 /* destination IMP can't be reached */ #define IMPREACH_HOSTUP 1 /* destination host isn't up */ #define IMPREACH_LEADER 2 /* host doesn't support long leader */ #define IMPREACH_PROHIBITED 3 /* communication is prohibited */ /* * IMPTYPE_INCOMPLETE subtypes. */ #define IMPCOMPLETE_SLOW 0 /* host didn't take data fast enough */ #define IMPCOMPLETE_TOOLONG 1 /* message was too long */ #define IMPCOMPLETE_TIMEOUT 2 /* mesg transmission time > 15 sec. */ #define IMPCOMPLETE_FAILURE 3 /* IMP/circuit failure */ #define IMPCOMPLETE_NOSPACE 4 /* no resources within 15 sec. */ #define IMPCOMPLETE_IMPIO 5 /* src IMP I/O failure during receipt */ /* * IMPTYPE_RETRY subtypes. */ #define IMPRETRY_BUFFER 0 /* IMP buffer wasn't available */ #define IMPRETRY_BLOCK 1 /* connection block unavailable */ /* * Data structure shared between IMP protocol module and hardware * interface driver. Used to allow layering of IMP routines on top * of varying device drivers. NOTE: there's a possible problem * with ambiguity in the ``unit'' definition which is implicitly * shared by the both IMP and device code. If we have two IMPs, * with each on top of a device of the same unit, things won't work. * The assumption is if you've got multiple IMPs, then they all run * on top of the same type of device, or they must have different units. */ struct impcb { char ic_oactive; /* output in progress */ int (*ic_init)(); /* hardware init routine */ int (*ic_start)(); /* hardware start output routine */ }; /* * State of an IMP. */ #define IMPS_DOWN 0 /* unavailable, don't use */ #define IMPS_GOINGDOWN 1 /* been told we go down soon */ #define IMPS_INIT 2 /* coming up */ #define IMPS_UP 3 /* ready to go */ #define IMPS_RESET 4 /* reset in progress */ #define IMPTV_DOWN (30*60) /* going down timer 30 secs */ #ifdef IMPLEADERS char *impleaders[IMPTYPE_READY+1] = { "DATA", "BADLEADER", "DOWN", "bad", "NOOP", "RFNM", "HOSTDEAD", "HOSTUNREACH", "BADDATA", "INCOMPLETE", "RESET", "RETRY", "NOTIFY", "TRYING", "READY" }; #endif #ifndef IN_SCCS_ID static char *S_if_imphost = " @(#)if_imphost.h (TWG) 1.4 87/01/12 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright (c) 1985 The Wollongong Group, Inc. All Rights Reserved */ /* if_imphost.h 6.1 83/07/29 */ /* * Host structure used with IMP's. * Used to hold outgoing packets which * would exceed allowed RFNM count. * * These structures are packed into * mbuf's and kept as small as possible. */ struct host { struct mbuf *h_q; /* holding queue */ struct in_addr h_addr; /* host's address */ u_char h_qcnt; /* size of holding q */ u_char h_timer; /* used to stay off deletion */ u_char h_rfnm; /* # outstanding rfnm's */ u_char h_flags; /* see below */ }; /* * A host structure is kept around (even when there are no * references to it) for a spell to avoid constant reallocation * and also to reflect IMP status back to sites which aren't * directly connected to the IMP. When structures are marked * free, a timer is started; when the timer expires the structure * is scavenged. */ #define HF_INUSE 0x1 #define HF_DEAD (1<>8)+(a).s_net) % HPMBUF) #endif /* * In-line expansions for queuing operations on * host message holding queue. Queue is maintained * as circular list with the head pointing to the * last message in the queue. */ #define HOST_ENQUE(hp, m) { \ register struct mbuf *n; \ (hp)->h_qcnt++; \ if ((n = (hp)->h_q) == 0) \ (hp)->h_q = (m)->m_act = (m); \ else { \ (m)->m_act = n->m_act; \ (hp)->h_q = n->m_act = (m); \ } \ } #define HOST_DEQUE(hp, m) { \ if ((m) = (hp)->h_q) { \ if ((m)->m_act == (m)) \ (hp)->h_q = 0; \ else { \ (m) = (m)->m_act; \ (hp)->h_q->m_act = (m)->m_act; \ } \ (hp)->h_qcnt--; \ (m)->m_act = 0; \ } \ } struct hmbuf { int hm_count; /* # of struct's in use */ struct host hm_hosts[HPMBUF]; /* data structures proper */ }; #ifdef KERNEL struct host *hostlookup(); struct host *hostenter(); struct mbuf *hostdeque(); #endif '...(arp.h)icmp.h*win_if.h+in.h,in_var.h-inet.h.inetioctl.h/ip.h0raw.h1route.h2socket.h3socketvar.h4tcp.h5time.h6tty_pty.h7udp.h8un.h#ifndef IN_SCCS_ID static char *S_arp = " @(#)arp.h (TWG) 2.2 88/04/04 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Ethernet Address Resolution Protocol. * * See RFC 826 for protocol description. Structure below is adapted * to resolving internet addresses. Field names used correspond to * RFC 826. */ #ifdef XENIX /* #pragma pack(1) */ #endif struct ether_arp { ushort arp_hrd; /* format of hardware address */ #define ARPHRD_ETHER 1 /* ethernet hardware address */ #define ARPHRD_CSMA 2 /* starlan hardware address */ ushort arp_pro; /* format of proto. address (ETHERPUP_IPTYPE) */ unchar arp_hln; /* length of hardware address (6) */ unchar arp_pln; /* length of protocol address (4) */ ushort arp_op; #define ARPOP_REQUEST 1 /* request to resolve address */ #define ARPOP_REPLY 2 /* response to previous request */ unchar arp_sha[6]; /* sender hardware address */ unchar arp_spa[4]; /* sender protocol address */ unchar arp_tha[6]; /* target hardware address */ unchar arp_tpa[4]; /* target protocol address */ }; #ifdef XENIX /* #pragma pack() */ #endif /* * Internet (32 bit) to Ethernet/Starlan (48 bit) address translation table * the table ends when the IP address is 0 * should be hashed!!! */ struct arptab { struct arptab *at_next;/* The next arptab */ ulong at_in; /* internet address */ time_t at_time; /* aging */ ushort at_type; /* subnet type */ unchar at_mac[6]; /* ethernet address */ short at_flags; /* See below. */ }; #define ATF_COM 02 /* The entry is complete */ #define ATF_PERM 04 /* A permanent Entry */ #define ATF_PUBL 010 /* Reply arp for another host */ /* * ioctl structure to arpld */ typedef struct arptab arpioctl; /* * arp module information */ struct arp { queue_t *ar_rdq; /* read queue */ ulong ar_inaddr; /* my internet addr */ ulong ar_net; /* my net addr */ char ar_type; /* subnet type: lihdr.h */ char ar_flag; /* see below */ short ar_pro; /* proto format */ char ar_sha[MACSIZE]; /* mac address */ }; struct arpb { queue_t *ab_wrq; ulong ab_inaddr; /* my internet addr */ ulong ab_net; /* my net addr */ int ab_cookie; short ab_sap; /* for 802 1byte sap, */ /* for ether, 2b type */ short ab_pro; /* proto formast */ ushort ab_maxpsz; /* max packet size */ ushort ab_minpsz; /* min packet size */ short ab_type; /* subnet type: lihdr.h */ char ab_sha[MACSIZE]; /* mac address */ }; /* * ar_flag */ #define AR_BOUND 0x01 /* bound to link level */ /* * ioctl known to arpld */ #define ARPIOC ('I'<<8) #define ARP_INSRC (ARPIOC|30) /* my ineternet address */ #define ARP_RESOLVE (ARPIOC|31) /* resolve inet-ether mapping */ #define ARP_DELETE (ARPIOC|32) /* delete inet-ether mapping */ #define ARP_GET (ARPIOC|33) /* get inet-ether mapping */ #define ARPAGE (3600*HZ) /* 1 hour before invalidation */ /* -ac created for arptimer routine 8/12/87 */ #define ARPT_AGE (60*1) /* age entry every minute */ #define ARPT_KILLC 20 /* kill completed entry in 20 mins */ #define ARPT_KILLI 3 /* kill incompleted entry in 3 mins */ #define NARP_BUCKETS 19 /* #define ARP_HASH(a) \ (((((unsigned long)(a)) >> 16) ^ ((a) & 0xffff)) % NARP_BUCKETS) */ #define ARP_HASH(addr) ((addr) % NARP_BUCKETS) #define ARPTAB_LOOK(at, addr, type) { int s = splhi(); \ for(at = arp_bhash[ARP_HASH(addr)] ; \ at ; at = at->at_next) \ if (at->at_in == addr && at->at_type == type) \ break; \ splx(s); } #ifndef IN_SCCS_ID static char *S_icmp = " @(#)icmp.h (TWG) 3.1 88/11/08 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Interface Control Message Protocol Definitions. * Per RFC 792, September 1981. */ #ifdef XENIX /* #pragma pack() */ #endif /* * Structure of an icmp header. */ struct icmp { u_char icmp_type; /* type of message, see below */ u_char icmp_code; /* type sub code */ u_short icmp_cksum; /* ones complement cksum of struct */ union { u_char ih_pptr; /* ICMP_PARAMPROB */ ulong ih_gwaddr; /* ICMP_REDIRECT */ struct Ih_idseq { u_short icd_id; u_short icd_seq; } ih_idseq; int ih_void; } icmp_hun; #define icmp_pptr icmp_hun.ih_pptr #define icmp_gwaddr icmp_hun.ih_gwaddr #define icmp_id icmp_hun.ih_idseq.icd_id #define icmp_seq icmp_hun.ih_idseq.icd_seq #define icmp_void icmp_hun.ih_void union { struct Id_ts { n_time its_otime; n_time its_rtime; n_time its_ttime; } id_ts; struct Id_ip { struct ip idi_ip; /* options and then 64 bits of data */ } id_ip; u_long id_mask; char id_data[1]; } icmp_dun; #define icmp_otime icmp_dun.id_ts.its_otime #define icmp_rtime icmp_dun.id_ts.its_rtime #define icmp_ttime icmp_dun.id_ts.its_ttime #define icmp_ip icmp_dun.id_ip.idi_ip #define icmp_mask icmp_dun.id_mask #define icmp_data icmp_dun.id_data }; #ifdef XENIX /* #pragma pack() */ #endif /* * Lower bounds on packet lengths for various types. * For the error advice packets must first insure that the * packet is large enought to contain the returned ip header. * Only then can we do the check to see if 64 bits of packet * data have been returned, since we need to check the returned * ip header length. */ #define ICMP_MINLEN 8 /* abs minimum */ #define ICMP_TSLEN (8 + 3 * sizeof (n_time)) /* timestamp */ #define ICMP_MASKLEN 12 /* address mask */ #define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */ #define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8) /* N.B.: must separately check that ip_hl >= 5 */ /* * Definition of type and code field values. */ #define ICMP_ECHOREPLY 0 /* echo reply */ #define ICMP_UNREACH 3 /* dest unreachable, codes: */ #define ICMP_UNREACH_NET 0 /* bad net */ #define ICMP_UNREACH_HOST 1 /* bad host */ #define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */ #define ICMP_UNREACH_PORT 3 /* bad port */ #define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */ #define ICMP_UNREACH_SRCFAIL 5 /* src route failed */ #define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */ #define ICMP_REDIRECT 5 /* shorter route, codes: */ #define ICMP_REDIRECT_NET 0 /* for network */ #define ICMP_REDIRECT_HOST 1 /* for host */ #define ICMP_REDIRECT_TOSNET 2 /* for tos and net */ #define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */ #define ICMP_ECHO 8 /* echo service */ #define ICMP_ADMINPROB 10 /* Host administration bad */ #define ICMP_TIMXCEED 11 /* time exceeded, code: */ #define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */ #define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */ #define ICMP_PARAMPROB 12 /* ip header bad */ #define ICMP_TSTAMP 13 /* timestamp request */ #define ICMP_TSTAMPREPLY 14 /* timestamp reply */ #define ICMP_IREQ 15 /* information request */ #define ICMP_IREQREPLY 16 /* information reply */ #define ICMP_MASKREQ 17 /* address mask request */ #define ICMP_MASKREPLY 18 /* address mask reply */ #define ICMP_MAXTYPE 18 /* * Variables related to this implementation * of the internet control message protocol. */ struct icmpstat { /* statistics related to icmp packets generated */ int icps_error; /* # of calls to icmp_error */ int icps_oldshort; /* no error 'cuz old ip too short */ #ifdef SHORT_IDENT int Icps_oldicmp; /* no error 'cuz old was icmp */ #define icps_oldicmp Icps_oldicmp /* Compiler bug */ #else int icps_oldicmp; /* no error 'cuz old was icmp */ #endif /* SHORT_IDENT */ int icps_outhist[ICMP_MAXTYPE + 1]; /* statistics related to input messages processed */ int icps_badcode; /* icmp_code out of range */ int icps_tooshort; /* packet < ICMP_MINLEN */ int icps_checksum; /* bad checksum */ #ifdef SHORT_IDENT int Icps_badlen; /* calculated bound mismatch */ #define icps_badlen Icps_badlen /* Compiler bug */ #else int icps_badlen; /* calculated bound mismatch */ #endif /* SHORT_IDENT */ int icps_reflect; /* number of responses */ int icps_inhist[ICMP_MAXTYPE + 1]; }; #ifdef INKERNEL extern struct icmpstat icmpstat; #endif /* INKERNEL */ #ifndef IN_SCCS_ID static char *S_if = " @(#)win_if.h (TWG) 2.3 88/06/16 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Routines exist for locating interfaces by their addresses * or for locating a interface on a certain network, as well as more general * routing and gateway routines maintaining information used to locate * interfaces. These routines live in the files if.c and ip_route.c */ /* * flags used for ip bottom queue ib_flag */ #define IFF_UP (1<<0) /* interface is up */ #define IFF_BROADCAST (1<<1) /* broadcast address valid */ #define IFF_DEBUG (1<<2) /* turn on debugging */ #define IFF_LOOPBACK (1<<3) /* is a loopback net */ #define IFF_POINTOPOINT (1<<4) /* interface is point-to-point link */ #define IFF_NOTRAILERS (1<<5) /* avoid use of trailers */ #define IFF_RUNNING (1<<6) /* resources allocated */ #define IFF_NOARP (1<<7) /* no address resolution protocol */ /* next two not supported now, but reserved: */ #define IFF_PROMISC (1<<8) /* receive all packets */ #define IFF_ALLMULTI (1<<9) /* receive all multicast packets */ /* additional flags used for streams implementation: */ #define IFF_ARP (1<<10) /* perform arp */ #define IFF_LOCAL (1<<11) /* for subnets. still needed ???*/ #define IFF_ROUTE (1<<12) /* routing */ #define IFF_BINDNEED (1<<13) /* during binding */ #define IFF_IPTOX25 (1<<14) /* for ACP IPX25 interface */ #define IFF_IPTOVCS (1<<15) /* for Datakit VCS interface */ /* flags set internally only: */ #define IFF_CANTCHANGE \ (IFF_BROADCAST | IFF_POINTOPOINT | IFF_RUNNING | IFF_IPTOX25) /* * The ifaddr structure contains information about one address * of an interface. They are maintained by the different address families, * are allocated and attached when an address is set, and are linked * together so all addresses for an interface can be located. */ struct ifaddr { struct sockaddr ifa_addr; /* address of interface */ union { struct sockaddr ifu_broadaddr; struct sockaddr ifu_dstaddr; } ifa_ifu; #define ifa_broadaddr ifa_ifu.ifu_broadaddr /* broadcast address */ #define ifa_dstaddr ifa_ifu.ifu_dstaddr /* other end of p-to-p link */ struct ipb *ifa_ifp; /* back-pointer to the interface ipb*/ struct ifaddr *ifa_next; }; /* * Interface request structure used for socket * ioctl's. All interface ioctl's must have parameter * definitions which begin with ifr_name. The * remainder may be interface specific. */ struct ifreq { int ifr_cookie; #define IFNAMSIZ 16 char ifr_name[IFNAMSIZ]; /* if name, e.g. "en0" */ union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; ushort ifru_flags; int ifru_metric; caddr_t ifru_data; ulong ifru_ioctldata[2]; } ifr_ifru; #define ifr_addr ifr_ifru.ifru_addr /* address */ #define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */ #define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ #define ifr_flags ifr_ifru.ifru_flags /* flags */ #define ifr_metric ifr_ifru.ifru_metric /* metric */ #define ifr_data ifr_ifru.ifru_data /* for use by interface */ #define ifr_ipackets ifr_ifru.ifru_ioctldata[0] #define ifr_opackets ifr_ifru.ifru_ioctldata[1] }; /* * Structure used in SIOCGIFCONF request. * Used to retrieve interface configuration * for machine (useful for programs which * must know all networks accessible). */ struct ifconf { int ifc_len; /* size of associated buffer */ union { caddr_t ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */ #define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */ }; #ifdef KERNEL struct ifaddr *ifa_ifwithaddr(), *ifa_ifwithnet(); struct ifaddr *ifa_ifwithdstaddr(); #endif /* KERNEL */ #ifndef IN_SCCS_ID static char *S_in = " @(#)in.h (TWG) 2.4 88/05/11 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Constants and structures defined by the internet system, * Per RFC 790, September 1981. */ /* * Protocols */ #define IPPROTO_IP 0 /* dummy for IP */ #define IPPROTO_ICMP 1 /* control message protocol */ #define IPPROTO_GGP 2 /* gateway^2 (deprecated) */ #define IPPROTO_TCP 6 /* tcp */ #define IPPROTO_EGP 8 /* exterior gateway protocol */ #define IPPROTO_PUP 12 /* pup */ #define IPPROTO_UDP 17 /* user datagram protocol */ #define IPPROTO_IDP 22 /* xns idp */ /* XXX - brought this over from streams, needed ??? */ #define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */ #define IPPROTO_RAW 255 /* raw IP packet */ #define IPPROTO_MAX 256 /* XXX brought over from streams, needed ??? */ /* * Port/socket numbers: network standard functions */ #define IPPORT_ECHO 7 #define IPPORT_DISCARD 9 #define IPPORT_SYSTAT 11 #define IPPORT_DAYTIME 13 #define IPPORT_NETSTAT 15 #define IPPORT_FTP 21 #define IPPORT_TELNET 23 #define IPPORT_SMTP 25 #define IPPORT_TIMESERVER 37 #define IPPORT_NAMESERVER 42 #define IPPORT_WHOIS 43 #define IPPORT_MTP 57 /* * Port/socket numbers: host specific functions */ #define IPPORT_TFTP 69 #define IPPORT_RJE 77 #define IPPORT_FINGER 79 #define IPPORT_TTYLINK 87 #define IPPORT_SUPDUP 95 /* * UNIX TCP sockets */ #define IPPORT_EXECSERVER 512 #define IPPORT_LOGINSERVER 513 #define IPPORT_CMDSERVER 514 #define IPPORT_EFSSERVER 520 /* * UNIX UDP sockets */ #define IPPORT_BIFFUDP 512 #define IPPORT_WHOSERVER 513 #define IPPORT_ROUTESERVER 520 /* 520+1 also used */ /* * Ports < IPPORT_RESERVED are reserved for * privileged processes (e.g. root). * Ports > IPPORT_USERRESERVED are reserved * for servers, not necessarily privileged. */ #define IPPORT_RESERVED 1024 #define IPPORT_USERRESERVED 5000 /* * Link numbers */ #define IMPLINK_IP 155 #define IMPLINK_LOWEXPER 156 #define IMPLINK_HIGHEXPER 158 /* * Internet address (a structure for historical reasons) */ struct in_addr { ulong s_addr; }; /* * Definitions of bits in internet address integers. * On subnets, the decomposition of addresses to host and net parts * is done according to subnet mask, not the masks here. */ #define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0) #define IN_CLASSA_NET 0xff000000 #define IN_CLASSA_NSHIFT 24 #define IN_CLASSA_HOST 0x00ffffff #define IN_CLASSA_MAX 128 #define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000) #define IN_CLASSB_NET 0xffff0000 #define IN_CLASSB_NSHIFT 16 #define IN_CLASSB_HOST 0x0000ffff #define IN_CLASSB_MAX 65536 #define IN_CLASSC(i) (((long)(i) & 0xc0000000) == 0xc0000000) #define IN_CLASSC_NET 0xffffff00 #define IN_CLASSC_NSHIFT 8 #define IN_CLASSC_HOST 0x000000ff #define INADDR_ANY (ulong)0x00000000 #define INADDR_BROADCAST (ulong)0xffffffff /* must be masked */ /* * Socket address, internet style. */ struct sockaddr_in { short sin_family; ushort sin_port; struct in_addr sin_addr; char sin_zero[8]; }; /* * Options for use with [gs]etsockopt at the IP level. */ #define IP_OPTIONS 1 /* set/get IP per-packet options */ #if !defined(vax) && !defined(ntohl) && !defined(lint) /* * Macros for number representation conversion. */ #define ntohl(x) (x) #define ntohs(x) (x) #define htonl(x) (x) #define htons(x) (x) #endif #ifdef notdef /* XXX needed */ #if !defined(ntohl) && (defined(vax) || defined(lint)) ushort ntohs(), htons(); ulong ntohl(), htonl(); #endif #endif /* notdef */ #ifdef KERNEL /* extern struct domain inetdomain; extern struct protosw inetsw[]; */ ulong in_makeaddr(); ulong in_netof(), in_lnaof(); #endif #ifndef TCP_BINDADDRLEN #define TCP_BINDADDRLEN 16 /* Used for t_bind */ #endif /* TCP_BINDADDRLEN */ #ifndef IN_SCCS_ID static char *S_in_var = " @(#)in_var.h (TWG) 2.1 87/12/09 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1987. The Wollongong Group, Inc. All Rights Reserved. */ /* /* * Interface address, Internet version. One of these structures * is allocated for each interface with an Internet address. * The ifaddr structure contains the protocol-independent part * of the structure and is assumed to be first. */ struct in_ifaddr { struct ifaddr ia_ifa; /* protocol-independent info */ #define ia_addr ia_ifa.ifa_addr #define ia_broadaddr ia_ifa.ifa_broadaddr #define ia_dstaddr ia_ifa.ifa_dstaddr #define ia_ifp ia_ifa.ifa_ifp u_long ia_net; /* network number of interface */ u_long ia_netmask; /* mask of net part */ u_long ia_subnet; /* subnet number, including net */ u_long ia_subnetmask; /* mask of net + subnet */ u_long ia_netbroadcast; /* broadcast addr for (logical) net */ int ia_flags; struct in_ifaddr *ia_next; /* next in list of internet addresses */ }; /* * Given a pointer to an in_ifaddr (ifaddr), * return a pointer to the addr as a sockadd_in. */ #define IA_SIN(ia) ((struct sockaddr_in *)(&((struct in_ifaddr *)ia)->ia_addr)) /* * ia_flags */ #define IFA_ROUTE 0x01 /* routing entry installed */ #ifdef KERNEL extern struct in_ifaddr *in_ifaddr; struct in_ifaddr *in_iaonnetof(); #endif /* KERNEL */ /* * Given a pointer to a ipb, return pointer to in_ifaddr. * note: internet is the only address family supported. */ #define ifptoia(x) ((struct in_ifaddr *)((x)->if_addrlist)) /* * Given a sockaddr value, return * sin_addr or sin_addr.s_addr fields. */ #define satoinaddr(x) (((struct sockaddr_in *)&(x))->sin_addr) #define satosaddr(x) (((struct sockaddr_in *)&(x))->sin_addr.s_addr) /* remove later #define satosaddr(x) (((struct sockaddr_in *)(&(x)))->sin_addr.s_addr) */ #ifndef IN_SCCS_ID static char *S_inet = " @(#)inet.h (TWG) 2.11.1.4 88/10/26 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * local definitions for this implementation * catch all situation */ #ifndef minor #include #endif #ifdef DEBUG_TRACE #define TRACE(mask,fmt,arg) { extern int _trmask ; \ if (_trmask & mask) printf(fmt, arg); } #define TRACE2(mask,fmt,arg1, arg2) { extern int _trmask ; \ if (_trmask & mask) printf(fmt, arg1,arg2); } #else #define TRACE(mask, fmt, arg) {} #define TRACE2(mask, fmt, arg, a2) {} #endif /* DEBUG_TRACE */ #define HALFWORD_ALIGNED(ptr) (!((int)ptr & 1)) #define ODD_BOUNDARY(ptr) ((int)ptr & 1) /* * these probably belong to stream.h */ #define BLEN(bp) ((bp)->b_wptr - (bp)->b_rptr) #define MTYPE(bp) (bp)->b_datap->db_type #define TTYPE(x) ((x)->type) #define mtod(bp, type) ((type)((bp)->b_rptr)) #define SIGCHLD SIGCLD /* * random selection */ #define IP_ID 0x1351 /* 4945 decimal */ #define TCP_ID 0x1352 #define UDP_ID 0x1353 #define ARP_ID 0x1354 #define ICMP_ID 0x1355 #define LOOP_ID 0x1356 #define UI_ID 0x1357 #define RAW_ID 0x1358 #define CIRC_ID 0x1359 /* AFUN Decimal 4953 */ /* sadlog/SADLOG level */ #define DPRI_HI 20 #define DPRI_MED 30 #define DPRI_LO 40 #define SL_te SL_TRACE | SL_ERROR typedef unsigned long u_long; typedef unsigned long unlong; #ifdef XENIX typedef unsigned long ulong; #endif typedef unsigned short u_short; typedef unsigned short unshort; typedef unsigned char u_char; typedef unsigned char uchar; #ifdef XENIX typedef unsigned char unchar; #endif typedef unsigned int u_int; typedef unsigned int unint; typedef unsigned long inaddr_t; typedef unsigned long n_time; #define NBBY 8 /* number of bits in a byte */ /* * Select uses bit masks of file descriptors in longs. * These macros manipulate such bit fields (the filesystem macros use chars). * FD_SETSIZE may be defined by the user, but the default here * should be >= NOFILE (param.h). */ #ifndef FD_SETSIZE #define FD_SETSIZE 256 #endif typedef long fd_mask; #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ #ifndef howmany #define howmany(x, y) (((x)+((y)-1))/(y)) #endif typedef struct fd_set { fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; } fd_set; #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p))) /* * Define Qhead */ struct qhead { struct qhead *b_next; struct qhead *b_prev; struct qhead *b_cont; /* ??? Is this needed */ }; /* * address format for tcp and udp: was two longs before * may have to change to character string */ struct tsap { short ta_family; unsigned short ta_port; /* port number */ ulong ta_addr; /* internet address */ }; #define BINDLEN sizeof(struct tsap) /* kernel address length for tcp/udp */ #if (u3b2 || i386) #define LABEL(X)\ asm(" .globl X");\ asm("X:"); #else #define LABEL(X) #endif #define REUSEABLE(BP, SIZE) \ (((BP->b_datap->db_ref == 1) && \ (BP->b_datap->db_lim - BP->b_datap->db_base >= SIZE)) ? \ freemsg(BP->b_cont), BP->b_cont = NULL, /* XXX */ \ BP->b_rptr = BP->b_wptr = BP->b_datap->db_base, 1 : 0) /* * XXX: in sys/log.h, each routine should include log.h * STRLOG(mid,sid,level,flags,fmt,args) should be used for those trace * calls that are only to be made during debugging. */ #ifdef DEBUG #define STRLOG strlog #else #define STRLOG #endif #ifdef DEBUG_TRACE #define STRlog strlog #else #define STRlog #endif #ifndef BYTESWAP #define ntohl(x) (x) #define ntohs(x) (x) #define htonl(x) (x) #define htons(x) (x) #endif /* BYTESWAP */ /* * error code: should have been in errno.h * XXX: cleanup later */ #ifndef EWOULDBLOCK #define EWOULDBLOCK 200 /* Operation would block */ #define EINPROGRESS 201 /* Operation now in progress */ #define EALREADY 202 /* Operation already in progress */ /* ipc/network software */ /* argument errors */ #define ENOTSOCK 203 /* Socket operation on non-socket */ #define EDESTADDRREQ 204 /* Destination address required */ #define EMSGSIZE 205 /* Message too long */ #define EPROTOTYPE 206 /* Protocol wrong type for socket */ #define ENOPROTOOPT 207 /* Protocol not available */ #define EPROTONOSUPPORT 208 /* Protocol not supported */ #define ESOCKTNOSUPPORT 209 /* Socket type not supported */ #define EOPNOTSUPP 210 /* Operation not supported on socket */ #define EPFNOSUPPORT 211 /* Protocol family not supported */ #define EAFNOSUPPORT 212 /* Address family not supported by protocol family */ #define EADDRINUSE 213 /* Address already in use */ #define EADDRNOTAVAIL 214 /* Can't assign requested address */ /* operational errors */ #define ENETDOWN 215 /* Network is down */ #define ENETUNREACH 216 /* Network is unreachable */ #define ENETRESET 217 /* Network dropped connection on reset */ #define ECONNABORTED 218 /* Software caused connection abort */ #define ECONNRESET 219 /* Connection reset by peer */ #define ENOBUFS 220 /* No buffer space available */ #define EISCONN 221 /* Socket is already connected */ #define ENOTCONN 222 /* Socket is not connected */ #define ESHUTDOWN 223 /* Can't send after socket shutdown */ #define ETIMEDOUT 224 /* Connection timed out */ #define ECONNREFUSED 225 /* Connection refused */ #define EHOSTDOWN 226 /* Host is down */ #define EHOSTUNREACH 227 /* No route to host */ #ifdef NCR #define EPOWERFAIL 228 /* User disconnected due to powerfail*/ #endif /* NCR */ #endif /* * LLC stuff */ #define MACSIZE 6 /* 6 octets, or 48 bits */ #define LC_REQSIZE (sizeof(struct DL_unitdata_req) + EMDSAP_SIZE) #define LC_INDSIZE (sizeof(struct DL_unitdata_ind)+EMDSAP_SIZE+EMDSAP_SIZE) /* These should really be in /usr/include/sys/lihdr.h * but are not as yet. */ #define DL_IPX25 5 /* required for ACC changes */ #define DL_PTOP 8 /* Missing in lihdr.h */ #define DL_LOOP 10 /* TWG definition. XXX danger of collosion */ /* * llc 802.2 address format */ struct llc_a { u_char l_addr[MACSIZE]; u_char l_sap; }; #define LSAP_SIZE 7 /* * llc ethernet address format */ struct llc_aemd { u_char l_addr[MACSIZE]; u_short l_prot; }; #define EMDSAP_SIZE 8 /* * llc ip address format */ struct llc_ip { u_char l_addr[4]; ulong l_type; }; /* * 802.2 SAP numbers */ #define URP_SAP 0x80 #define IP_SAP 0x81 #define ARP_SAP 0x82 /* * ethernet protocol type */ #define ETHERPUP_PUPTYPE 0x0200 /* PUP protocol */ #define ETHERPUP_IPTYPE 0x0800 /* IP protocol */ #define ETHERPUP_ARPTYPE 0x0806 /* ARP protocol */ /* * MAchine specific stuff */ #if (u3b2 || ns32000 || i386 || NCR) #define NOFLOAT #ifdef XENIX #define splnet spl5 #else #define splnet spl4 /* Keep the timein routines out */ #endif #endif /* u3b2 */ #ifndef i386 #ifdef INKERNEL #ifdef u3b2 #define bzero(a,b) w_bzero(a,b) #else /* #define bzero(a,b) w_bzero(a,b) */ #endif /* u3b2 */ #endif /* INKERNEL */ #endif /* i386 */ /* * The winsopt structure is used by socket option code * at the user and kernel levels. */ struct winsopt { int level; /* protocol level */ int name; /* option name */ int flags; /* option flags */ }; #ifdef INKERNEL /* * We need these defined here as they are no longer macros on SVR3.2 systems * (they are functions) and would cause a panic if our product was compiled on * a SVR3.2 system and then installed on a SVR3.1 system! * This is really AT&T's problem. * * noenable - set queue so that putq() will not enable it. * enableok - set queue so that putq() can enable it. */ #undef noenable #define noenable(q) { \ register int s; \ s = splstr(); \ (q)->q_flag |= QNOENB; \ splx(s); \ } #undef enableok #define enableok(q) { \ register int s; \ s = splstr(); \ (q)->q_flag &= ~QNOENB; \ splx(s); \ } #endif /* INKERNEL */ /* * AFUN ioctl structures for unix domain */ struct afun { short afun_dev; /* major minor dev #s for afun */ ushort afun_ino; /* inode # */ }; #define SUNPATHLEN 108 #define LOOPBACK 0x7f000001 struct afuid { union { ino_t afuino; ushort afuport; } afutag; dev_t afu_dev; int afu_flen; unchar afu_file[SUNPATHLEN]; }; #define afu_ino afutag.afuino #define afu_port afutag.afuport #define AFULEN sizeof(struct afuid) /* End of AFUN strucures */ #ifndef IN_SCCS_ID static char *S_inetioctl = " @(#)inetioctl.h (TWG) 2.8.1.5 88/12/08 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ #ifndef IFNAMESIZ #include "sys/ip.h" #endif #ifdef notdef /* * ioctl data to the ip module */ struct ipioctl { int ipioc_cookie; /* cookie for mux */ unchar ipioc_name[IFNAMESIZ]; /* Name of Interface */ union { struct sockaddr Ipioc_myaddr; struct sockaddr Ipioc_dstaddr; struct sockaddr Ipioc_broadaddr; ulong Ipioc_flags; /* Flags */ struct { ulong Iparp_in; /* Internet Address */ short Iparp_flg; /* Flags */ unchar Iparp_en[6]; /* The ethernet address */ } Ipioc_arp; ulong Ipioc_data[26]; /* Space to hold Ioctls */ }ipioc_un; }; #define ipioc_myaddr ipioc_un.Ipioc_myaddr /* address */ #define ipioc_dstaddr ipioc_un.Ipioc_dstaddr /* other end of p-p link */ #define ipioc_broadaddr ipioc_un.Ipioc_broadaddr /* broadcast address */ #define ipioc_flags ipioc_un.Ipioc_flags #define ipioc_arpin ipioc_un.Ipioc_arp.Iparp_in #define ipioc_arpflags ipioc_un.Ipioc_arp.Iparp_flg #define ipioc_arp_enaddr ipioc_un.Ipioc_arp.Iparp_en #define ipioc_data ipioc_un.Ipioc_data #endif /* notdef */ #define IPIOC ('I'<<8) #define IPIOC_SETIFADDR (IPIOC|1) /* Set interface Address */ #define IPIOC_GETIFADDR (IPIOC|2) /* Get Interface Addr */ #define IPIOC_SETIFFLAGS (IPIOC|3) /* Set interface flags */ #define IPIOC_GETIFFLAGS (IPIOC|4) /* Get interface Flags */ #define IPIOC_ADDROUTE (IPIOC|5) /* Add a route */ #define IPIOC_DELETEROUTE (IPIOC|6) /* Delete the route */ #define IPIOC_SARP (IPIOC|7) /* Set Arp table entry */ #define IPIOC_DARP (IPIOC|8) /* Delete Arp table entry */ #define IPIOC_GARP (IPIOC|9) /* Get Arp table entry */ #define IPIOC_SET_ARP_PROTO (IPIOC|10) /* Set Ethernet protocol*/ #define IPIOC_SETIFDSTADDR (IPIOC|11) /* Set Destination Address*/ #define IPIOC_GETIFDSTADDR (IPIOC|12) /* Get Destination Address*/ #define IPIOC_SETNAME (IPIOC|13) /* Set the interface name */ #define IPIOC_SETIFBRDADDR (IPIOC|14) /* Set broadcast addr */ #define IPIOC_GETIFBRDADDR (IPIOC|15) /* Get broadcast addr */ #define IPIOC_SETIFNETMASK (IPIOC|16) /* Set the subnetting masks */ #define IPIOC_GETIFNETMASK (IPIOC|17) /* Get the subnetting masks */ #define IPIOC_GETIFCONF (IPIOC|18) /* Get the interface conf. */ #define IPIOC_SETIFMETRIC (IPIOC|19) /* Set the interface metric */ #define IPIOC_GETIFMETRIC (IPIOC|20) /* Get the interface metric */ #define IPIOC_GETIFCOUNTS (IPIOC|61) /* Get the interface counts */ #ifdef notdef #define SIOCADDRT IPIOC_ADDROUTE #define SIOCDELRT IPIOC_DELETEROUTE #define SIOCSARP IPIOC_SARP #define SIOCDARP IPIOC_DARP #define SIOCGARP IPIOC_GARP #endif /* notdef */ struct tcpioctl { struct { ulong tio_myinaddr; ushort tio_myport; } Tio_Port; }; #define tio_addr Tio_Port.tio_myinaddr #define tio_port Tio_Port.tio_myport /* * The TCP ioctl's that the user can use. */ #define TCPIOC ('T'<<8) /* TCP Ioctl */ #define TCPIOC_GETMYPORT (TCPIOC|1) /* Find out binding addr*/ #define TCPIOC_DORDWR (TCPIOC|2) /* Don't send up M_PROTO */ #define TCPIOC_NORDWR (TCPIOC|3) /* Set M_PROTO */ #define TCPIOC_SPARE1 (TCPIOC|4) /* Unused */ #define TCPIOC_GETSOCKNAME (TCPIOC|5) /* Get Sockname */ #define TCPIOC_GETPEERNAME (TCPIOC|6) /* Get Peer Name */ #define TCPIOC_SPARE2 (TCPIOC|7) /* Unused */ #define TCPIOC_SETQLENGTH (TCPIOC|8) /* Set Queue Length */ #define TCPIOC_GETMYSTATE (TCPIOC|9) /* Get the TCP STate */ #define TCPIOC_DATAPEND (TCPIOC|10) /* Check the queue len */ #define TCPIOC_NEWPORT (TCPIOC|11) /* Give me a new port */ #define TCPIOC_SOCKOPT (TCPIOC|12) /* Handle socket options */ #define TCPIOC_GETFAMILY (TCPIOC|13) /* AFUN - Get address family */ #define TCPIOC_SETFAMILY (TCPIOC|14) /* AFUN - Set address family */ #define TCPIOC_GETPORT (TCPIOC|15) /* AFUN - Get Port for afu file */ /* * The UDP ioctl's that the user can use. */ #define UDPIOC ('U'<<8) /* UDP Ioctl */ #define UDPIOC_GETMYSTATE TCPIOC_GETMYSTATE /* Get the UDP's TLI state */ #define UDPIOC_GETSOCKNAME TCPIOC_GETSOCKNAME /* Get the UDP's Sockname */ #define UDPIOC_GETPEERNAME TCPIOC_GETPEERNAME /* Get the UDP's Peer name */ #define UDPIOC_SOCKOPT TCPIOC_SOCKOPT /* Handle socket options */ #define UDPIOC_CONNECT UDPIOC|1 /* Connect to peer's addr */ #define UDPIOC_DO_CKSUM_IN UDPIOC|2 /* Checksum on input */ #define UDPIOC_DO_CKSUM_OUT UDPIOC|3 /* Checksum on output */ #define UDPIOC_DONT_CKSUM_IN UDPIOC|4 /* Don't checksum on input */ #define UDPIOC_DONT_CKSUM_OUT UDPIOC|5 /* Don't checksum on output*/ #define UDPIOC_GETFAMILY (TCPIOC|13) /* AFUN Get address family */ #define UDPIOC_SETFAMILY (TCPIOC|14) /* AFUN Set address family */ #define UDPIOC_GETPORT (TCPIOC|15) /* AFUN Get Port for afu file */ #define UDPIOC_GETFILE UDPIOC|6 /* AFUN Get filename knowing port */ /* The CIRC ioctls - AFUN */ #define CIRCIOC ('C'<<8) /* AFUN - CIRC Ioctl */ #define CIRCIOC_GETFAMILY (TCPIOC|13) /* AFUN - Get address family */ #define CIRCIOC_SETFAMILY (TCPIOC|14) /* AFUN - Set address family */ #define CIRCIOC_LINK (CIRCIOC|1) /* AFUN - cross link streams */ /* * The RAW ioctl's that the user can use. */ #define RAWIOC ('R'<<8) /* RAW Ioctl */ #define RAWIOC_GETMYSTATE TCPIOC_GETMYSTATE /* Get the RAW's TLI state */ #define RAWIOC_GETSOCKNAME TCPIOC_GETSOCKNAME /* Get the RAW's Sockname */ #define RAWIOC_GETPEERNAME TCPIOC_GETPEERNAME /* Get the RAW's Peer name */ #define RAWIOC_SOCKOPT TCPIOC_SOCKOPT /* Handle socket options */ #define RAWIOC_PROTO RAWIOC|1 /* Set RAW's proto # and family */ #define RAWIOC_CONNECT RAWIOC|2 /* Connect to peer's address */ #define RAWIOC_GETFAMILY TCPIOC_GETFAMILY /* AFUN - Get address family */ #define RAWIOC_SETFAMILY TCPIOC_SETFAMILY /* AFUN - Set address family */ /* * 4.2 ioctls */ #define IOCPARM_MASK 0x7f /* parameters must be < 128 bytes */ #define IOC_VOID 0x20000000 /* no parameters */ #define IOC_OUT 0x40000000 /* copy out parameters */ #define IOC_IN 0x80000000 /* copy in parameters */ #define IOC_INOUT (IOC_IN|IOC_OUT) /* the 0x20000000 is so we can distinguish new ioctl's from old */ #define _IO(x,y) (IOC_VOID|('x'<<8)|y) #define _IOR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|('x'<<8)|y) #define _IOW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|('x'<<8)|y) /* this should be _IORW, but stdio got there first */ #define _IOWR(x,y,t) (IOC_INOUT|((sizeof(t)&IOCPARM_MASK)<<16)|('x'<<8)|y) #define TIOCREMOTE _IO(t, 105) /* remote input editing */ #define TIOCPKT _IOW(t, 112, int) /* pty: set/clear packet mode */ #define TIOCPKT_DATA 0x00 /* data packet */ #define TIOCPKT_FLUSHREAD 0x01 /* flush packet */ #define TIOCPKT_FLUSHWRITE 0x02 /* flush packet */ #define TIOCPKT_STOP 0x04 /* stop output */ #define TIOCPKT_START 0x08 /* start output */ #define TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */ #define TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */ #define FIONREAD _IOR(f, 127, int) /* get # bytes to read */ #define FIONBIO _IOW(f, 126, int) /* set/clear non-blocking i/o */ #define FIOASYNC _IOW(f, 125, int) /* set/clear async i/o */ #define FIOSETOWN _IOW(f, 124, int) /* set owner */ #define FIOGETOWN _IOR(f, 123, int) /* get owner */ #ifndef FIONCLEX #define FIONCLEX _IO(f, 1) /* Dont close on exec */ #define FIOCLEX _IO(f, 2) /* close on exec */ #endif /* FIONCLEX */ /* * translate BSD ioctl commands to twg ioctl commands. */ #define SIOCGIFCONF IPIOC_GETIFCONF #define SIOCGIFFLAGS IPIOC_GETIFFLAGS #define SIOCGIFADDR IPIOC_GETIFADDR #define SIOCGIFDSTADDR IPIOC_GETIFDSTADDR #define SIOCGIFBRDADDR IPIOC_GETIFBRDADDR #define SIOCGIFMETRIC IPIOC_GETIFMETRIC #define SIOCGIFNETMASK IPIOC_GETIFNETMASK #define SIOCADDRT IPIOC_ADDROUTE #define SIOCDELRT IPIOC_DELETEROUTE #ifdef notdef /* socket i/o controls */ #define SIOCSHIWAT _IOW(s, 0, int) /* set high watermark */ #define SIOCGHIWAT _IOR(s, 1, int) /* get high watermark */ #define SIOCSLOWAT _IOW(s, 2, int) /* set low watermark */ #define SIOCGLOWAT _IOR(s, 3, int) /* get low watermark */ #define SIOCATMARK _IOR(s, 7, int) /* at oob mark? */ #define SIOCSPGRP _IOW(s, 8, int) /* set process group */ #define SIOCGPGRP _IOR(s, 9, int) /* get process group */ #define SIOCADDRT _IOW(r, 10, struct route) /* ADD route */ #define SIOCDELRT _IOW(r, 11, struct route) /* delete route */ #define SIOCSIFADDR _IOW(i, 12, struct ifreq) /* set ifnet address */ #define SIOCGIFADDR _IOWR(i,13, struct ifreq) /* get ifnet address */ #define SIOCSIFDSTADDR _IOW(i, 14, struct ifreq) /* set p-p address */ #define SIOCGIFDSTADDR _IOWR(i,15, struct ifreq) /* get p-p address */ #define SIOCSIFFLAGS _IOW(i, 16, struct ifreq) /* set ifnet flags */ #define SIOCGIFFLAGS _IOWR(i,17, struct ifreq) /* get ifnet flags */ #define SIOCGIFBRDADDR _IOWR(i,18, struct ifreq) /* get broadcast addr */ #define SIOCGIFCONF _IOWR(i,20, struct ifconf) /* get ifnet list */ #define SIOCSIFENADDR _IOW(i, 21, struct ifreq) /* set ethernet addr */ #define SIOCGIFENADDR _IOWR(i,22, struct ifreq) /* get ethernet addr */ #define SIOCSEPIF _IOW(i, 23, struct epcontroller)/* set raw ether */ #define SIOCGEPIF _IOWR(i,24, struct epcontroller)/* get raw ether */ #define SIOCSARP _IOW(i, 30, struct arpreq) /* set arp entry */ #define SIOCGARP _IOWR(i,31, struct arpreq) /* get arp entry */ #define SIOCDARP _IOW(i, 32, struct arpreq) /* delete arp entry */ #endif /* notdef */ #ifdef KERNEL struct ipb *ip_getif(); #endif /* KERNEL */ #ifndef IN_SCCS_ID static char *S_ip = " @(#)ip.h (TWG) 2.8 88/06/22 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ #ifdef XENIX /* DL_IPX25 required for ACC changes - this should really be in * /usr/include/sys/lihdr.h but isn't as yet. */ #define DL_IPX25 5 #endif /* XENIX */ /* * Definitions for internet protocol version 4. * Per RFC 791, September 1981. */ #define IPVERSION 4 #ifdef XENIX /* #pragma pack(1) */ #endif /* * Structure of an internet header, naked of options. * * We declare ip_len and ip_off to be short, rather than ushort * pragmatically since otherwise unsigned comparisons can result * against negative integers quite easily, and fail in subtle ways. */ struct ip { #if (vax || ns32000 || i386) unchar ip_hl:4, /* header length */ ip_v:4; /* version */ #else unchar ip_v:4, /* Version of IP (4) */ ip_hl:4; /* Header length << 2 */ #endif /* vax */ unchar ip_tos; /* type of service */ short ip_len; /* total length */ ushort ip_id; /* identification */ short ip_off; /* fragment offset field */ #define IP_DF 0x4000 /* dont fragment flag */ #define IP_MF 0x2000 /* more fragments flag */ unchar ip_ttl; /* time to live */ unchar ip_p; /* protocol */ ushort ip_sum; /* checksum */ ulong ip_src; /* source address */ ulong ip_dst; /* destination address */ }; #ifdef XENIX /* #pragma pack() */ #endif #define IPHLEN sizeof(struct ip) /* * Definitions for options. */ #define IPOPT_COPIED(o) ((o)&0x80) #define IPOPT_CLASS(o) ((o)&0x40) #define IPOPT_NUMBER(o) ((o)&0x3f) #define IPOPT_CONTROL 0x00 #define IPOPT_RESERVED1 0x10 #define IPOPT_DEBMEAS 0x20 #define IPOPT_RESERVED2 0x30 #define IPOPT_EOL 0 /* end of option list */ #define IPOPT_NOP 1 /* no operation */ #define IPOPT_RR 7 /* record packet route */ #define IPOPT_TS 68 /* timestamp */ #define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ #define IPOPT_LSRR 131 /* loose source route */ #define IPOPT_EXTSECURITY 133 /* DOD extended security */ #define IPOPT_SATID 136 /* satnet id */ #define IPOPT_SSRR 137 /* strict source route */ /* * Offsets to fields in options other then EOL and NOP. */ #define IPOPT_OPTVAL 0 /* option ID */ #define IPOPT_OLEN 1 /* option length */ #define IPOPT_OFFSET 2 /* offset within option */ #define IPOPT_MINOFF 4 /* min value of above */ /* * Time stamp option structure. */ struct ip_timestamp { unchar ipt_code; /* IPOPT_TS */ unchar ipt_len; /* size of structure (variable) */ unchar ipt_ptr; /* index of current entry */ #if defined(R_TO_L_BITS) || defined(vax) || defined(ns32000) || defined(i386) unchar ipt_flg:4, /* flags, see below */ ipt_oflw:4; /* overflow counter */ #else unchar ipt_flag; /* flags, see below */ #endif /* R_TO_L_BITS || vax */ union { ulong ipt_time[1]; struct Ipt_ta { #ifndef XENIX ulong ipt_addr; #else inaddr_t ipt_addr; #endif /* XENIX */ ulong Ipt_time; } ipt_ta[1]; } un_ipts; }; #define IPT_FLG(ipt) ((ipt)->ipt_flag & 0x0f) #define IPT_OVFLW(ipt) (((ipt)->ipt_flag >>4) & 0x0f) /* flag bits for ipt_flg */ #define IPOPT_TS_TSONLY 0 /* timestamps only */ #define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ #define IPOPT_TS_PRESPEC 3 /* specified modules only */ /* bits for security (not byte swapped) */ #ifdef notdef #define IPOPT_SECUR_UNCLASS 0x0000 #define IPOPT_SECUR_CONFID 0xf135 #define IPOPT_SECUR_EFTO 0x789a #define IPOPT_SECUR_MMMM 0xbc4d #define IPOPT_SECUR_RESTR 0xaf13 #define IPOPT_SECUR_SECRET 0xd788 #define IPOPT_SECUR_TOPSECRET 0x6bc5 #endif /* notdef */ /* * U.S. classification levels supported by the new variable length IP Security * Option. Dated 18 MAR 1985. */ #define IPOPT_SECUR_TOPSECRET 0xde #define IPOPT_SECUR_SECRET 0xad #define IPOPT_SECUR_CONFID 0x7a #define IPOPT_SECUR_UNCLASS 0x55 #define IPOPT_SECUR_LENGTH 4 /* * The current list of Accrediting Authorities allowed. */ #define IPOPT_SECUR_MASK 0xf0 #define IPOPT_SECUR_DCA 0x80 /* Defense Communications Agency */ #define IPOPT_SECUR_JCS 0x40 /* Joint Chiefs of Staff */ #define IPOPT_SECUR_DIA 0x20 /* Defense Intelligence Agency */ #define IPOPT_SECUR_NSA 0x10 /* National Security Agency */ #define IPOPT_SECUR_MORE 0x1 /* More Accrediting Authorities in next byte */ /* * Structure for the variable length IP Security Option. * As of 18 MAR 1985, there is only one byte for the authority field. * If this changes, change -- IPOPT_SECUR_LENGTH define. */ struct ipoption_security { unchar ipsec_type; /* 130 */ unchar ipsec_length; /* IPOPT_SECUR_LENGTH */ unchar ipsec_class; /* IPOPT_SECUR_TOPSECRET ... */ unchar ipsec_authority[1]; /* IPOPT_SECUR_DCA ... */ }; /* structure for Stream identifier */ struct ip_satid{ unchar ipsat_code; /* IPOPT_SATID */ unchar ipsat_len; /* size of structure (4) */ ushort ipsat_type; /* stream identifier */ }; /* * Internet implementation parameters. */ #define MAXTTL 255 /* maximum time to live (seconds) */ #define IPFRAGTTL 15 /* time to live for frag chains */ #define IPTTLDEC 1 /* subtracted when forwarding */ extern int iperrcode; #define ILOG(x) {iperrcode = x;} /* * ip error code in ip_input.c */ #define IPE_SMALL 1 /* smaller than ip header */ #define IPE_ALIGN 2 /* rptr not at word boundary */ #define IPE_OPTION 3 /* pullup option failed */ #define IPE_CKSUM 4 /* bad checksum */ #define IPE_BADLEN 5 /* bad ip_len */ #define IPE_SHORT 6 /* mesg too short */ #define IPE_LONG 6 /* mesg too long */ #define IPE_ALLOCB 11 /* allocb failed */ #define IPE_DROPME 21 /* incoming is totally overlapped */ #define IPE_RSADJ1 22 /* adjmsg failed */ #define IPE_RSADJ2 23 /* adjmsg failed */ #define IPE_TTL 26 /* time to live expires */ /* * ip reassembly header: global pointer is 'iprsq' * ipq's next by b_next and prev by b_prev */ struct ipq { struct ipq *ipq_next; /* to other header */ struct ipq *ipq_prev; /* circular link */ unchar ipq_ttl; /* time for reass q to live */ unchar ipq_p; /* protocol of this fragment */ ushort ipq_id; /* sequence id for reassembly */ struct ipfrag *ipq_fnext; /* to 1st fragment */ struct ipfrag *ipq_fprev; /* circular link */ ulong ipq_src; /* ip src address */ ulong ipq_dst; /* ip dst address */ mblk_t *ipq_dtom; /* back pointer to mblk_t */ }; /* * ip header, when holding a fragment. * ipf_fnext must be the same offset of ipq_fnext (for ip_enq()/ip_deq()) * use ip_src/ip_dst field to point to next and prev fragments * use old ip_ttl/ip_p/ip_sum as a pointer to mblk_t */ struct ipfrag { #if (vax || ns32000 || i386) unchar ipf_hl:4, ipf_v:4; #else unchar ipf_v:4, ipf_hl:4; #endif /* vax */ unchar ipf_mff; /* copied from (ip_off&IP_MF) */ short ipf_len; ushort ipf_id; short ipf_off; mblk_t *ipf_dtom; /* back pointer */ struct ipfrag *ipf_fnext; /* next fragment */ struct ipfrag *ipf_fprev; /* previous fragment */ }; /* * flags passed to ip_output as last parameter */ #define IP_FORWARDING 0x1 /* most of ip header exists */ #define IP_ROUTETOIF 0x10 /* same as SO_DONTROUTE */ #define IP_ALLOWBROADCAST 0x20 /* same as SO_BROADCAST */ /* * ip upper queues private data structure */ struct ipd { queue_t *id_rdq; /* read queue */ short id_topid; /* who is on top */ char id_mstate; /* mux state to top */ unchar id_prot; /* tcp/udp/... protocol # */ short id_flags; }; /* * ip bottom queues (for mux) private data structure */ struct ipb { queue_t *ib_wrq; /* write queue */ struct ipb *ib_next; /* Next one in line */ short ib_sap; /* ethernet type or source sap # */ ushort ib_flag; /* see if.h */ unchar ib_mstate; /* mux state to bottom */ unchar ib_bottype; /* down below subnet type: see lihdr.h */ #define if_unit ib_unit unchar ib_unit; /* Unit number */ int ib_metric; /* routing metric (external only) */ struct ifaddr *if_addrlist; #ifdef XENIX #define if_addr ib_myinaddr long ib_myinaddr; /* internet address of local host */ long ib_hisinaddr; /* host (if point-to-point) or net # */ #define ib_net ib_hisinaddr #define ib_broadcastaddr ib_hisinaddr #endif /* XENIX */ ushort ib_maxpsz; /* max packet size going down */ #define ib_mtu ib_maxpsz ushort ib_minpsz; /* min packet size going down */ queue_t *ib_qtop; /* control chan write q */ int ib_cookie; /* cookie from I_LINK/UNLINK */ int ib_ipackets; /* Input Packets Count. */ int ib_opackets; /* Ouput Packets Count. */ ushort ib_ierrors; /* Input Errors */ ushort ib_oerrors; /* Output Errors */ #define IFNAMESIZ 16 #define if_name ib_name unchar ib_name[IFNAMESIZ];/* Fourteen char name max */ }; #ifdef XENIX /* * flags */ #define IFF_UP (1<<0) /* interface is up */ #define IFF_POINTTOPOINT (1<<1) /* point-to-point to 'that' */ #define IFF_ARP (1<<2) /* perform ARP */ #define IFF_BROADCAST (1<<3) /* interface allows broadcasting */ #define IFF_LOCAL (1<<4) /* For Subnets */ #define IFF_ROUTE (1<<5) /* Routing */ #define IFF_BINDNEED (1<<6) /* during binding */ #define IFF_IPTOX25 (1<<10) /* for ACP IPX25 interface */ #endif /* XENIX */ #define ip_bottom ipb /* Only temporary until code is cleaned */ extern struct ipb ipb[]; extern struct ipd ipd[]; extern ipd_cnt, ipb_cnt; #ifdef XENIX extern struct ipb *ip_ifwithaddr(), *ip_ifonnetof(); #endif /* XENIX */ extern struct ipb *ipbnext; #define IPCHAN(idp) ((int)idp - (int)ipd) / sizeof(struct ipd) #define IPBCHAN(ibp) ((int)ibp - (int)ipb) / sizeof(struct ipb) #define IPCTLCHAN 0 /* ip control channel */ /* * Commands from TCP/UDP/RAW in M_CTL */ #define IPIF_UNLINKED 0 /* Module is unlinked */ #define IPIF_LINKED 1 /* Module is linked */ #define IPIF_LINKING 2 /* Modules are linking */ #define IPIF_UNLINKING 3 /* Module is unlinking */ #define IPIF_GETMYADDR 4 /* Get the internet addr */ /*#define IPIF_DATANXT 5 /* Data Follows */ #define IPIF_CLOSED 6 /* The Above Layer is closed */ #define IPIF_CTLERROR 7 /* This is a control Error */ #define IPIF_GETHISADDR 8 /* Get his internet addr */ #define IPIF_OPTIONS 9 /* Set or get options */ /* * The interface to IP from TCP/UDP/RAW. */ union iptun { #iDEFGHfdef IPIF_DATANXT /* * IPIF_DATANXT. */ struct ipindata { ulong ipin_src; /* Source addr. */ ulong ipin_dst; /* Dest. addr */ struct ipb *ipin_rt; /* XXX passed */ } ipindata; #endif /* IPIF_DATANXT */ /* * Linking Stuff */ long ipln_id; /* Module Id. */ /* * IPIF_GETMYADDR */ struct ipun_addr { ulong ipad_addr; /* Address */ long ipad_mtu; /* MTU size of the IF */ } ipun_addr; long ipun_error; /* Error codes from icmp*/ }; typedef short ipfcmd; struct ip_if { ipfcmd ipf_type; /* The command */ union iptun ipf_un; /* All the rest.*/ }; #ifdef IPIF_DATANXT #define ipf_src ipf_un.ipindata.ipin_src #define ipf_dst ipf_un.ipindata.ipin_dst #define ipf_rt ipf_un.ipindata.ipin_rt #endif /* IPIF_DATANXT */ #define ipf_id ipf_un.ipln_id #define ipf_addr ipf_un.ipun_addr.ipad_addr #define ipf_mtu ipf_un.ipun_addr.ipad_mtu #define ipf_srt ipf_un.ipun_addr.ipad_rt #define ipf_errorcode ipf_un.ipun_error /* * Overlay for ip header used by other protocols (tcp, udp). */ struct ipovly { caddr_t ih_next, ih_prev; /* for protocol sequence q's */ unchar ih_x1; /* (unused) */ unchar ih_pr; /* protocol */ short ih_len; /* protocol length */ ulong ih_src; /* source internet address */ ulong ih_dst; /* destination internet address */ }; struct ipstat { int ips_badsum; /* checksum bad */ int ips_tooshort; /* packet too short */ #ifdef SHORT_IDENT int Ips_toosmall; /* not enough data */ #define ips_toosmall Ips_toosmall /* Compiler problems CPP modified */ #else int ips_toosmall; /* not enough data */ #endif /* SHORT_IDENT */ int ips_badhlen; /* ip header length < data size */ int ips_badlen; /* ip length < ip header length */ int ips_forward; /* packets forwarded */ int ips_cantforward; /* packets rcvd for unreachable dest */ int ips_redirectsent; /* packets forwarded on same net */ }; /* * External Interface to IP Managers */ struct ipmgr { long ipm_code; #define IPM_INCALL 661 /* Incoming Call (I_SENDFD preceeds) */ #define IPM_HANGUP 662 /* Take Interface Down */ #define IPM_CMDTYPE 663 /* Not implemented - for future use */ long ipm_inaddr; long ipm_error; long ipm_subcmd; /* Not implemented - for future use */ char ipm_ifname[IFNAMESIZ]; #define IPMGRPSIZ 48 char ipm_fromgroup[IPMGRPSIZ]; char ipm_iodata[IPMGRPSIZ]; /* Space for I/O data */ long ipm_timeout; }; /* * Structure stored in tcpcb.t_ipopt and passed to * ip_output in a message when ip options are in use. * The actual lenght of the options (including ipopt_dst) * is in the msg->b_wptr. */ #define MAX_IPOPTLEN 40 struct ipoption { ulong ipopt_dst; /* first-hop dst if source routed */ char ipopt_list[MAX_IPOPTLEN]; }; /* * IP/ICMP Error Messages. */ #define PRC_IFDOWN 0 /* interface transition */ #define PRC_ROUTEDEAD 1 /* select new route if possible */ #define PRC_QUENCH 4 /* some said to slow down */ #define PRC_MSGSIZE 5 /* message size forced drop */ #define PRC_HOSTDEAD 6 /* normally from IMP */ #define PRC_HOSTUNREACH 7 /* ditto */ #define PRC_UNREACH_NET 8 /* no route to network */ #define PRC_UNREACH_HOST 9 /* no route to host */ #define PRC_UNREACH_PROTOCOL 10 /* dst says bad protocol */ #define PRC_UNREACH_PORT 11 /* bad port # */ #define PRC_UNREACH_NEEDFRAG 12 /* IP_DF caused drop */ #define PRC_UNREACH_SRCFAIL 13 /* source route failed */ #define PRC_REDIRECT_NET 14 /* net routing redirect */ #define PRC_REDIRECT_HOST 15 /* host routing redirect */ #define PRC_REDIRECT_TOSNET 16 /* redirect for type of service & net */ #define PRC_REDIRECT_TOSHOST 17 /* redirect for tos & host */ #define PRC_TIMXCEED_INTRANS 18 /* packet lifetime expired in transit */ #define PRC_TIMXCEED_REASS 19 /* lifetime expired on reass q */ #define PRC_PARAMPROB 20 /* header incorrect */ #define PRC_NCMDS 21 #ifdef PRCREQUESTS char *prcrequests[] = { "IFDOWN", "ROUTEDEAD", "#2", "#3", "QUENCH", "MSGSIZE", "HOSTDEAD", "HOSTUNREACH", "NET-UNREACH", "HOST-UNREACH", "PROTO-UNREACH", "PORT-UNREACH", "FRAG-UNREACH", "SRCFAIL-UNREACH", "NET-REDIRECT", "HOST-REDIRECT", "TOSNET-REDIRECT", "TOSHOST-REDIRECT", "TX-INTRANS", "TX-REASS", "PARAMPROB" }; #endif #ifdef KERNEL #ifdef XENIX struct ipb *if_ifwithaddr(); struct ipb *if_ifwithnet(); unsigned long if_makeaddr(); #endif /*XENIX */ struct ipb *if_ifonnetof(); struct ipb *ip_findemd(); mblk_t *ip_alignmsg(); #endif /* KERNEL */ /* * The following defines and IP_args structure are for * sending "arguments" down to IP from the upper level protocol. * The argument list should be ended with IPENDLIST as the argument type. * The block after the arguments block will contain data. */ #define IPENDLIST 0 #define IPFLAGS 1 #define IPOPTS 3 struct IP_args { ushort IP_type; /* argument type */ ushort IP_length; /* argument length */ }; #ifndef IN_SCCS_ID #ident "@(#)raw.h (TWG) 2.4.1.1 17:38:55 - 88/06/14" #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * raw+ip header, after ip options removed */ struct rawiphdr { struct ipovly ui_i; /* overlaid ip structure */ }; #define ui_next ui_i.ih_next #define ui_prev ui_i.ih_prev #define ui_x1 ui_i.ih_x1 /* maybe use this to hold address family * before calling raw_input(); ip_input * or icmp_input() will have to set it. * See raw_input(). */ #define ui_pr ui_i.ih_pr #define ui_len ui_i.ih_len #define ui_src ui_i.ih_src #define ui_dst ui_i.ih_dst /* * raw per channel structure for the upper queue */ struct rawd { queue_t *rawd_rdq; /* read queue */ int rawd_dev; /* minor device number */ struct tsap rawd_la; /* local address */ struct tsap rawd_fa; /* foreign Address */ struct rawd *rawd_next; /* the next active block down */ mblk_t *rawd_ipopt; /* outgoing ip options */ mblk_t *rawd_ipoptin; /* incoming ip options */ struct sockproto rawd_proto; /* address family & protocol number */ #define rawd_laddr rawd_la.ta_addr #define rawd_sport rawd_la.ta_port #define rawd_fport rawd_fa.ta_port #define rawd_faddr rawd_fa.ta_addr short rawd_topid; /* who is on top */ unchar rawd_prot; /* protocol # on top for demux */ unchar rawd_tstate; /* TLI state */ ushort rawd_flags; /* flags */ ushort rawd_family; /* AFUN - Address family */ }; /* * rawd_flag - ( 1<<0 thru 1<<8 are socket options - see socket.h) */ #define RAW_LADDR (1<<13) #define RAW_FADDR (1<<14) #define RAW_SUPERUSER (1<<15) /* * raw per channel structure for the bottom queue (mux) */ struct rawb { queue_t *rawb_wrq; /* write queue */ int rawb_cookie; /* cookie from LINK/UNLINK */ char rawb_mstate; /* mux state */ short rawb_botid; /* who is down below */ mblk_t *rawb_iocblk; /* temp. holding the M_IOCTL */ queue_t *rawb_qtop; /* control chan write q */ }; /* * ioctl format to the raw module * should be accessible to user */ struct rawioctl { int cookie; /* from mux */ }; /* * from a pointer to rawd, find the dev # * could have been RAWCHAN(tp) ((int)tp - (int)rawd) / sizeof(struct rawd)) */ #define RAWCHAN(tp) tp->rawd_dev #define RAWCTLCHAN 0 /* raw control channel */ #define RAW_ADDRLEN 16 /* Address size */ #define RAW_BINDADDRLEN RAW_ADDRLEN /* raw Address size */ #define RAWPORT_RESERVED 1024 /* raw_input error code */ #define RAWE_HDR 0x01 /* raw header error */ #define RAWE_IDLE 0x02 /* not in TS_IDLE */ #define RAWE_ALLOCB1 0x03 /* allocb failed */ #define RAWE_ALLOCB2 0x04 /* allocb failed */ #define RAWE_DUPMSG 0x05 /* dupmsg failed */ #define RAWE_FULL 0x06 /* queue is full */ #define RAWE_LOOKUP 0x07 /* can't match */ struct rawstat { int raws_hdrops; int raws_busy; int raws_allocb1; int raws_allocb2; int raws_dupmsg; int raws_qfull; int raws_lookup; }; #ifdef INKERNEL extern struct rawstat rawstat; #endif /* INKERNEL */ #ifndef IN_SCCS_ID static char *S_route = " @(#)route.h (TWG) 3.1 88/12/08 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Routing table entry. * If the order of these are changed be sure to * check the ioctl mechanism to change it too. */ struct route { ulong rt_dst; /* The destination */ ulong rt_gateway; short rt_flags; /* Host or Gateway */ ulong rt_net; /* The network number of host */ struct ipb *rt_ipb; /* Pointer to the Bottom end */ struct route *rt_next; /* The next set up route */ unsigned int rt_use; /* Number of time used */ }; /* * rt_flags */ #define RTF_UP 0x1 /* Route is usable */ #define RTF_GATEWAY 0x2 /* The destination is a gateway */ #define RTF_HOST 0x4 /* Host Entry (Net otherwise */ #define RTF_DYNAMIC 0x10 /* Created dynamically (by redirects)*/ /* * Routing statistics. */ struct rtstat { short rts_badredirect; /* bogus redirect calls */ short rts_dynamic; /* routes created by redirects */ short rts_newgateway; /* routes modified by redirects */ short rts_unreach; /* lookups which failed */ short rts_wildcard; /* lookups satisfied by a wildcard */ }; #ifdef KERNEL extern int route_cnt; /* defined in ip master file to be 16 */ extern struct route route[]; struct route *rtalloc(); #endif /* KERNEL */ /* * To accomodate the differences between * streams and 4.3 kernel route structures. */ struct route_map { ulong rtk_hash; struct sockaddr rtk_dst; struct sockaddr rtk_router; short rtk_flags; }; struct route ker_route; #ifndef IN_SCCS_ID static char *S_socket = " @(#)socket.h (TWG) 2.3.1.1 88/06/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* socket.h 6.1 83/07/29 */ /* * Definitions related to sockets: types, address families, options. */ /* * Types */ #define SOCK_STREAM 1 /* stream socket */ #define SOCK_DGRAM 2 /* datagram socket */ #define SOCK_RAW 3 /* raw-protocol interface */ #define SOCK_RDM 4 /* reliably-delivered message */ #define SOCK_SEQPACKET 5 /* sequenced packet stream */ #define SOCK_PAIR 6 /* AFUN - special type for sock pair */ /* * Option flags per-socket. */ #define SO_DEBUG 0x0001 /* turn on debugging info recording */ #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */ #define SO_REUSEADDR 0x0004 /* allow local address reuse */ #define SO_KEEPALIVE 0x0008 /* keep connections alive */ #define SO_DONTROUTE 0x0010 /* just use interface addresses */ #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */ #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ #define SO_LINGER 0x0080 /* linger on close if data present */ #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */ /* * Additional options, not kept in so_options. */ #define SO_SNDBUF 0x1001 /* send buffer size */ #define SO_RCVBUF 0x1002 /* receive buffer size */ #define SO_SNDLOWAT 0x1003 /* send low-water mark */ #define SO_RCVLOWAT 0x1004 /* receive low-water mark */ #define SO_SNDTIMEO 0x1005 /* send timeout */ #define SO_RCVTIMEO 0x1006 /* receive timeout */ #define SO_ERROR 0x1007 /* get error status and clear */ #define SO_TYPE 0x1008 /* get socket type */ /* * Structure used for manipulating linger option. */ struct linger { int l_onoff; /* option on/off */ int l_linger; /* linger time */ }; /* * Level number for (get/set)sockopt() to apply to socket itself. */ #define SOL_SOCKET 0xffff /* options for socket level */ /* * Address families. */ #define AF_UNSPEC 0 /* unspecified */ #define AF_UNIX 1 /* local to host (pipes, portals) */ #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ #define AF_IMPLINK 3 /* arpanet imp addresses */ #define AF_PUP 4 /* pup protocols: e.g. BSP */ #define AF_CHAOS 5 /* mit CHAOS protocols */ #define AF_NS 6 /* XEROX NS protocols */ #define AF_NBS 7 /* nbs protocols */ #define AF_ECMA 8 /* european computer manufacturers */ #define AF_DATAKIT 9 /* datakit protocols */ #define AF_CCITT 10 /* CCITT protocols, X.25 etc */ #define AF_SNA 11 /* IBM SNA */ #define AF_DECnet 12 /* DECnet */ #define AF_DLI 13 /* Direct data link interface */ #define AF_LAT 14 /* LAT */ #define AF_HYLINK 15 /* NSC Hyperchannel */ #define AF_APPLETALK 16 /* Apple Talk */ #define AF_MAX 17 /* * Structure used by kernel to store most * addresses. */ struct sockaddr { ushort sa_family; /* address family */ char sa_data[14]; /* up to 14 bytes of direct address */ }; /* * Structure used by kernel to pass protocol * information in raw sockets. */ struct sockproto { ushort sp_family; /* address family */ ushort sp_protocol; /* protocol */ }; /* * Protocol families, same as address families for now. */ #define PF_UNSPEC AF_UNSPEC #define PF_UNIX AF_UNIX #define PF_INET AF_INET #define PF_IMPLINK AF_IMPLINK #define PF_PUP AF_PUP #define PF_CHAOS AF_CHAOS #define PF_NS AF_NS #define PF_NBS AF_NBS #define PF_ECMA AF_ECMA #define PF_DATAKIT AF_DATAKIT #define PF_CCITT AF_CCITT #define PF_SNA AF_SNA #define PF_DECnet AF_DECnet #define PF_DLI AF_DLI #define PF_LAT AF_LAT #define PF_HYLINK AF_HYLINK #define PF_APPLETALK AF_APPLETALK #define PF_MAX AF_MAX /* * Maximum queue length specifiable by listen. */ #define SOMAXCONN 5 struct iovec { caddr_t iov_base; int iov_len; }; /* * Message header for recvmsg and sendmsg calls. */ struct msghdr { caddr_t msg_name; /* optional address */ int msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* # elements in msg_iov */ caddr_t msg_accrights; /* access rights sent/received */ int msg_accrightslen; }; #define MSG_OOB 0x1 /* process out-of-band data */ #define MSG_PEEK 0x2 /* peek at incoming message */ #define MSG_DONTROUTE 0x4 /* send without using routing tables */ #define MSG_MAXIOVLEN 16 #ifndef IN_SCCS_ID static char *S_socketvar = " @(#)socketvar.h (TWG) 1.5 87/01/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* socketvar.h 6.1 83/07/29 */ /* * Kernel structure per socket. * Contains send and receive buffer queues, * handle on protocol and pointer to protocol * private data and error information. */ struct socket { short so_type; /* generic type, see socket.h */ short so_options; /* from socket call, see socket.h */ short so_linger; /* time to linger while closing */ short so_state; /* internal state flags SS_*, below */ caddr_t so_pcb; /* protocol control block */ struct protosw *so_proto; /* protocol handle */ /* * Variables for connection queueing. * Socket where accepts occur is so_head in all subsidiary sockets. * If so_head is 0, socket is not related to an accept. * For head socket so_q0 queues partially completed connections, * while so_q is a queue of connections ready to be accepted. * If a connection is aborted and it has so_head set, then * it has to be pulled out of either so_q0 or so_q. * We allow connections to queue up based on current queue lengths * and limit on number of queued connections for this socket. */ struct socket *so_head; /* back pointer to accept socket */ struct socket *so_q0; /* queue of partial connections */ short so_q0len; /* partials on so_q0 */ struct socket *so_q; /* queue of incoming connections */ short so_qlen; /* number of connections on so_q */ short so_qlimit; /* max number queued connections */ /* * Variables for socket buffering. */ struct sockbuf { short sb_cc; /* actual chars in buffer */ short sb_hiwat; /* max actual char count */ short sb_mbcnt; /* chars of mbufs used */ short sb_mbmax; /* max chars of mbufs to use */ short sb_lowat; /* low water mark (not used yet) */ short sb_timeo; /* timeout (not used yet) */ struct mbuf *sb_mb; /* the mbuf chain */ struct proc *sb_sel; /* process selecting read/write */ short sb_flags; /* flags, see below */ } so_rcv, so_snd; #define SB_LOCK 0x01 /* lock on data queue (so_rcv only) */ #define SB_WANT 0x02 /* someone is waiting to lock */ #define SB_WAIT 0x04 /* someone is waiting for data/space */ #define SB_SEL 0x08 /* buffer is selected */ #define SB_COLL 0x10 /* collision selecting */ short so_timeo; /* connection timeout */ u_short so_error; /* error affecting connection */ short so_oobmark; /* chars to oob mark */ short so_pgrp; /* pgrp for signals */ /* * Fields used by TLI interface */ short so_event; /* Most recent asynchronous event*/ short so_usrstate; /* socket state as seen by the user */ int so_seq; /* sequence number of connections on */ /* a accept queue */ }; /* * Socket state bits. */ #define SS_NOFDREF 0x001 /* no file table ref any more */ #define SS_ISCONNECTED 0x002 /* socket connected to a peer */ #define SS_ISCONNECTING 0x004 /* in process of connecting to peer */ #define SS_ISDISCONNECTING 0x008 /* in process of disconnecting */ #define SS_CANTSENDMORE 0x010 /* can't send more data to peer */ #define SS_CANTRCVMORE 0x020 /* can't receive more data from peer */ #define SS_RCVATMARK 0x040 /* at mark on input */ #define SS_PRIV 0x080 /* privileged for broadcast, raw... */ #define SS_NBIO 0x100 /* non-blocking ops */ #define SS_ASYNC 0x200 /* async i/o notify */ /* * Macros for sockets and socket buffering. */ /* how much space is there in a socket buffer (so->so_snd or so->so_rcv) */ #define sbspace(sb) \ (MIN((sb)->sb_hiwat-(sb)->sb_cc, ((sb)->sb_mbmax-(sb)->sb_mbcnt))) /* do we have to send all at once on a socket? */ #define sosendallatonce(so) \ (((so)->so_state & SS_NBIO) || ((so)->so_proto->pr_flags & PR_ATOMIC)) /* can we read something from so? */ #define soreadable(so) \ ((so)->so_rcv.sb_cc || ((so)->so_state & SS_CANTRCVMORE) || (so)->so_qlen) /* can we write something to so? */ #define sowriteable(so) \ (sbspace(&(so)->so_snd) > 0 && \ (((so)->so_state&SS_ISCONNECTED) || \ ((so)->so_proto->pr_flags&PR_CONNREQUIRED)==0) || \ ((so)->so_state & SS_CANTSENDMORE)) /* adjust counters in sb reflecting allocation of m */ #define sballoc(sb, m) { \ (sb)->sb_cc += (m)->m_len; \ (sb)->sb_mbcnt += MSIZE; \ if ((m)->m_off > MMAXOFF) \ (sb)->sb_mbcnt += CLBYTES; \ } /* adjust counters in sb reflecting freeing of m */ #define sbfree(sb, m) { \ (sb)->sb_cc -= (m)->m_len; \ (sb)->sb_mbcnt -= MSIZE; \ if ((m)->m_off > MMAXOFF) \ (sb)->sb_mbcnt -= CLBYTES; \ } /* set lock on sockbuf sb */ #define sblock(sb) { \ while ((sb)->sb_flags & SB_LOCK) { \ (sb)->sb_flags |= SB_WANT; \ sleep((caddr_t)&(sb)->sb_flags, PZERO+1); \ } \ (sb)->sb_flags |= SB_LOCK; \ } /* release lock on sockbuf sb */ #define sbunlock(sb) { \ (sb)->sb_flags &= ~SB_LOCK; \ if ((sb)->sb_flags & SB_WANT) { \ (sb)->sb_flags &= ~SB_WANT; \ wakeup((caddr_t)&(sb)->sb_flags); \ } \ } #define sorwakeup(so) sbwakeup(&(so)->so_rcv) #define sowwakeup(so) sbwakeup(&(so)->so_snd) #define sosetevent(so,event) so->so_event |= event #ifdef KERNEL struct socket *sonewconn(); #endif #ifndef IN_SCCS_ID #ident " @(#)tcp.h (TWG) 2.7.1.2 88/11/11 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Definitions of the TCP timers. These timers are counted * down PR_SLOWHZ times a second. */ #define TCPT_NTIMERS 4 #define TCPT_REXMT 0 /* retransmit */ #define TCPT_PERSIST 1 /* retransmit persistance */ #define TCPT_KEEP 2 /* keep alive */ #define TCPT_2MSL 3 /* 2*msl quiet time timer */ #define TCP_ALPHA 7 #define TCP_BETA 16 /* * The TCPT_REXMT timer is used to force retransmissions. * The TCP has the TCPT_REXMT timer set whenever segments * have been sent for which ACKs are expected but not yet * received. If an ACK is received which advances tp->snd_una, * then the retransmit timer is cleared (if there are no more * outstanding segments) or reset to the base value (if there * are more ACKs expected). Whenever the retransmit timer goes off, * we retransmit all unacknowledged segments, and do an exponential * backoff on the retransmit timer. * * The TCPT_PERSIST timer is used to keep window size information * flowing even if the window goes shut. If all previous transmissions * have been acknowledged (so that there are no retransmissions in progress), * and the window is shut, then we start the TCPT_PERSIST timer, and at * intervals send a single byte into the peers window to force him to update * our window information. We do this at most as often as TCPT_PERSMIN * time intervals, but no more frequently than the current estimate of * round-trip packet time. The TCPT_PERSIST timer is cleared whenever * we receive a window update from the peer. * * The TCPT_KEEP timer is used to keep connections alive. If an * connection is idle (no segments received) for TCPTV_KEEP amount of time, * but not yet established, then we drop the connection. If the connection * is established, then we force the peer to send us a segment by sending: * * This segment is (deliberately) outside the window, and should elicit * an ack segment in response from the peer. If, despite the TCPT_KEEP * initiated segments we cannot elicit a response from a peer in TCPT_MAXIDLE * amount of time, then we drop the connection. */ #define TCP_TTL 30 /* time to live for TCP segs */ /* * Time constants. */ #define PR_SLOWHZ 2 /* ticks/second */ #define TCPTV_MSL 1 /* max seg lifetime */ #define TCPTV_SRTTBASE 0 /* base roundtrip time; if 0, no idea yet */ #define TCPTV_SRTTDFLT (15 * PR_SLOWHZ) /* assumed RTT if no info */ #define TCPTV_KEEP ( 45*PR_SLOWHZ) /* keep alive - 45 secs */ #define TCPTV_PERSMIN ( 5*PR_SLOWHZ) /* retransmit persistance */ #define TCPTV_MAXIDLE (8*TCPTV_KEEP) /* maximum allowable idle time before drop conn */ #define TCPTV_MAXRXT 12 /* max times of retransmit */ #define TCPTV_MAXKEEP 10 /* max times of missing keep- alive before drop conn */ #define TCPTV_MIN ( 1*PR_SLOWHZ) /* minimum allowable value */ #define TCPTV_MAX ( 30*PR_SLOWHZ) /* maximum allowable value */ #define TCPTV_REXMT 2 /* retransmit time value */ /* should be adaptive */ #define TCPTV_PERSIST 10 /* randomly chosen */ /* * Force a time value to be in a certain range. */ #define TCPT_RANGESET(tv, value, tvmin, tvmax) { \ (tv) = (value); \ if ((tv) < (tvmin)) \ (tv) = (tvmin); \ if ((tv) > (tvmax)) \ (tv) = (tvmax); \ } typedef unsigned long tcp_seq; /* * TCP header. * Per RFC 793, September, 1981. */ #ifdef XENIX /* #pragma pack(1) */ #endif struct tcphdr { ushort th_sport; /* source port */ ushort th_dport; /* destination port */ tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgement number */ #if ( vax || ns32000 || i386 ) unchar th_x2:4, /* (unused) */ th_off:4; /* data offset */ #else unchar th_off:4, /* Data Offset */ th_x2:4; /* Unused */ #endif /* vax */ unchar th_flags; #define TH_FIN 0x01 #define TH_SYN 0x02 #define TH_RST 0x04 #define TH_PUSH 0x08 #define TH_ACK 0x10 #define TH_URG 0x20 ushort th_win; /* window */ ushort th_sum; /* checksum */ ushort th_urp; /* urgent pointer */ }; #define TCPHLEN sizeof(struct tcphdr) #define TCPOPT_EOL 0 #define TCPOPT_NOP 1 #define TCPOPT_MAXSEG 2 /* * Tcp+ip header, after ip options removed. */ struct tcpiphdr { struct ipovly ti_i; /* overlaid ip structure */ struct tcphdr ti_t; /* tcp header */ }; #ifdef XENIX /* #pragma pack() */ #endif #define ti_next ti_i.ih_next #define ti_prev ti_i.ih_prev #define ti_x1 ti_i.ih_x1 #define ti_pr ti_i.ih_pr #define ti_len ti_i.ih_len #define ti_src ti_i.ih_src #define ti_dst ti_i.ih_dst #define ti_sport ti_t.th_sport #define ti_dport ti_t.th_dport #define ti_seq ti_t.th_seq #define ti_ack ti_t.th_ack #define ti_x2 ti_t.th_x2 #define ti_off ti_t.th_off #define ti_flags ti_t.th_flags #define ti_win ti_t.th_win #define ti_sum ti_t.th_sum #define ti_urp ti_t.th_urp #define TCPIPHLEN sizeof(struct tcpiphdr) /* from tcp_seq.h */ /* * TCP sequence numbers are 32 bit integers operated * on with modular arithmetic. These macros can be * used to compare such integers. */ #define SEQ_LT(a,b) ((int)((a)-(b)) < 0) #define SEQ_LEQ(a,b) ((int)((a)-(b)) <= 0) #define SEQ_GT(a,b) ((int)((a)-(b)) > 0) #define SEQ_GEQ(a,b) ((int)((a)-(b)) >= 0) /* * Macros to initialize tcp sequence numbers for * send and receive from initial send and receive * sequence numbers. */ #define tcp_rcvseqinit(tp) \ (tp)->rcv_nxt = (tp)->irs + 1 #define tcp_sendseqinit(tp) \ (tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \ (tp)->iss #define TCP_ISSINCR 128 /* increment for tcp_iss each second */ extern tcp_seq tcp_iss; /* tcp initial send seq # */ /* * tcp per channel structure for the upper queue */ struct tcpd { queue_t *td_rdq; /* read queue */ mblk_t *td_tcpcb; /* to protocol cntl block */ struct tcpd *td_next; /* The next device in active list */ int td_wcount; /* # of bytes waiting to go down */ int td_rcount; /* # of bytes waiting to go up */ int td_iocid; /* Ioctl id's passed down. */ mblk_t *td_ipopt; /* outgoing ip options */ mblk_t *td_ipoptin; /* incoming ip options */ short td_topid; /* who is on top */ ushort td_sockflags; /* socket option flags */ unchar td_flags; /* see below */ unchar td_dev; /* minor dev # */ unchar td_prot; /* protocol # on top for demux */ unchar td_tstate; /* TLI state */ ushort td_family; /* AFUN - Address family */ }; /* * td_sockflags are the socket option flags (1<<0 thru 1<<8) * as defined in socket.h * * td_flags are as follows: */ #define TD_ERROR (1<<0) /* fatal error occurred */ #define TD_SUPERUSER (1<<1) /* Super User opened it */ #define TD_RDWR (1<<2) /* Don't send M_PROTO for data */ #define TD_NOLINGER (1<<3) /* Connections linger */ #define TD_LINGER ~TD_NOLINGER #define TD_CLOSING (1<<4) /* The user has issued a close */ #define TD_NEWPORT (1<<5) /* This means he needs new port*/ /* * tcp per channel structure for the bottom queue (mux) */ struct tcpb { queue_t *tb_wrq; /* write queue */ int tb_cookie; /* cookie from LINK/UNLINK */ char tb_mstate; /* mux state */ short tb_botid; /* who is down below */ mblk_t *tb_iocblk; /* temp. holding the M_IOCTL */ queue_t *tb_qtop; /* control chan write q */ }; #ifdef notdef /* * ioctl format to the tcp module * should be accessible to user */ struct tcpioctl { int cookie; /* from mux */ }; #endif /* notdef */ /* * from a pointer to tcpd, find the dev # * could have been TCPCHAN(tp) ((int)tp - (int)tcpd) / sizeof(struct tcpd)) */ #define TCPCHAN(tp) tp->td_dev #define TCPCTLCHAN 0 /* tcp control channel */ /* * they should be somewhere else */ #define MUXSID -2 /* sid for sadlog */ #define UNREACH 255 /* unreachable td_tstate */ #define SAMETLIST 254 /* same tli state */ #if i386 extern struct qhead tcpcb; #else extern struct qhead tcb; #endif /* i386 */ extern struct tcpd tcpd[]; extern struct tcpb tcpb; /* * Tcp control block, one per active tcp (after binding) * pointer back to tcpd (tcpd is alloc when the stream is opened) */ struct tcpcb { struct tcpd *t_tdp; /* back pointer to tcpd */ struct tsap t_la; /* local address */ #define t_laddr t_la.ta_addr #define t_lport t_la.ta_port struct tsap t_fa; /* foreign address */ #define t_faddr t_fa.ta_addr #define t_fport t_fa.ta_port struct qhead t_conq; /* conn queue */ long t_cqlen; /* # of indications waiting in conq */ long t_maxcon; /* max # of indications allowed*/ long t_conid; /* conn id when floating */ mblk_t *t_template; /* skeletal packet for transmit */ struct ipb *t_ipb; /* Pointer that is saved not used */ struct qhead t_rsq; /* reassembly queue */ #define t_nseg t_rsq.b_next #define t_pseg t_rsq.b_prev short t_state; /* state of this connection */ ushort t_flags; #define TF_ACKNOW 0x01 #define TF_FORCE 0x02 #define TF_DELACK 0x04 /* Delay the ACK */ #define TF_NOOPT 0x08 #define TF_SENTFIN 0x10 /* have sent fin */ short t_timer[TCPT_NTIMERS]; /* tcp timers */ mblk_t *t_tcpopt; /* tcp options */ ushort t_maxseg; /* maximum segment size */ /* * The following fields are used as in the protocol specification. * See RFC783, Dec. 1981, page 21. */ /* send sequence variables */ ulong snd_una; /* send unacknowledged */ ulong snd_nxt; /* send next */ ulong snd_up; /* send urgent pointer */ ulong snd_wl1; /* window update seg seq number */ ulong snd_wl2; /* window update seg ack number */ ulong iss; /* initial send sequence number */ ushort snd_wnd; /* send window */ /* receive sequence variables */ ushort rcv_wnd; /* receive window */ ulong rcv_nxt; /* receive next */ tcp_seq rcv_adv; /* Advertised window */ ulong rcv_up; /* receive urgent pointer */ ulong irs; /* initial rcv seq number */ /* retransmit variables */ ulong snd_max; /* highest sequence number sent */ ushort t_rxt; /* retransmit times */ ushort t_rtt; /* round trip timer */ tcp_seq t_rtseq; /* Sequence number being timed */ ushort t_srtt; /* Smoothed ROund trip timer */ ushort t_keep; /* # of unacdefghk keep-alive mesg */ /* transmit timing stuff */ ushort t_idle; /* inactivity time */ ushort t_srtv; /* Smoothed Round Trip Variance */ /* source quench */ ushort snd_cwnd; /* congestion controlled window */ mblk_t *t_lafu; /* AFUN - Local afun address */ mblk_t *t_fafu; /* AFUN - Foreign afun address */ }; #define TILOG(x) {errcode = x;} /* * tcp error code in tcp_input.c */ #define TCPE_HDR 1 /* tcp header error */ #define TCPE_SUM 2 /* checksum */ #define TCPE_OFFSET 3 /* bad offset */ #define TCPE_OPTLEN 4 /* tcp option length */ #define TCPE_ALLOCB 5 /* allocb fails */ #define TCPE_LOOKUP 6 /* can't match a tcpcb */ #define TCPE_BASE 7 /* db_base != b_rptr */ #define TCPE_SSACK 10 /* SYN_SENT, got bad ack */ #define TCPE_SSRST 11 /* SYN_SENT, got rst */ #define TCPE_SSSYN 12 /* SYN_SENT, no syn */ #define TCPE_SSADJ 13 /* SYN_SENT, adjmsg */ #define TCPE_RWIN0 21 /* rcv_wnd=0, rcv_nxt != ti_seq */ #define TCPE_OUTSEQ 22 /* rcv seg not in seq */ #define TCPE_RSTRST 25 /* rcv rst, send rst */ #define TCPE_RSTDROP 26 /* rcv rst, don't send rst, just drop */ #define TCPE_BADSYN 27 /* rcv unexpected syn, close user, rst peer */ #define TCPE_NOACK 31 /* TH_ACK is not set, drop seg */ #define TCPE_SRBADACK 32 /* SYN_RCVD, bad ack */ #define TCPE_BADACK 33 /* other than SYN_RCVD, bad ack */ #define TCPE_LASTACK 35 /* get FIN|ACK in LAST_ACK */ #define TCPE_CLOSING 36 /* get FIN|ACK in CLOSING */ #define TCPE_TWAIT 37 /* get FIN|ACK in TIME_WAIT */ #define TCPE_NQRST 41 /* new-req: has rst */ #define TCPE_NQACK 42 /* new-req: has ack */ #define TCPE_NQSYN 43 /* new-req: has no syn */ #define TCPE_PASSFIN 44 /* want to send non-existing stuff */ /* * tcp macros * t_wcc (write count) is exact */ #define t_rhiw(tdp) tdp->td_rdq->q_hiwat #define t_rwin(tdp) (tdp->td_rdq ? (t_rhiw(tdp) - tdp->td_rcount) : 0) #define t_wcc(tdp) tdp->td_wcount /* * TCP FSM state definitions. * Per RFC793, September, 1981. */ #define TCP_NSTATES 11 #define TV_CLOSED 0 /* closed */ #define TV_LISTEN 1 /* listening for connection */ #define TV_SYN_SENT 2 /* active, have sent syn */ #define TV_SYN_RCVD 3 /* have send and received syn */ /* states < TV_ESTABLISHED are those where connections not established */ #define TV_ESTABLISHED 4 /* established */ #define TV_CLOSE_WAIT 5 /* rcvd fin, waiting for close */ /* states > TV_CLOSE_WAIT are those where user has closed */ #define TV_FIN_W1 6 /* have closed, sent fin */ #define TV_CLOSING 7 /* closed xchd FIN; await FIN ACK */ #define TV_LAST_ACK 8 /* had fin and close; await FIN ACK */ /* states > TV_CLOSE_WAIT && < TV_FIN_W2 await ACK of FIN */ #define TV_FIN_W2 9 /* have closed, fin is acked */ #define TV_TIME_WAIT 10 /* in 2*msl quiet wait after close */ #define TV_HAVERCVDSYN(s) ((s) >= TV_SYN_RCVD) #define TV_HAVERCVDFIN(s) ((s) == TV_TIME_WAIT || (s) == TV_CLOSING || \ (s) == TV_LAST_ACK|| (s) == TV_CLOSE_WAIT) #define TV_CANTRCVMORE(s) ((s)==TV_CLOSE_WAIT || (s)==TV_LAST_ACK || \ (s)==TV_CLOSING || (s)==TV_TIME_WAIT) extern mblk_t *tv_popen(), *bp_dupall(); extern struct tcpcb *tn_connreq(); extern int tcp_run_serv, tcp_need_timeout; #define TCP_LOCK_TIMEOUT() {int s; s = splhi(); tcp_run_serv = 1; splx(s);} #define TCP_RUN_TIMEOUT() {int s = splhi(); \ tcp_run_serv = 0; \ if (tcp_need_timeout) { \ (void) splx (s); tcptimeout(); \ }else (void) splx (s); } #define WQREPLY(q, bp) {q = RD(q); putnext(q, bp);} #define TCP_ADDRLEN 16 /* Long + short sizeof does not work */ #ifndef TCP_BINDADDRLEN #define TCP_BINDADDRLEN TCP_ADDRLEN #endif /* TCP_BINDADDRLEN */ #define TCP_BINDACKLEN sizeof(struct T_bind_ack) + TCP_ADDRLEN #define TCP_MAXCONIND 4 /* # of outstanding indications */ #define TCP_CONNCONRESOFFSET sizeof(struct T_conn_con) #define TCP_CONNCONRESLEN TCP_ADDRLEN #define TCP_CONNCONLEN TCP_CONNCONRESOFFSET + TCP_CONNCONRESLEN #define TCP_CONNINDSRCOFFSET sizeof(struct T_conn_ind) #define TCP_CONNINDSRCLEN TCP_ADDRLEN #define TCP_CONNINDLEN TCP_CONNINDSRCOFFSET + TCP_CONNINDSRCLEN #define TCPPORT_RESERVED 1024 /* Non root UID */ struct tcpstat { int tcps_badsum; #ifdef SHORT_IDENT int Tcps_badoff; #define tcps_badoff Tcps_badoff /*Compiler bug */ #else int tcps_badoff; #endif /* SHORT_IDENT */ int tcps_hdrops; #ifdef SHORT_IDENT int TCps_badsegs; #define tcps_badsegs TCps_badsegs /*Compiler */ #else int tcps_badsegs; #endif /* SHORT_IDENT */ int tcps_unack; }; #ifdef TCPSTATES char *tcpstates[] = { "CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD", "ESTABLISHED", "CLOSE_WAIT", "FIN_WAIT_1", "CLOSING", "LAST_ACK", "FIN_WAIT_2", "TIME_WAIT", }; #endif #ifndef IN_SCCS_ID static char *S_time = " @(#)time.h (TWG) 2.2 88/05/17 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* time.h 6.1 83/07/29 */ /* * Structure returned by gettimeofday(2) system call, * and used in other calls. */ struct timeval { long tv_sec; /* seconds */ long tv_usec; /* and microseconds */ }; struct timezone { int tz_minuteswest; /* minutes west of Greenwich */ int tz_dsttime; /* type of dst correction */ }; #define DST_NONE 0 /* not on dst */ #define DST_USA 1 /* USA style dst */ #define DST_AUST 2 /* Australian style dst */ #define DST_WET 3 /* Western European dst */ #define DST_MET 4 /* Middle European dst */ #define DST_EET 5 /* Eastern European dst */ /* * Operations on timevals. * * NB: timercmp does not work for >= or <=. */ #define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) #define timercmp(tvp, uvp, cmp) \ ((tvp)->tv_sec cmp (uvp)->tv_sec || \ (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec) #define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 /* * Names of the interval timers, and structure * defining a timer setting. */ #define ITIMER_REAL 0 #define ITIMER_VIRTUAL 1 #define ITIMER_PROF 2 struct itimerval { struct timeval it_interval; /* timer interval */ struct timeval it_value; /* current value */ }; struct utimbuf { long actime; long modtime; }; #ifndef KERNEL /* * Structure returned by gmtime and localtime calls (see ctime(3)). */ struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; extern struct tm *gmtime(), *localtime(); extern char *asctime(), *ctime(); #endif /* KERNEL */ #ifndef IN_SCCS_ID static char *S_tty_pty = " @(#)tty_pty.h (TWG) 1.6 87/03/12 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ struct pt_ioctl { short pt_flags; short pt_send; struct proc *pt_selr; struct proc *pt_selw; }; /* Flags */ #define PF_PTSOPEN 1 #define PF_PTCOPEN 02 #define PF_PKT 04 #define PF_NBIO 010 #define PF_WTIMER 020 #define PF_REMOTE 040 #define PF_STOPPED 0100 #define PF_NOSTOP 0200 #define PF_WCOLL 0400 #define PF_RCOLL 01000 #ifdef notdef /* * These are already in ioctl.h */ #define TIOCPKT_DOSTOP 1 #define TIOCPKT_NOSTOP 02 #define TIOCPKT_START 04 #define TIOCPKT (('P')<<8|100) #define TIOCREMOTE (('P')<<8|101) #endif /* notdef */ #ifndef IN_SCCS_ID static char *S_udp = " @(#)udp.h (TWG) 2.4.1.1 88/06/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Udp protocol header. * Per RFC 768, September, 1981. */ #ifdef XENIX /* #pragma pack() */ #endif struct udphdr { ushort uh_sport; /* source port */ ushort uh_dport; /* destination port */ short uh_ulen; /* udp length */ ushort uh_sum; /* udp checksum */ }; /* * udp+ip header, after ip options removed */ struct udpiphdr { struct ipovly ui_i; /* overlaid ip structure */ struct udphdr ui_u; /* udp header */ }; #ifdef XENIX /* #pragma pack() */ #endif #define ui_next ui_i.ih_next #define ui_prev ui_i.ih_prev #define ui_x1 ui_i.ih_x1 #define ui_pr ui_i.ih_pr #define ui_len ui_i.ih_len #define ui_src ui_i.ih_src #define ui_dst ui_i.ih_dst #define ui_sport ui_u.uh_sport #define ui_dport ui_u.uh_dport #define ui_ulen ui_u.uh_ulen #define ui_sum ui_u.uh_sum /* * udp per channel structure for the upper queue */ struct udpd { queue_t *ud_rdq; /* read queue */ int ud_dev; /* minor dev # */ struct tsap ud_la; /* local address */ struct tsap ud_fa; /* Foreign Address */ struct udpd *ud_next; /* The next active block down */ mblk_t *ud_ipopt; /* outgoing ip options */ mblk_t *ud_ipoptin; /* incoming ip options */ #define ud_src ud_la.ta_addr #define ud_laddr ud_la.ta_addr #define ud_sport ud_la.ta_port #define ud_fport ud_fa.ta_port #define ud_faddr ud_fa.ta_addr ulong ud_lipaddr; /* local ip addr for chksum */ short ud_topid; /* who is on top */ unchar ud_prot; /* protocol # on top for demux */ unchar ud_tstate; /* TLI state */ mblk_t *ud_lafu; /* AFUN - Local afun address */ mblk_t *ud_fafu; /* AFUN - Foreign afun address */ ushort ud_family; /* AFUN - Address family */ ushort ud_flags; /* Flags */ }; /* * ud_flags - ( 1<<0 thru 1<<8 are socket options - see socket.h) */ #define UD_CONNECT (1<<12) #define UD_CKSUM_IN (1<<13) #define UD_CKSUM_OUT (1<<14) #define UD_SUPERUSER (1<<15) /* * udp per channel structure for the bottom queue (mux) */ struct udpb { queue_t *ub_wrq; /* write queue */ int ub_cookie; /* cookie from LINK/UNLINK */ char ub_mstate; /* mux state */ short ub_botid; /* who is down below */ mblk_t *ub_iocblk; /* temp. holding the M_IOCTL */ queue_t *ub_qtop; /* control chan write q */ }; /* * ioctl format to the udp module * should be accessible to user */ struct udpioctl { int cookie; /* from mux */ }; /* * from a pointer to udpd, find the dev # * could have been UDPCHAN(tp) ((int)tp - (int)udpd) / sizeof(struct udpd)) */ #define UDPCHAN(tp) tp->ud_dev #define UDPCTLCHAN 0 /* udp control channel */ #define UDP_ADDRLEN 16 /* udp Address size (BINDLEN+8) */ #define UDP_BINDADDRLEN UDP_ADDRLEN /* udp Address size */ #define UDPPORT_RESERVED 1024 /* udp_input error code */ #define UDPE_HDR 0x01 /* udp header error */ #define UDPE_SUM 0x02 /* checksum */ #define UDPE_OFFSET 0x03 /* bad offset */ #define UDPE_OPTLEN 0x04 /* option lenght */ #define UDPE_ALLOCB 0x05 /* allocb failed */ #define UDPE_LOOKUP 0x06 /* can't match */ #define UDPE_IDLE 0x07 /* not in TS_IDLE */ #define UDPE_FULL 0x08 /* queue is full */ struct udpstat { int udps_hdrops; int udps_badsum; #ifdef SHORT_IDENT int Udps_badlen; #define udps_badlen Udps_badlen /* Compiler bug */ #else int udps_badlen; #endif /* SHORT_IDENT */ int udps_qfull; int udps_busy; }; #ifdef INKERNEL extern struct udpstat udpstat; #endif /* INKERNEL */ #ifndef IN_SCCS_ID static char *S_un = " @(#)un.h (TWG) 2.1 88/06/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1988. The Wollongong Group, Inc. All Rights Reserved. */ /* * Copyright (c) 1982, 1986 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)un.h 7.1 (Berkeley) 6/4/86 */ /* * Definitions for UNIX IPC domain. */ struct sockaddr_un { short sun_family; /* AF_UNIX */ char sun_path[108]; /* path name (gag) */ }; #ifndef IN_SCCS_ID static char *S_lastlog = " @(#)lastlog.h (TWG) 1.5 87/01/13 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright (c) 1985 The Wollongong Group, Inc. All Rights Reserved */ struct lastlog { time_t ll_time; char ll_line[8]; char ll_host[16]; /* same as in utmp */ }; #ifndef IN_SCCS_ID static char *S_netdb = " @(#)netdb.h (TWG) 2.4 88/05/19 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright (c) 1985 The Wollongong Group, Inc. All Rights Reserved */ /* * Structures returned by network * data base library. All addresses * are supplied in host order, and * returned in network order (suitable * for use in system calls). */ struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; #define h_addr h_addr_list[0] }; #define HOST_NOT_FOUND 1 /* Authoritive Answer Host not found */ #define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */ #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR,REFUSED,NOTIMP */ #define NO_DATA 4 /* Valid host name, no address, look for MX record */ #define NO_ADDRESS NO_DATA /* * Assumption here is that a network number * fits in 32 bits -- probably a poor one. */ struct netent { char *n_name; /* official name of net */ char **n_aliases; /* alias list */ int n_addrtype; /* net address type */ unsigned long n_net; /* network # */ }; struct servent { char *s_name; /* official service name */ char **s_aliases; /* alias list */ int s_port; /* port # */ char *s_proto; /* protocol to use */ }; struct protoent { char *p_name; /* official protocol name */ char **p_aliases; /* alias list */ int p_proto; /* protocol # */ }; #ifdef SHORT_IDENT #define gethostbyaddr Gethostbyaddr #define gethostent GEthostent #define getnetbyaddr Getnetbyaddr #define getnetent GETnetent #define getservbyport Getservbyport #define getservent GEtservent #define getprotobynumber Getprotobynumber #define getprotoent GEtprotoent #ifndef inet_netof #define inet_netof Inet_netof /* For collision look at */ #endif /* inet_netof */ #endif /* SHORT_IDENT */ struct hostent *gethostbyname(), *gethostbyaddr(), *gethostent(); struct netent *getnetbyname(), *getnetbyaddr(), *getnetent(); struct servent *getservbyname(), *getservbyport(), *getservent(); struct protoent *getprotobyname(), *getprotobynumber(), *getprotoent(); #define DEV_TCP "/dev/tcp" #define DEV_UDP "/dev/udp" #define DEV_IP "/dev/ip" #define DEV_LOOP "/dev/loop" #define DEV_RAW "/dev/raw" #define HOSTNAME "/etc/HostName" #define HOSTID "/etc/HostId" #ifndef IN_SCCS_ID static char *S_resolv = " @(#)resolv.h (TWG) 2.7 88/05/18 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. */ /* * Copyright (c) 1983, 1987 Regents of the University of California. * All rights reserved. The Berkeley software License Agreement * specifies the terms and conditions for redistribution. * * @(#)resolv.h 5.5 (Berkeley) 5/12/87 */ /* * Global defines and variables for resolver stub. */ #define MAXNS 3 /* max # name servers we'll track */ #define MAXDNSRCH 3 /* max # default domain levels to try */ #define LOCALDOMAINPARTS 2 /* min levels in name that is "local" */ #define RES_TIMEOUT 10 /* seconds between retries */ struct state { int retrans; /* retransmition time interval */ int retry; /* number of times to retransmit */ long options; /* option flags - see below. */ int nscount; /* number of name servers */ struct sockaddr_in nsaddr_list[MAXNS]; /* address of name server */ #define nsaddr nsaddr_list[0] /* for backward compatibility */ u_short id; /* current packet id */ char defdname[MAXDNAME]; /* default domain */ char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ }; /* * Resolver options */ #define RES_INIT 0x0001 /* address initialized */ #define RES_DEBUG 0x0002 /* print debug messages */ #define RES_AAONLY 0x0004 /* authoritative answers only */ #define RES_USEVC 0x0008 /* use virtual circuit */ #define RES_PRIMARY 0x0010 /* query primary server only */ #define RES_IGNTC 0x0020 /* ignore trucation errors */ #define RES_RECURSE 0x0040 /* recursion desired */ #define RES_DEFNAMES 0x0080 /* use default domain name */ #define RES_STAYOPEN 0x0100 /* Keep TCP socket open */ #define RES_DNSRCH 0x0200 /* search up local domain tree */ #define RES_DEFAULT (RES_RECURSE|RES_DEFNAMES|RES_DNSRCH) extern struct state _res; extern char *p_cdname(), *p_rr(), *p_type(), *p_class(); #ifdef IN_SCCS_ID static char S_routed.h [] = "@(#)routed.h 1.1 18:29:42 - 88/04/20 "; #endif /* IN_SCCS_ID */ /* routed.h (protocol.h) 5.1 6/4/85 */ /* * @(#) Copyright (c) 1988 The Wollongong Group, Inc. All Rights Reserved */ /* * Routing Information Protocol * * Derived from Xerox NS Routing Information Protocol * by changing 32-bit net numbers to sockaddr's and * padding stuff to 32-bit boundaries. */ #define RIPVERSION 1 struct netinfo { struct sockaddr rip_dst; /* destination net/host */ int rip_metric; /* cost of route */ }; struct rip { u_char rip_cmd; /* request/response */ u_char rip_vers; /* protocol version # */ u_char rip_res1[2]; /* pad to 32-bit boundary */ union { struct netinfo ru_nets[1]; /* variable length... */ char ru_tracefile[1]; /* ditto ... */ } ripun; #define rip_nets ripun.ru_nets #define rip_tracefile ripun.ru_tracefile }; /* * Packet types. */ #define RIPCMD_REQUEST 1 /* want info */ #define RIPCMD_RESPONSE 2 /* responding to request */ #define RIPCMD_TRACEON 3 /* turn tracing on */ #define RIPCMD_TRACEOFF 4 /* turn it off */ #define RIPCMD_MAX 5 #ifdef RIPCMDS char *ripcmds[RIPCMD_MAX] = { "#0", "REQUEST", "RESPONSE", "TRACEON", "TRACEOFF" }; #endif #define HOPCNT_INFINITY 16 /* per Xerox NS */ #define MAXPACKETSIZE 512 /* max broadcast size */ /* * Timer values used in managing the routing table. * Every update forces an entry's timer to be reset. After * EXPIRE_TIME without updates, the entry is marked invalid, * but held onto until GARBAGE_TIME so that others may * see it "be deleted". */ #define TIMER_RATE 30 /* alarm clocks every 30 seconds */ #define SUPPLY_INTERVAL 30 /* time to supply tables */ #define EXPIRE_TIME 180 /* time to mark entry invalid */ #define GARBAGE_TIME 240 /* time to garbage collect */ #ifdef IN_SCCS_ID static char S_sigbsd.h [] = "@(#)sigbsd.h (TWG) 2.1 88/05/19 "; #endif /*IN_SCCS_ID*/ #include /* * Signal vector "template" used in sigvec call. */ struct sigvec { int (*sv_handler)(); /* signal handler */ int sv_mask; /* signal mask to apply */ int sv_flags; /* see signal options below */ }; #define SV_ONSTACK 0x0001 /* take signal on signal stack */ #define SV_INTERRUPT 0x0002 /* do not restart system on signal return */ #define sv_onstack sv_flags /* isn't compatibility wonderful! */ /* * Structure used in sigstack call. */ struct sigstack { char *ss_sp; /* signal stack pointer */ int ss_onstack; /* current status */ }; /* * Information pushed on stack when a signal is delivered. * This is used by the kernel to restore state following * execution of the signal handler. It is also made available * to the handler to allow it to properly restore state if * a non-standard exit is performed. */ struct sigcontext { int sc_onstack; /* sigstack state to restore */ int sc_mask; /* signal mask to restore */ int sc_sp; /* sp to restore */ int sc_fp; /* fp to restore */ int sc_ap; /* ap to restore */ int sc_pc; /* pc to restore */ int sc_ps; /* psl to restore */ }; #ifndef IN_SCCS_ID #ident " @(#)win_hook.h (TWG) 3.3 88/11/10 "; #endif /* IN_SCCS_ID */ /* * @(#) Copyright (c) 1987 The Wollongong Group, Inc. All Rights Reserved */ #define WIN_HOOK_NODE "/dev/win-net" #define WIN_HOOK_MASK ('W' << 8) /* * System Call hooks for the psuedo driver. */ #define WIN_SELECT 0 #define WIN_READ 1 #define WIN_WRITE 2 #define WIN_EXEC 3 #define WIN_CLOSE 4 #define WIN_FCNTL 5 #define N_WIN_SYSCALLS 5 struct win_sockinfo { int s_type; struct sockaddr_in s_peer; char s_used; int s_flag; #define WIN_SF_SHUTDOWN0 0x01 /* shutdown 0, I can't recv more data */ #define WIN_SF_RCVDREL 0x02 /* peer will not send any more data */ #define WIN_SF_CANTSYNC 0x04 /* expedite SCLI sync routine */ }; #if !(KERNEL || INKERNEL) extern int __win_hook_fd; extern struct win_sockinfo *_win_sockinfo; extern int s_openfiles; #endif #ifndef _JBLEN #include #endif #ifndef SIGHUP #include #endif #ifndef WSIGEFAULT #define WSIGEFAULT void (*signal ())(); static void (*sigemt)(); static void (*sigbus)(); static void (*sigsegv)(); static jmp_buf w_jmpenv; #define w_sigcatch() \ { \ sigbus = signal (SIGEMT, got_bad_addr); \ sigbus = signal (SIGBUS, got_bad_addr); \ sigsegv = signal (SIGSEGV, got_bad_addr); \ if (setjmp (w_jmpenv) != 0) { \ w_sigrel (); \ errno = EFAULT; \ return -1; \ } \ } static got_bad_addr (sig) { longjmp (w_jmpenv, 1); } #define w_sigrel() \ { \ (void) signal (SIGEMT, sigbus); \ (void) signal (SIGBUS, sigbus); \ (void) signal (SIGSEGV, sigsegv); \ } #endif /* WSIGEFAULT */ ?...@packagemgmt@.?..Awin3bmgmtA.@..BDESCCaddhostDaddnetworkEdelhostFdelnetworkGftpmgmtHnamedmgmtInetshutJnetstartKrcmdmgmtLviewhostsMviewnets # SCCS_ID - "@(#)DESC (TWG) 1.6 87/03/18 " # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# Wollongong Integrated Networking for the 3B #head# WIN/3B NETWORK ADMINISTRATION #help# #help# WIN/3B management tools used to customize your TCP/IP #help# network package and perform various administrative tasks. #help# # SCCS_ID - "@(#)addhost 2.2 88/06/15" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# add a new host to your WIN/3B network #help# #help# Use this command to add the name and internet address of a #help# remote host to the network database so that this machine will #help# be able to communicate to that host using WIN/3B software. #help# # # Verify that user has root permissions. # if [ "`/usr/bin/id | /bin/grep -c 'uid=0(root)'`" = "0" ] then echo "must have superuser privileges to execute $0." exit 1 fi # while true do echo "enter name of network to which new hosts will be added [q to quit]> \c" read network if [ "$network" = "" ] then continue fi if test "$network" = "q" -o "$network" = "quit" then exit fi echo "your host's net name is: ($network) is this what you want? [y, n]> \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi ok=0 if test "$network" != "" then count=`fgrep -c $network /etc/networks` case $count in 0) echo "non-existent network" ;; 1) ok=1 network=`fgrep $network /etc/networks | awk '{ print $1 }'` ;; *) echo "network name or address not unique" ;; esac fi if [ $ok -ne 1 ] then continue fi grep "^# $network" /etc/hosts > /dev/null if [ $? -ne 0 ] then echo "# $network" >> /etc/hosts fi echo "enter internet address, official host name, and aliases (type q when done)" while true do echo "> \c" read netaddr name aname if [ "$netaddr" = "" ] then continue fi if [ "$netaddr" = "q" -o "$netaddr" = "quit" ] then break fi echo "($netaddr $name $aname) is this what you want? [y, n]> \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi if [ "$name" = "" ] then echo "Host name must be specified !" continue fi grep "^$netaddr" /etc/hosts > /dev/null if [ $? -eq 0 ] then echo "Address $netaddr already exists !" continue fi if grep -s "[ ]$name[ ]" /etc/hosts > /dev/null then echo "Name $name already exists !" continue elif grep -s "[ ]$name$" /etc/hosts > /dev/null then echo "Name $name already exists !" continue fi if [ "$aname" != "" ] then for i in $aname do if grep -s "[ ]$i[ ]" /etc/hosts > /dev/null then echo "Alias $i already exists !" continue 2 elif grep -s "[ ]$i$" /etc/hosts > /dev/null then echo "Alias $i already exists !" continue 2 fi done fi echo "entering ($netaddr $name $aname) to /etc/hosts " ed - /etc/hosts <> $Equiv break ;; n|no|N|NO) break ;; *) echo "\nEnter y for yes, n for no: \c" ;; esac done done done # SCCS_ID - "@(#)addnetwork 2.2 88/06/15" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# add a new network entry to WIN/3B #help# #help# Use this command to add the name and number of a network #help# to the network database. #help# # # Verify that user has root permissions. # if [ "`/usr/bin/id | /bin/grep -c 'uid=0(root)'`" = "0" ] then echo "must have superuser privileges to execute $0." exit 1 fi # echo "enter network name, number and aliases [q to quit]" while true do echo "> \c" read network netnum aliases if [ "$network" = "" ] then continue fi if [ "$network" = "q" -o "$network" = "quit" ] then exit fi echo "($network $netnum $aliases) is this what you want? [y, n]> \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi if [ "$netnum" = "" ] then echo "Network number must be specified !" continue fi #grep "^$network" /etc/networks > /dev/null egrep "[ ]$network[ ]|^$network[ ]|[ ]$network\$|^$network\$" /etc/networks > /dev/null if [ $? -eq 0 ] then echo "Network $network already exists !" continue fi egrep "[ ]$netnum[ ]|^$netnum[ ]|[ ]$netnum\$|^$netnum\$" /etc/networks > /dev/null if [ $? -eq 0 ] then echo "Network $netnum already exists !" continue fi echo "entering ($network $netnum $aliases) to /etc/networks " ed - /etc/networks < /dev/null 2>&1 a $network $netnum $aliases . w e /etc/hosts /^127./a # $network . w q ! done # SCCS_ID - "@(#)delhost 2.1 88/06/15" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# remove a host from the WIN/3B network #help# #help# Use this command to delete the entry for a remote host from #help# the network database. #help# # # Verify that user has root permissions. # if [ "`/usr/bin/id | /bin/grep -c 'uid=0(root)'`" = "0" ] then echo "must have superuser privileges to execute $0." exit 1 fi # echo "enter name or internet address of host to remove (type q when done)." while true do echo "> \c" read name if test "$name" = "q" -o "$name" = "quit" then exit fi echo "is ($name) the host you want to remove? [y,n]> \c" read ans if [ "$ans" = "" -o "$ans" = "n" ] then continue fi ok=0 if test "$name" != "" then count=`fgrep -c "$name" /etc/hosts` case $count in 0) echo "non-existent host" ;; 1) ok=1 ;; *) echo "host name or address not unique" ;; esac fi if [ $ok -eq 1 ] then echo "removing ($name) " fgrep -v "$name" /etc/hosts > /tmp/hosts$$ mv /tmp/hosts$$ /etc/hosts if [ -w /etc/hosts.equiv ] then fgrep -v "$name" /etc/hosts.equiv > /tmp/hosts$$ mv /tmp/hosts$$ /etc/hosts.equiv fi if [ -w /.rhosts ] then fgrep -v "$name" /.rhosts > /tmp/hosts$$ cp /tmp/hosts$$ /.rhosts fi if [ -w /usr/spool/rwho/whod.$name ] then rm /usr/spool/rwho/whod.$name fi fi done # SCCS_ID - "@(#)delnetwork 3.1 88/10/28" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# remove a network from the WIN/3B configuration #help# #help# Use this command to delete the entry for a network from #help# the network database. #help# # # Verify that user has root permissions. # if [ "`/usr/bin/id | /bin/grep -c 'uid=0(root)'`" = "0" ] then echo "must have superuser privileges to execute $0." exit 1 fi # echo "enter name of network [q to quit]" while true do echo "> \c" read network if test "$network" = "q" -o "$network" = "quit" then exit fi echo "is ($network) the network you want to delete? [y,n]> \c" read ans if test "$ans" = "" -o "$ans" = "n" then continue fi ok=0 if test "$network" != "" then count=`fgrep -c "$network" /etc/networks` case $count in 0) echo "non-existent network" ;; 1) ok=1 ;; *) echo "network name or address not unique" ;; esac fi if [ $ok -eq 1 ] then num=`fgrep "$network" /etc/networks | awk '{ print $2 }'` if [ "$num" -ne "" ] then grep "^$num" /etc/hosts > /tmp/hosts$$ if [ $? -eq 0 ] then echo "network is not empty. It has the following entries:" cat /tmp/hosts$$ echo "must delete hosts before removing $network from system" else echo "removing ($network) " nam=`fgrep "$network" /etc/hosts` if [ "$nam" -ne "" ] then ed - /etc/hosts < \c" read Answer if [ "$Answer" = "q" -o "$Answer" = "quit" ] then exit 0 fi # # case $Answer in [12]) while true do echo 'Enter name of remote host [q to quit]> \c' read Rhost if [ -z "$Rhost" ] then continue fi if [ "$Rhost" = "q" -o "$Rhost" = "quit" ] then continue 2 fi if [ `egrep -c "[ ]+$Rhost([ ]+|$)" /etc/hosts` -eq 1 ] then Rhost=`egrep "[ ]+$Rhost([ ]+|$)" /etc/hosts | awk '{ print $2 }'` break fi echo "Invalid remote host name" done ;; [45]) if [ $superuser -eq 0 ] then echo "You must have super user privileges to execute this command" continue fi ;; [36]) ;; *) menu=0 continue ;; esac # # # case $Answer in [145]) Ruser="" while test -z "$Ruser" do echo 'Enter login name [q to quit]> \c' read Ruser done if [ "$Ruser" = "q" -o "$Ruser" = "quit" ] then continue fi ;; esac # # # case $Answer in 1) if [ -f $NETRC ] then if [ `fgrep -c "machine $Rhost login $Ruser" $NETRC` -ge 1 ] then echo "\n\tAuto-login already exists for $Rhost:$Ruser" continue fi fi echo "Enter password or if you do not wish to specify a password> \c" stty -echo read password stty echo if [ -z "$password" ] then echo "machine $Rhost login $Ruser" >> $NETRC else echo "machine $Rhost login $Ruser password $password" >> $NETRC fi chmod 600 $NETRC chown $luser $NETRC ;; 2) if [ -s $NETRC ] then if [ `fgrep -c "machine $Rhost" $NETRC` -ge 1 ] then ( mkdir /tmp/win3b$$ ; cd /tmp/win3b$$ NETRCDIR=`dirname $NETRC` fgrep -v "machine $Rhost" $NETRC > .netrc /etc/install -s -f $NETRCDIR .netrc ) rm -rf /tmp/win3b$$ continue fi fi echo "Auto-login thru FTP not enabled for $Rhost" ;; 3) if [ -s $NETRC ] then echo "Auto-login thru FTP enabled for the following hosts" awk '{ print "\t", $2, ":", $4 }' $NETRC echo "Press the RETURN key to see the menu [ q to quit ] : \c" read junk if [ "$junk" = "q" -o "$junk" = "quit" ] then exit 0 fi else echo "\n\tAuto-login thru FTP not enabled for any host" fi ;; 4) echo "$Ruser" >> $FTPUSER ;; 5) if [ -s $FTPUSER ] then if [ `fgrep -xc "$Ruser" $FTPUSER` -ge 1 ] then fgrep -v "$Ruser" $FTPUSER > /tmp/win3b$$ mv /tmp/win3b$$ $FTPUSER continue fi fi echo "\n\t$Ruser: no such user" ;; 6) if [ -s $FTPUSER ] then echo "Following users cannot login to this machine thru FTP" awk '{ print "\t\t", $0 }' $FTPUSER echo "Press the RETURN key to see the menu [ q to quit ] : \c" read junk if [ "$junk" = "q" -o "$junk" = "quit" ] then exit 0 fi else echo "\n\tNo FTP user is currently disallowed" fi ;; esac done # SCCS_ID - "@(#)namedmgmt 2.3 88/06/16" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# Manage Domain Server #help# #help# Use this command to start/stop/reload the name server, dump database, #help# dump statistics, and start/stop debug output. #help# # # Verify that user has root permissions. # if [ "`/usr/bin/id | /bin/grep -c 'uid=0(root)'`" = "0" ] then echo "must have superuser privileges to execute $0." exit 1 fi menu=1 while if [ $menu -eq 1 ] then echo ' Manage Domain Name Server 1) Kill the name server 2) Reload the name server databases 3) Kill the name server and then restart it 4) Dump the name server database and cache to /usr/tmp/named_dump.db 5) Dump the name server stats to /usr/tmp/named.stats 6) Start/Increment debug level of server, output to /usr/tmp/named.run 7) Stop name server debugging ' fi menu=1 true do echo "Enter [ 1 2 3 4 5 6 7 q ] > \c" read Answer if [ "$Answer" = "q" -o "$Answer" = "quit" ] then exit 0 fi if [ "$Answer" = "" ] then continue fi # # case $Answer in 1) /usr/local/domain/named.kill ;; 2) /usr/local/domain/named.reload ;; 3) /usr/local/domain/named.restart ;; 4) /usr/local/domain/named.dump ;; 5) /usr/local/domain/named.stats ;; 6) /usr/local/domain/named.debug ;; 7) /usr/local/domain/named.undebug ;; *) menu=0 continue ;; esac done # SCCS_ID - "@(#)netshut 2.1 88/06/09" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# shutdown WIN/3B network #help# #help# Use this command to stop specific network daemons or to stop #help# all network daemons thus shutting down the network. #help# # # shut down the network by killing all daemons. # # Verify that user has root permissions. # if [ "`/usr/bin/id | /bin/grep -c 'uid=0(root)'`" = "0" ] then echo "must have superuser privileges to execute $0." exit 1 fi trap "rm -f /tmp/winps$$ ; exit 0" 1 2 15 ps -ae | egrep 'sendmail|tcpliste|rwhod|tftpd|routed' \ | awk '{ print " " $4 }' > /tmp/winps$$ if [ -s /tmp/winps$$ ] then echo 'Do you wish to (1) Stop all WIN/3B network daemons (2) Stop a particular WIN/3B network daemon ' while true do echo "Enter [ 1 2 q] > \c" read Answer if [ "$Answer" = "q" -o "$Answer" = "quit" ] then rm -f /tmp/winps$$ exit 0 fi case $Answer in 1) /bin/sh /etc/rc0.d/K76win3b stop echo "All WIN/3B network daemons have been stopped" break ;; 2) echo "The following WIN/3B daemons are running" sort -u /tmp/winps$$ while true do echo "Enter name of daemon to be stopped [q to quit]> \c" read name if [ -z "$name" ] then continue fi if [ "$name" = "q" -o "$name" = "quit" ] then break fi fgrep -x " $name" /tmp/winps$$ > /dev/null if [ $? -eq 0 ] then if [ "$name" = "tcpliste" ] then pids=`ps -e | egrep 'telnetd|rlogind|ftpd' | cut -c1-6` if [ "$pids" != "" ] then kill -18 $pids fi fi kill -9 `ps -e | grep "$name" | cut -c1-6` else echo "$name: no such daemon" fi done break ;; *) ;; esac done rm -f /tmp/winps$$ else echo "No WIN/3B network daemons are running" rm -f /tmp/winps$$ exit fi # SCCS_ID - "@(#)netstart 3.1 88/08/31" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# start up WIN/3B network #help# #help# Use this command to start up a network that had earlier been #help# shut down. #help# # # Verify that user has root permissions. # if [ "`/usr/bin/id | /bin/grep -c 'uid=0(root)'`" = "0" ] then echo "must have superuser privileges to execute $0." exit 1 fi ps -e | egrep 'sendmail|tcpliste|rwhod|tftpd|routed' > /dev/null ans=$? if [ $ans = 0 ] then echo ' The network cannot be started. Some network daemons are still running. Use netshut to stop all daemons and then retry this command' else sh /etc/rc2.d/S??win3b start if [ $? -eq 0 ] then /bin/echo ' WIN/3B network is up .....' else /bin/echo 'netstart failed.' exit 1 fi fi # SCCS_ID - "@(#)rcmdmgmt 2.2 88/07/08" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# manipulate r-cmds database used by remsh, rlogin and rcp #help# #help# Use this command to modify the database used by the remote #help# users to login to this machine through remsh, rlogin and rcp #help# commands. #help# # # check if user has root permissions. # superuser=`/usr/bin/id | /bin/grep -c 'uid=0(root)'` trap "rm -f /tmp/win3b$$ ; exit 0" 1 2 15 luser=`who am i | awk '{ print $1 }'` homedir=`awk -F: '{ if( $1 == name ) print $6 }' name=$luser /etc/passwd` if [ ! -d "$homedir" ] then echo "Home directory for $luser not known" exit 1 fi # # The default placement of the .rhosts file is /usr/admin for root # and the user's home directory for any other user # Ask the root user if he wants it placed in the root directory # # If the user is root if [ "$luser" = "root" ] then # if /.rhosts exists if [ -r /.rhosts ] then RHOST="/.rhosts" # if /.rhosts does not exist else echo ' The .rhosts file is currently in /usr/admin The .rhosts file is a security risk because it allows users to log into your machine. However it is a necessary and useful tool. Keeping the file in /usr/admin will eliminate its usefulness. Placing it in the / directory will let the .rhosts file do its proper job. Do you want the .rhosts file placed in the / directory? \c ' read Response if [ "$Response" = "y" ] then RHOST="/.rhosts" else RHOST="/usr/admin/.rhosts" fi fi else RHOST="$homedir/.rhosts" fi HOSTSEQUIV="/etc/hosts.equiv" menu=1 while if [ $menu -eq 1 ] then echo ' Manipulate r-cmds database used by remsh, rlogin and rcp commands 1) Allow a remote user to auto-login to my account 2) Disallow a remote user to auto-login to my account 3) Allow default auto-login from a remote machine to an identical account on this machine 4) Disallow default auto-login from a remote machine to an identical account on this machine 5) Display names of all remote users who can login to my account 6) Display names of remote machines that have auto-login capability ' fi menu=1 true do echo "Enter [ 1 2 3 4 5 6 q ] > \c" read Answer if [ "$Answer" = "q" -o "$Answer" = "quit" ] then exit 0 fi # # case $Answer in [1234]) if [ \( $Answer -eq 3 -o $Answer -eq 4 \) -a $superuser -eq 0 ] then echo "You must have super user priveleges to execute this command" continue fi while true do echo 'Enter name of remote host [q to quit]> \c' read Rhost if [ -z "$Rhost" ] then continue fi if [ "$Rhost" = "q" -o "$Rhost" = "quit" ] then continue 2 fi if [ `fgrep -c "$Rhost" /etc/hosts` -eq 1 ] then Rhost=`fgrep "$Rhost" /etc/hosts | awk '{ print $2 }'` break fi echo "Invalid remote host name" done ;; 5) ;; 6) ;; *) menu=0 continue ;; esac # # case $Answer in [12]) Ruser="" while test -z "$Ruser" do echo 'Enter login name of remote user [q to quit]> \c' read Ruser done if [ "$Ruser" = "q" -o "$Ruser" = "quit" ] then continue fi ;; esac # # case $Answer in 1) if [ -s $RHOST ] then if [ `fgrep -xc "$Rhost $Ruser" $RHOST` -ge 1 ] then echo "\n\tAuto-login already exists for $Rhost:$Ruser" continue fi fi echo "$Rhost $Ruser" >> $RHOST chmod 644 $RHOST chown $luser $RHOST ;; 2) if [ -s $RHOST ] then if [ `fgrep -xc "$Rhost $Ruser" $RHOST` -ge 1 ] then fgrep -v "$Rhost $Ruser" $RHOST > /tmp/win3b$$ mv /tmp/win3b$$ $RHOST continue fi fi echo "\n\tAuto-login not enabled for $Rhost:$Ruser" ;; 3) if [ -s $HOSTSEQUIV ] then if [ `fgrep -xc "$Rhost" $HOSTSEQUIV` -ge 1 ] then echo "\n\tDefault auto-login already enabled for $Rhost" continue fi fi echo "$Rhost" >> $HOSTSEQUIV ;; 4) if [ -s $HOSTSEQUIV ] then if [ `fgrep -xc "$Rhost" $HOSTSEQUIV` -ge 1 ] then fgrep -v "$Rhost" $HOSTSEQUIV > /tmp/win3b$$ mv /tmp/win3b$$ $HOSTSEQUIV continue fi fi echo "\n\tDefault auto-login not enabled for $Rhost" ;; 5) echo "Following users can auto-login to your account through r-cmds" if [ -s $RHOST ] then awk '{ if ( NF == 1 ) $2 = name ; print "\t" $2, "@", $1 }' name=$luser $RHOST elif [ -s $HOSTSEQUIV -a "$luser" != "root" ] then awk '{ if ( NF == 1 ) $2 = name ; print "\t" $2, "@", $1 }' name=$luser $HOSTSEQUIV else echo "\n\tAuto-login thru r-cmds not enabled for any host\n" fi echo "Press the RETURN key to see the menu [ q to quit ] : \c" read junk if [ "$junk" = "q" -o "$junk" = "quit" ] then exit 0 fi ;; 6) if [ -s $HOSTSEQUIV ] then echo "\nThe following remote machines have auto-login capability:\n" /bin/cat $HOSTSEQUIV else echo "\nNo remote machines have auto-login capibility" fi echo "\nPress the RETURN key to see the menu [ q to quit ] : \c" read junk if [ "$junk" = "q" -o "$junk" = "quit" ] then exit 0 fi ;; esac done # SCCS_ID - "@(#)viewhosts 1.4 87/01/13" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# displays all hosts in a particular WIN/3B network #help# #help# Use this command to display the internet addresses and host names #help# of all hosts on a specific network or on all networks that are #help# currently in the network database. #help# # echo "enter name of network (type q when done)" while true do echo "> \c" read network if test "$network" = "q" -o "$network" = "quit" then exit fi if test "$network" = "" then cat /etc/hosts else count=`fgrep -c $network /etc/networks` case $count in 0) echo "non-existent network" ;; 1) netnum=`fgrep $network /etc/networks | awk '{ print $2 }'` if [ "$netnum" != "" ] then egrep "$network|^$netnum" /etc/hosts fi ;; *) echo "network name or address not unique" ;; esac fi done # SCCS_ID - "@(#)viewnets 1.3 87/01/13" # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # #menu# displays all networks configured #help# #help# Use this command to display the networks names, numbers and aliases #help# of all networks that are currently in the network database. #help# echo "The following networks are configured" grep -v "^#" /etc/networks | awk '{ print "\t" $0 }' N...Onamed.caPnamed.hostsQnamed.localRnamed.revSnamed.kill; SCCS_ID - "@(#)named.ca (TWG) 2.4 88/05/24 " ; ; @(#)root.cache 1.12 (Berkeley) 87/11/19 ; ; Initial cache data for root domain servers. ; . 99999999 IN NS SRI-NIC.ARPA. 99999999 IN NS NS.NASA.GOV. 99999999 IN NS TERP.UMD.EDU. 99999999 IN NS A.ISI.EDU. 99999999 IN NS BRL-AOS.ARPA. 99999999 IN NS GUNTER-ADAM.ARPA. 99999999 IN NS C.NYSER.NET. ; ; Prep the cache (hotwire the addresses). Order does not matter ; SRI-NIC.ARPA. 99999999 IN A 10.0.0.51 SRI-NIC.ARPA. 99999999 IN A 26.0.0.73 NS.NASA.GOV. 99999999 IN A 128.102.16.10 A.ISI.EDU. 99999999 IN A 26.3.0.103 BRL-AOS.ARPA. 99999999 IN A 128.20.1.2 BRL-AOS.ARPA. 99999999 IN A 192.5.25.82 BRL-AOS.ARPA. 99999999 IN A 192.5.22.82 GUNTER-ADAM.ARPA. 99999999 IN A 26.1.0.13 C.NYSER.NET. 99999999 IN A 128.213.5.17 TERP.UMD.EDU. 99999999 IN A 10.1.0.17 $ORIGIN com. twg IN SOA vax2.twg.com. net.vax2.twg.com. ( 10001 3600 300 3600000 3600 ) IN NS vax2.twg.com. IN A 89.0.18.50 IN MX 0 twg.com. IN HINFO "MicroVAX-II" "uVMS 4.7" IN WKS 89.0.18.50 udp named tftp IN WKS 89.0.18.50 tcp echo ftp telnet smtp time named finger $ORIGIN twg.com. localhost IN A 127.0.0.1 IN MX 0 twg.com. vax2 IN A 89.0.18.50 IN MX 5 vax2.twg.com. IN HINFO "VAX-11/750" "VMS 4.3" IN WKS 89.0.18.50 udp named tftp IN WKS 89.0.18.50 tcp echo ftp telnet smtp time named finger daleks IN A 89.0.0.97 IN MX 5 twg.com. IN HINFO "ATT-3B2" "UNIX 5.3" loopback IN A 127.0.0.1 ; SCCS_ID - "@(#)named.local (TWG) 2.2 88/05/19 " ; ; @(#)named.local 1.1 (Berkeley) 86/01/21 ; @ IN SOA vax2.twg.com. root.vax2.twg.com. ( 1.1 ; Serial 3600 ; Refresh 300 ; Retry 3600000 ; Expire 3600 ) ; Minimum IN NS vax2.twg.com. 1 IN PTR loopback.twg.com. $ORIGIN IN-ADDR.ARPA. 89 IN SOA vax2.twg.com. net.vax2.twg.com. ( 2 3600 300 3600000 3600 ) IN NS vax2.twg.com. $ORIGIN 0.0.89.IN-ADDR.ARPA. 97 IN PTR daleks.twg.com. $ORIGIN 18.0.89.IN-ADDR.ARPA. 50 IN PTR vax2.twg.com. p$UøÆ %øàÈ€€Ü€€Ð€ˆÈ.text€€Ð€€Ð%øÐ .data€ˆÈ€ˆÈà&È@.bss€ˆ¨€ˆ¨È€.comment ¶:¨IppÉèL Ip Zt@ @(Ppœ@{øÀ@„@Ȉ€p @,\Ѐ€,\ˆ&€€ ,ÌüŒ€€,Ìô0€€ @,Ìü¸&€€„@„A0axppDœ4L„ÚA„ÚGp€E€F{ ?/QwÜAG„A@�A+Ppwï(G-„OÔˆ€H{ G X,Ìø €€(@w „ÈE„ÈF{ œ H(Xpwà(G(Xpwc O«ˆ€,ÌüD€€€G„OÔˆ€H{-„G@¤@w Oˈ€,ÌüD€€ O͈€ X,ÌøD€€œ H�G(XpwÒ Oш€,ÌüD€€ ,Ìü¸&€€ Ìˆ€ ,Ìøì%€€„@HK HY@ @ ,Ìô&€€„@DC Ìˆ€,Ìü¼€€ ,Ìü¸&€€ H,ÌüÜ €€(Dw& O�ˆ€ OÓˆ€ Ìˆ€,Ìô¨€€ ,Ìü¸&€€ƒÉpY@ @,Ìü0€€„@D<DG( O�ˆ€ Oሀ Ìˆ€ D,Ì𨀀 ,Ìü¸&€€ D E,Ìø”&€€(@C=<ˆ€w O�ˆ€ Oûˆ€,Ìø¨€€{ Oˆ€,Ìü¼€€(Fw  ,Ìü¸&€€(F#,\h€€(@w Ðˆ€ Ðˆ€ ,Ìô4€€ ,Ìü¸&€€ÉüL H G F E D IpH„ZAp€H‡Q@;€©ˆ€w;{ ‡Á@p�A;€©ˆ€wò<@+ <@-w �H‡Á@p�A;€©ˆ€w €@ÉìL H Iü@0B{ ¨ Bü@0@œ@B‡Á@p�A;€©ˆ€wè(H„B@ÉìL H IŒB@ÉìL H IpppH„Oˆ€H<� ˆ€ˆ€CЈ€@„€0ˆ€H Z,Ìü€€€„@@"  Z @,Ìôt&€€  O*ˆ€ ,Ìôt&€€  H H,Ìü€€€ @,Ìôt&€€  O-ˆ€ ,Ìôt&€€ÉìL H IpCœ_ÔL„O€ˆ€E;Å w$;_€Å wŒ@YL H G F E D C I³Å p„ZI„JÌðpœJ„EÌèp„ÅG‡Å à@Ð@@„€´ˆ€H€Ììp$€€Cœ_ÔL„ZE„tI„JÌðpœJ„EÌèp;Å w(;_€Å w„ÌðJŒ@YL H G F E D C I³Å p„ÅG‡Å à@Ð@@„€´ˆ€H€Ììp$€€I„Z@„tAô„CB{î„GAœBG{+w8;È oDv&ÿ H,Ìü¯H”XpC‡G@ @ H,Ìø¯ÿ{„È@�Èp‡GPp;È „ÿ@ÉðL H G I‡G@ÉðL H G IG„ZH„ÈBüBÈG„BÈp;È oD€Xp{ÐãÈ @üÈ€´ˆ€Xp(XpC€@{„X@ÐãÈ AüÈ�´ˆ€A<@AC4ÐãÈ @üÈ€´ˆ€@p„HA„@@CÐãÁ @„€´ˆ€Áp{ €ˆT€ˆe€ˆ{€ˆ‹€ˆ™€ˆµ€ˆÄ€ˆÍ€ˆÖ€ˆ逈ò€ˆû€ˆ€ˆ€ˆ €ˆ;€ˆX€ˆo€ˆ–€ˆ»€ˆÛ€ˆXError 0Not ownerNo such file or directoryNo such processInterrupted system callI/O errorNo such device or addressArg list too longExec format errorBad file numberNo child processesNo more processesNot enough spacePermission deniedBad addressBlock device requiredDevice busyFile existsCross-device linkNo such deviceNot a directoryIs a directoryInvalid argumentFile table overflowToo many open filesNot a typewriterText file busyFile too largeNo space left on deviceIllegal seekRead-only file systemToo many linksBroken pipeArgument out of domainResult too largeNo message of desired typeIdentifier removedChannel number out of rangeLevel 2 not synchronizedLevel 3 haltedLevel 3 resetLink number out of rangeProtocol driver not attachedNo CSI structure availableLevel 2 haltedDeadlock situation detected/avoidedNo record locks availableError 47Error 48Error 49Bad exchange descriptorBad request descriptorMessage tables fullAnode table overflowBad request codeInvalid slotFile locking deadlockBad font file formatError 58Error 59Not a stream deviceNo data availableTimer expiredOut of stream resourcesMachine is not on the networkPackage not installedObject is remoteLink has been severedAdvertise errorSrmount errorCommunication error on sendProtocol errorError 72Error 73Multihop attemptedError 75Error 76Not a data messageError 78Error 79Name not unique on networkFile descriptor in bad stateRemote address changedCan not access a needed shared libraryAccessing a corrupted shared library.lib section in a.out corruptedAttempting to link in more shared libraries than system limitCan not exec a shared library directly€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€Œ€€w€€w€€”€€w€€�€€w€€w€€w€€w€€¨€€|€€w€€„€€œ€€w€€×€€ကကကကကကကကကw€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€ ?€€w€€ Ö€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€ €€€w€€w€€w€€w€€w€€w€€w€€w€€w€€w€€–€€(€€ ?€€ ”€€ Þ€€\€€(€€w€€w€€\€€w€€w€€ p€€w€€w€€w€€²€€w€€ X€€w€€w€€ Œ€€w€€w€€w€€w€€w€€w€€w 000000000000000000000000000000000000000001234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890000000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999-+0123456789ABCDEF0X0123456789abcdef0xnan0xNAN0XinfINF ((((( H„„„„„„„„„„������‚‚‚‚‚‚   !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~CHRCLASSascii/lib/chrclass/@Âå–Æ:õ'iƒ ã_;¼U?ï3½ðRE)ß?9’Ãèp8ñ)ɪ5D}[ %ÿ /-IÝù /å©wÙ5b6,6)d>a<éþM* ÔNâ5µ[!kúj@gØ#Õ*)3)5ÿ•T?=D=)3Ó¡ÿ+DZ^?ë*§ ŠþÁnèÏ#%9ÉXþVYúÛ'A ®ýìHÿ0n:¡˜?ý‚vr'�"Q"�Ôý`(d+42ÿü­MöÌŠ;©üC~€:<q(FûØf¡"7&ž>‚ûnG 978 5q¯5& 1Zó$.HÂå+tj¢']!6è$J� !w5%_^LKza¨N } dP@ff™&f™&hÿüQë!G+…® ÿùA‰ Ò€ÿåD¸ è µ)K šÿâmóÙ5ï«\ÿÞWõ?áY U?}ÿÛF^� z!%þÿØp—h]( –ÿÔZ†(J9°«ÿÑH/ž9Õ!Y,‰ÿ΀ˆ"È€ˆ"È€ˆ°€ˆ"Ѐˆ#p@(#)/lib/crt1.o.sl 1.6 4.2 05/14/87 424 AT&T-SF@(#)namedsigs.c (TWG) 2.1 88/06/16 @(#)/usr/include/stdio.h.sl 1.3 4.2 04/20/87 4140 AT&T-SF@(#)/usr/include/errno.h.sl 1.3 4.2 04/20/87 25066 AT&T-SF@(#)/usr/include/sys/errno.h.sl 1.4 3.1 06/02/86 54087 AT&T-SF@(#)/usr/include/sys/signal.h.sl 1.4 3.0 12/06/85 45123 @(#)/lib/libc.a/atoi.o.sl 1.7 4.2 05/14/87 49983 AT&T-SF@(#)/lib/libc.a/perror.o.sl 1.4 4.2 05/25/87 36792 AT&T-SF@(#)/lib/libc.a/errlst.o.sl 1.1 4.0 01/16/86 43171 AT&T-SF@(#)/lib/libc.a/printf.o.sl 1.4 4.2 05/25/87 25448 AT&T-SF@(#)/lib/libc.a/fprintf.o.sl 1.4 4.2 05/25/87 62983 AT&T-SF@(#)/lib/libc.a/strcmp.o.sl 1.5 4.2 05/25/87 44085 AT&T-SF@(#)/lib/libc.a/execl.o.sl 1.2 4.2 04/20/87 47265 AT&T-SF@(#)/lib/libc.a/execv.o.sl 1.2 4.2 04/20/87 65461 AT&T-SF@(#)/lib/libc.a/execve.o.sl 1.2 4.2 04/20/87 17110 AT&T-SF@(#)/lib/libc.a/fork.o.sl 1.2 4.2 04/20/87 8429 AT&T-SF@(#)/lib/libc.a/strlen.o.sl 1.4 4.2 05/25/87 64518 AT&T-SF@(#)/lib/libc.a/doprnt.o.sl 1.4 4.2 05/25/87 55259 AT&T-SF@(#)/lib/libc.a/ctype.o.sl 1.6 4.2 05/25/87 18739 AT&T-SF@(#)/lib/libc.a/ecvt.o.sl 1.5 4.2 05/25/87 19908 AT&T-SF@(#)/lib/libc.a/dtop.o.sl 1.5 4.2 05/25/87 46978 AT&T-SF@(#)/lib/libc.a/biglitpow.o.sl 1.4 4.2 04/20/87 58018 AT&T-SF@(#)/lib/libc.a/frexp.o.sl 1.4 4.2 05/25/87 14207 AT&T-SF@(#)/lib/libc.a/fwrite.o.sl 1.8 4.2 05/25/87 64556 AT&T-SF@(#)/lib/libc.a/flsbuf.o.sl 1.5 4.2 05/25/87 23439 AT&T-SF@(#)/lib/libc.a/close.o.sl 1.2 4.2 04/20/87 43481 AT&T-SF@(#)/lib/libc.a/data.o.sl 1.1 4.0 01/16/86 48837 AT&T-SF@(#)/lib/libc.a/getenv.o.sl 1.4 4.2 05/25/87 35181 AT&T-SF@(#)/lib/libc.a/isatty.o.sl 1.5 4.2 05/25/87 23069 AT&T-SF@(#)/lib/libc.a/ioctl.o.sl 1.2 4.2 04/20/87 26189 AT&T-SF@(#)/lib/libc.a/ltostr.o.sl 1.6 4.2 05/25/87 35354 AT&T-SF@(#)/lib/libc.a/m32_data.o.sl 1.3 4.2 04/20/87 49169 AT&T-SF@(#)/lib/libc.a/malloc.o.sl 1.6 4.2 05/25/87 41056 AT&T-SF@(#)/lib/libc.a/memchr.o.sl 1.4 4.2 05/25/87 2435 AT&T-SF@(#)/lib/libc.a/memcpy.o.sl 1.4 4.2 05/25/87 41010 AT&T-SF@(#)/lib/libc.a/memset.o.sl 1.4 4.2 05/25/87 32680 AT&T-SF@(#)/lib/libc.a/open.o.sl 1.2 4.2 04/20/87 10730 AT&T-SF@(#)/lib/libc.a/read.o.sl 1.2 4.2 04/20/87 10714 AT&T-SF@(#)/lib/libc.a/sbrk.o.sl 1.4 4.2 05/25/87 32178 AT&T-SF@(#)/lib/libc.a/strcpy.o.sl 1.4 4.2 05/25/87 10565 AT&T-SF@(#)/lib/libc.a/write.o.sl 1.2 4.2 04/20/87 10722 AT&T-SF@(#)/lib/libc.a/fpstart.o.sl 1.2 4.2 04/20/87 31329 AT&T-SF@(#)/lib/libc.a/fpstart0.o.sl 1.2 4.2 04/20/87 32876 AT&T-SF@(#)/lib/libc.a/kill.o.sl 1.2 4.2 04/20/87 5824 AT&T-SF@(#)/lib/libc.a/cerror.o.sl 1.4 4.2 05/25/87 56106 AT&T-SF@(#)/lib/libc.a/cuexit.o.sl 1.2 4.2 04/20/87 28151 AT&T-SF@(#)/lib/crtn.o.sl 1.2 4.2 04/20/87 0 AT&T-SFCommands: (identifiers are shown in uppercase, [] means optional) NAME - print info about the host/domain NAME using default server NAME1 NAME2 - as above, but use NAME2 as server help or ? - print help information set OPTION - set an option all - print options, current server and host [no]debug - print debugging information [no]d2 - print exhaustive debugging information [no]defname - append domain name to each query [no]recurse - ask for recursive answer to query [no]vc - always use a virtual circuit domain=NAME - set default domain name to NAME root=NAME - set root server to NAME retry=X - set number of retries to X timeout=X - set time-out interval to X querytype=X -set querytype to one of A,CNAME,HINFO,MB,MG,MINFO,MR,MX,SOA,WKS type=X - set type to one of A,CNAME,HINFO,MB,MG,MINFO,MR,MX,SOA,WKS server NAME - set default server to NAME, using current default server lserver NAME - set default server to NAME, using initial server finger [> FILE] - finger the current host, with output optionally going to FILE root - set current default server to the root ls [-a -h] NAME [> FILE]- list the domain NAME, with output optionally going to FILE view FILE - sort an 'ls' output file and view it with pg exit - exit from nslookup quit - exit from nslookup U. ..VarpWcircXipYloopZraw[tcp\tty_ptc]tty_pts^udp_w_* @(#)arp 3.1 (TWG) 88/10/28 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * ARP Address Resolution Protocol Driver * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES ofs - arp - - - arp[NARP] (%0x14) arpb[NARPB] (%0x1c) arptab[NARPTAB] (%0x18) arp_cnt (%i) = { NARP } arpb_cnt (%i) = { NARPB } arptab_cnt (%i) = { NARPTAB } Bcastnid (%c%c%c%c%c%c) = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff} $$ NARP = 11 NARPB = 20 NARPTAB = 150 * * @(#)circ 3.1 (TWG) 88/09/08 * * @(#) Copyright 1988. The Wollongong Group, Inc. All Rights Reserved. * * CIRC - STREAMS loop around (or circular) software driver. * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES fs - circ - - - circ_circ[NCIRC] (%l%l%s) circ_cnt (%i) ={NCIRC} $$$ NCIRC = 16 * @(#)ip 2.5 (TWG) 88/05/25 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * IP 3b2 streams driver * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES ofs - ip - - - ipd_cnt (%i) ={NIP} ipd[NIP] (%l%s%s%s) ipb[NIP_BOT] (%0x40) ipb_cnt (%i) = { NIP_BOT } in_cnt (%i) = {ADDRCNT} in_addr[ADDRCNT] (%0x44) route_cnt (%i) = {NROUTES} route[NROUTES] (%0x1c) my_hosts_authority (%c) = {MYAUTHORITY} my_hosts_class (%c) = {MYCLASS} stream_id (%s) = {STREAM} ip_ttl (%c) = {IP_TTL} ip_tos (%c) = {IP_TOS} ipopt_out (%c) = {IPOPT_OUT} $$$ * number of minor devices NIP = 10 * Number of bottom end output drivers NIP_BOT = 10 * total number of addresses assigned to bottom ends ADDRCNT = 10 * Number of entries in the route table NROUTES = 16 * Security authority level MYAUTHORITY = 0x10 * Security Classification MYCLASS = 0x00 * Stream Identifier STREAM = 0x50 * IP time-to-live IP_TTL = 0x0f * IP type-of-service IP_TOS = 0x00 * * Ipopt_out flag is checked when getting IP options with getsockopt. * If set then outgoing options will be returned else the incoming * IP options will be returned to the user. IPOPT_OUT = 0x00 * @(#)loop 1.3 (TWG) 87/01/13 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * IP 3b2 streams driver * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES ofs - lo_ - - - lo_cnt (%i) ={NLOOP} lo_d[NLOOP] (%l%l%l) $$$ * number of minor devices NLOOP = 4 * * @(#)raw 2.2 (TWG) 88/04/29 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * RAW 3b2 streams driver * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES fs - raw - - - rawd_cnt (%i) ={NRAW} rawd[NRAW] ( %0x30 ) rawmsg[NRAW] (%i) $$$ * number of minor devices NRAW = 5 * * @(#)tcp 2.1.1.3 (TWG) 88/09/15 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * TCP 3b2 streams driver * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES ofs - tcp - - - tcpd_cnt (%i) ={NTCP} tcp_maxconind (%i) ={MAXQLEN} tcpd[NTCP] ( %0x2c ) tcp_maxrcvwin (%i) = {MAXTCPWIN} tcp_minrcvwin (%i) = {MINTCPWIN} tcpwindow (%i) = {WINDOW} $$$ * number of minor devices NTCP = 32 MAXQLEN = 12 WINDOW = 4096 MAXTCPWIN = 8192 MINTCPWIN = 512 * * @(#)tty_ptc 3.1 (TWG) 88/09/16 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * User Interface PTC * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES ocs - ptc - pt_tty[NPTY] (%0x58) pt_ioctl[NPTY] (%0xc) pty_cnt (%i) = { NPTY } $$$ NPTY = 8 * @(#)tty_pts 1.4 (TWG) 87/08/13 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * User Interface PTS * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES ocs - pts - * @(#)udp 2.3.1.2 (TWG) 88/12/09 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * UDP 3b2 streams driver * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES fs - udp - - - udpd_cnt (%i) ={NUDP} udpd[NUDP] ( %0x38 ) udpcksum (%i) = {CKSUM} udpwindow (%i) = {HILOWATER} $$$ * number of minor devices NUDP = 16 CKSUM = 1 HILOWATER = 8192 * * @(#)w_ 3.1 (TWG) 88/09/08 * * @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. * * * W_ 3b2 streams driver * *FLAG #VEC PREFIX SOFT #DEV IPL DEPENDENCIES/VARIABLES ocs - W_ - - - w_maxselfiles (%i) = {FILES} w_maxselprocs (%i) = {NPROC} Sel_file_pool[FILES] (%0xc) Sel_list[NPROC] (%0x14) $$$ FILES = 400 `. ..awin3b# # @(#)win3b 3.6 (TWG) 89/04/25 # # @(#) Copyright 1986. The Wollongong Group, Inc. All Rights Reserved. # USAGE="Usage: /etc/init.d/win3b {start | stop}" ETC=/usr/etc case "$1" in 'start') # # Set up the hostname. # /usr/bin/hostname `uname -n` > /dev/null 2>&1 # # Initialize the network and build the streams. # # If processes are already executing, don't re-execute them. # # # Inetinit reads information from the file /usr/etc/net.config # which specifies how streams is configured. # pids=`/bin/ps -e | /usr/bin/egrep "inetinit" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then if ( $ETC/inetinit ) then : else exit 1 fi fi # # Put ifconfig commands here # # # Start up routed # pids=`/bin/ps -e | /usr/bin/egrep "routed" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then : #$ETC/routed; sleep 20 fi # # Start up netstat so that it builds the # /tmp/netstatdata file that it uses for # speed later on. # /usr/bin/netstat > /dev/null # # Start the Domain Nameserver here # pids=`/bin/ps -e | /usr/bin/egrep "named" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then : $ETC/named fi pids=`/bin/ps -e | /usr/bin/egrep "sendmail" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then ( cd /usr/spool/mqueue ; rm -f [lnxf]* ; /usr/lib/sendmail -bd -q30m ) fi # # Start up all the daemons we would like to # have. It looks for the daemons in several # directories. They should have the name # end with a 'd' so that it can identify them # from the name of the service specifed. # pids=`/bin/ps -e | /usr/bin/egrep "tcpliste" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then $ETC/tcplisten ftp finger rlogin remsh rexec telnet fi pids=`/bin/ps -e | /usr/bin/egrep "rwhod" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then $ETC/rwhod fi # Initialize kernel hook echo < /dev/win-net # # Dont start tftpd & routed unless you need it. # tftpd is considered a potential security problem pids=`/bin/ps -e | /usr/bin/egrep "tftpd" | /usr/bin/cut -c1-6` if [ "${pids}" = "" ] then : #$ETC/tftpd fi # # Make /tmp/ftpdlog to have FTPD logging enabled # #/bin/echo "" > /tmp/ftpdlog # # Start up RFS # if [ -s /usr/options/rfs.name ] # RFS installed ? then if [ -s /usr/net/nls/tcp ] # Initialized ? then pids=`grep 105 /usr/net/nls/tcp/dbf` if [ "${pids}" != "" ] then /usr/bin/nlsadmin -q tcp || /usr/bin/nlsadmin -s tcp fi fi fi ;; 'stop') # # If /usr isn't mounted, the daemons cannot be running. # if [ `/etc/mount | grep -c "^/usr on "` -eq 0 ] then exit 0 fi # # send death of child signal in case anyone is remotely logged on # pids=`ps -e | /usr/bin/egrep "telnetd|rlogind|ftpd" | /usr/bin/cut -c1-6` if [ "$pids" != "" ] then kill -18 $pids fi # # Stop All Network Daemons. # pids=`/bin/ps -e | /usr/bin/egrep "tcpliste|tftpd|rwhod|routed|named|sendmail" | /usr/bin/cut -c1-6` if [ "${pids}" != "" ] then /bin/kill -9 ${pids} fi # # Make sure we've nuked all the daemons # sleep 2 pids=`/bin/ps -e | /usr/bin/egrep "ftpd|telnetd|fingerd|rlogind|remshd|named|rexecd" | /usr/bin/cut -c1-6` if [ "${pids}" != "" ] then /bin/kill -9 ${pids} fi # # Kill the listener process associated with the netspec tcp # pids=`/bin/ps -e | /usr/bin/egrep "listen" | /usr/bin/cut -c1-6` if [ "${pids}" != "" ] then /usr/bin/nlsadmin -q tcp && /usr/bin/nlsadmin -k tcp fi # # Kill inetinit now. # pids=`/bin/ps -e | /usr/bin/egrep "inetinit" | /usr/bin/cut -c1-6` if [ "${pids}" != "" ] then /bin/kill -9 ${pids} fi # wait for things to die cnt=0 sleep 2 pids=`/bin/ps -e | /usr/bin/egrep "inetinit" | /usr/bin/cut -c1-6` while [ "$pids" != "" -a $cnt -le 10 ] do sleep 2 cnt=`/bin/expr $cnt + 1` pids=`/bin/ps -e | /usr/bin/egrep "inetinit" | /usr/bin/cut -c1-6` done # if inetinit is still alive then warn user if [ "$pids" != "" ] then echo "\n\t *** WARNING - couldn't kill inetinit ***" fi ;; *) echo ${USAGE} exit 1 ;; esac # SCCS_ID - "@(#)hosts (TWG) 1.1 87/03/23 " # # WIN/3B HOST TABLE # # Place your favorite hosts here... 127.1 me loopback localhost ; SCCS_ID - "@(#)named.boot (TWG) 3.1 88/10/13 " ; ; @(#)named.boot 1.3 (Berkeley) 86/01/30 ; ; boot file for secondary name server ; Note that there should be one primary entry for each SOA record. ; ; type domain source file or host ; directory /usr/local/domain ; running directory for named primary twg.com /usr/local/domain/named.hosts primary 89.IN-ADDR.ARPA /usr/local/domain/named.rev primary 0.0.127.IN-ADDR.ARPA /usr/local/domain/named.local slave cache . /usr/local/domain/named.ca # SCCS_ID - "@(#)networks (TWG) 1.1 87/07/07 " # # Internet networks (reordered for local efficiency) # Loopback 127 software-loopback-net # SCCS_ID - "@(#)protocols (TWG) 1.1 86/11/26 " # # Internet (IP) protocols # ip 0 IP # internet protocol, psuedo protocol number icmp 1 ICMP # internet control message protocol ggp 2 GGP # gateway-gateway protocol tcp 6 TCP # transmission control protocol pup 12 PUP # PARC universal packet protocol udp 17 UDP # user datagram protocol # SCCS_ID - "@(#)resolv.conf 2.1 15:22:43 - 87/11/13 " domain twg.com nameserver 89.0.18.50 nameserver 89.0.18.54 nameserver 89.0.0.1 # SCCS_ID - "@(#)services (TWG) 2.2 88/06/09 " # # Network services, Internet style # echo 7/tcp netstat 15/tcp ftp-dat 20/tcp ftp 21/tcp telnet 23/tcp smtp 25/tcp mail named 53/tcp named 53/udp nicname 101/tcp hostname # exist 545/tcp vftp 1777/udp udp 1888/udp # # Host specific functions # tftp 69/udp finger 79/tcp # # Unix specific services # exec 512/tcp rexec 512/tcp rlogin 513/tcp login remsh 514/tcp shell rsh cmd # no passwords used who 513/udp whod syslog 514/udp talk 517/udp route 520/udp router routed #521 also åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå2ÿþýüûúùø÷öõôóòñðïîíìëêéèçæåäãâáàßÞÝÜÛÚÙØ×ÖÕÔÓÒÑÐÏÎåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå210/.-,+*)('&%$#"!      åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå2cba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:98765432åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå2•”“’‘��Ž�Œ‹Š‰ˆ‡†…„ƒ‚�€~}|{zyxwvutsrqponmlkjihgfedåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå2ÆÅÄÃÂÁÀ¿¾½¼»º¹¸·¶µ´³²±°¯®­¬«ª©¨§¦¥¤£¢¡ Ÿž�œ›š™˜—–ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÊ^` P Ÿÿÿÿÿÿÿÿÿ���ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå