	 kêÜN å}·:å}·:ÿÿÿby name         by name                         d   
kê²ž ª¤ ¤�          x  å}·:å}·:å}·:!      #°  Ÿb  x      ./lpp_name                   ó/      ¤�          4 R I freeware.perl.md5 {
freeware.perl.md5.rte 02.12.0000.0000 01 N U en_US MD5 - perl extension
[
>0 {
*prereq freeware.perl.rte 5.6.0.1
*prereq perl.rte 5.5.3.0
}
%
/usr 6
/usr/local 4
/usr/local/man 126
/usr/local/man/man3 38
/usr/local/lib 2
/usr/local/lib/MD5-2.12 149
/usr/local/lib/MD5-2.12/examples 6
/usr/local/lib/MD5-2.12/t 132
/usr/lpp 2
/usr/lpp/freeware.perl.md5 
/usr/opt 2
/usr/opt/perl5 2
/usr/opt/perl5/lib 2
/usr/opt/perl5/lib/site_perl 2
/usr/opt/perl5/lib/site_perl/5.005 2
/usr/opt/perl5/lib/site_perl/5.005/aix 21
/usr/opt/perl5/lib/site_perl/5.005/aix/auto 2
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest 6
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5 37
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2 36
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1 39
/usr/opt/perl5/lib/site_perl/5.005/aix/Digest 35
INSTWORK 56 56
%
%
%
%
]
}
kê´Ù Š¤ íA           Ý}·:ã}·:ã}·:!      #0  Ùj         ./usr/lpp/freeware.perl.md5                  ó/      íA         kêN„ ¤¤ ¤�          |d  ã}·:ä}·:ä}·:!      #   ×r  |d      ./usr/lpp/freeware.perl.md5/liblpp.a                 ó/      ¤�          <bigaf>
25246               0                   0                   128                 22090               0                   2375                2642                0                   985103836   0           0           644         24  freeware.perl.md5.rte.al`
./usr/local/man/man3/Digest__MD2.3
./usr/local/man/man3/Digest__SHA1.3
./usr/local/man/man3/SHA.3
./usr/local/man/Digest.3
./usr/local/man/Digest__HMAC_SHA1.3
./usr/local/man/Digest__MD2.3
./usr/local/man/Digest__MD5.3
./usr/local/man/Digest__SHA1.3
./usr/local/man/MD5.3
./usr/local/man/SHA.3
./usr/local/man/Digest__HMAC.3
./usr/local/man/Digest__HMAC_MD5.3
./usr/local/lib/MD5-2.12/Changes
./usr/local/lib/MD5-2.12/README
./usr/local/lib/MD5-2.12/rfc1321.txt
./usr/local/lib/MD5-2.12/rfc2104.txt
./usr/local/lib/MD5-2.12/examples/twdigest.pl
./usr/local/lib/MD5-2.12/examples/mddriver.pl
./usr/local/lib/MD5-2.12/MANIFEST
./usr/local/lib/MD5-2.12/t/digest.t
./usr/local/lib/MD5-2.12/t/badfile.t
./usr/local/lib/MD5-2.12/t/rfc2202.t
./usr/local/lib/MD5-2.12/t/md5.t
./usr/local/lib/MD5-2.12/t/files.t
./usr/local/lib/MD5-2.12/t/md5-aaa.t
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.so
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.bs
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/.packlist
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.so
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.bs
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.so
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.bs
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD5.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_SHA1.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_MD5.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD2.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/SHA1.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/MD5.pm
./usr/opt/perl5/lib/site_perl/5.005/aix/SHA.pm
./usr/local
./usr/local/man
./usr/local/man/man3
./usr/local/lib
./usr/local/lib/MD5-2.12
./usr/local/lib/MD5-2.12/examples
./usr/local/lib/MD5-2.12/t
./usr/opt/perl5
./usr/opt/perl5/lib
./usr/opt/perl5/lib/site_perl
./usr/opt/perl5/lib/site_perl/5.005
./usr/opt/perl5/lib/site_perl/5.005/aix
./usr/opt/perl5/lib/site_perl/5.005/aix/auto
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest
 1414                4202                128                 975504791   0           0           644         31  freeware.perl.md5.rte.copyright `


		MD5 - Perl interface to the
	RSA Data Security Inc. MD5 Message-Digest Algorithm
Copyright 1998-2000 Gisle Aas.
Copyright 1998 Graham Barr.
Copyright 1997 Uwe Hollerbach.
Copyright 1995-1996 Neil Winton.
Copyright 1990-1992 RSA Data Security, Inc.

Plaese refer to the README file delivered in the directory
/usr/local/lib/MD5-2.12 for complete details. The other files delivered
in the same directory should also be read.

Packaging is Copyright (C) 2000 BULL SA. 

This LPP shall not be redistributed commercially. Software, information
and material distributed as freeware or shareware (hereinafter the
"Materials") are provided "as is", without warranty of any kind.

Bull and its suppliers disclaim all warranties whether expressed or
implied, including, but not limited to the implied warranties of
merchantability and fitness for a particular purpose. The entire risk
as to the quality and performance of the Materials is with you.
Neither Bull nor its suppliers warrant that the functions contained
in the Materials will meet your requirements or that the Materials
will be error free.

Bull  and  its suppliers shall in no event be liable for direct or indirect
damage  caused  to  the  User  or to third parties by use of the Materials,
whether  in  an  action  of  contract, negligence or other tortious action,
arising  out  of  or  in  connection  with  the  use  or performance of the
Materials.
10223               14572               2642                985103843   0           0           644         31  freeware.perl.md5.rte.inventory `
/usr/local/man/man3/Digest__MD2.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5511
	checksum = "24292     6  "

/usr/local/man/man3/Digest__SHA1.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 7109
	checksum = "55971     7  "

/usr/local/man/man3/SHA.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5534
	checksum = "12154     6  "

/usr/local/man/Digest.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 9208
	checksum = "37258     9  "

/usr/local/man/Digest__HMAC_SHA1.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5042
	checksum = "11646     5  "

/usr/local/man/Digest__MD2.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5511
	checksum = "24292     6  "

/usr/local/man/Digest__MD5.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 11149
	checksum = "43697     11  "

/usr/local/man/Digest__SHA1.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 7109
	checksum = "55971     7  "

/usr/local/man/MD5.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5275
	checksum = "63339     6  "

/usr/local/man/SHA.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5534
	checksum = "12154     6  "

/usr/local/man/Digest__HMAC.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5376
	checksum = "58836     6  "

/usr/local/man/Digest__HMAC_MD5.3:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 5028
	checksum = "46025     5  "

/usr/local/lib/MD5-2.12/Changes:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 11655
	checksum = "65510     12  "

/usr/local/lib/MD5-2.12/README:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 903
	checksum = "36523     1  "

/usr/local/lib/MD5-2.12/rfc1321.txt:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 35223
	checksum = "39518     35  "

/usr/local/lib/MD5-2.12/rfc2104.txt:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 22297
	checksum = "58937     22  "

/usr/local/lib/MD5-2.12/examples/twdigest.pl:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 794
	checksum = "12523     1  "

/usr/local/lib/MD5-2.12/examples/mddriver.pl:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 1485
	checksum = "50511     2  "

/usr/local/lib/MD5-2.12/MANIFEST:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 1720
	checksum = "51300     2  "

/usr/local/lib/MD5-2.12/t/digest.t:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 409
	checksum = "51394     1  "

/usr/local/lib/MD5-2.12/t/badfile.t:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 452
	checksum = "19534     1  "

/usr/local/lib/MD5-2.12/t/rfc2202.t:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 14412
	checksum = "03489     15  "

/usr/local/lib/MD5-2.12/t/md5.t:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 3873
	checksum = "01485     4  "

/usr/local/lib/MD5-2.12/t/files.t:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 2923
	checksum = "15402     3  "

/usr/local/lib/MD5-2.12/t/md5-aaa.t:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 42917
	checksum = "40830     42  "

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.so:
	owner = root
	group = system
	mode = 555
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 16677
	checksum = "09884     17  "

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.bs:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 0
	checksum = "00000     0  "

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/.packlist:
	owner = root
	group = system
	mode = 644
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 848
	checksum = "15671     1  "

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.so:
	owner = root
	group = system
	mode = 555
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 17483
	checksum = "23233     18  "

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.bs:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 0
	checksum = "00000     0  "

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.so:
	owner = root
	group = system
	mode = 555
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 19016
	checksum = "36292     19  "

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.bs:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 0
	checksum = "00000     0  "

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD5.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 6462
	checksum = "37418     7  "

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 2433
	checksum = "10379     3  "

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_SHA1.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 1133
	checksum = "53665     2  "

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_MD5.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 1114
	checksum = "63070     2  "

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD2.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 1398
	checksum = "46995     2  "

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/SHA1.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 2679
	checksum = "57361     3  "

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 4733
	checksum = "34536     5  "

/usr/opt/perl5/lib/site_perl/5.005/aix/MD5.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 1159
	checksum = "46174     2  "

/usr/opt/perl5/lib/site_perl/5.005/aix/SHA.pm:
	owner = root
	group = system
	mode = 444
	type = FILE
	class = apply,inventory,freeware.perl.md5.rte
	size = 1608
	checksum = "08388     2  "

/usr/local:
	owner = bin
	group = bin
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/local/man:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/local/man/man3:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/local/lib:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/local/lib/MD5-2.12:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/local/lib/MD5-2.12/examples:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/local/lib/MD5-2.12/t:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005/aix:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005/aix/auto:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

/usr/opt/perl5/lib/site_perl/5.005/aix/Digest:
	owner = root
	group = system
	mode = 755
	type = DIRECTORY
	class = apply,inventory,freeware.perl.md5.rte

 2817                17532               4202                975504484   0           0           755         28  freeware.perl.md5.rte.post_i`
#!/usr/bin/ksh
LANG=C
VERBOSE=${VERBOSE:-"0"}                 # simple debug system
appname="${0##*/}"   # $(basename $0)

#	Pre- and Post install template scripts
#	Copyright (C) 2000 GROUPE BULL
#	all rights reserved.
#
#   author: Ciaran Deignan (Ciaran.Deignan@bull.net)
#   started: July 1997, last modified July 2000
#   version: 2.0

#------------------------------------------------------------------
#  GLOBAL UTILITIES
#------------------------------------------------------------------

# Debug message print function (v1.0 - July 1998)
debug()
{
	integer lev=$1
	shift
	
	[ $VERBOSE -ge $lev ] && print -- "$@" >&2
	return 0
}

# error handler (v2.1 - July 1998):
cmd()
{
	debug 7 "CMD: execute '$@'"
        eval '"$@"'
        [ $? -ne 0 ] && debug 0 "$appname: CMD: error detected in '$@'" \
		 && exit 2
}

typeset -xf cmd debug
[ $VERBOSE -gt 9 ] && set -x
#------------------------------------------------------------------
debug 2 "$appname: starting execution, params <$*>";

# Function to update the file /usr/local/info/dir
#  This function should be used if the LPP delivers files into
#  /usr/local/info
#  NOTE: the file /usr/local/info/dir should *never* be delivered directly...
update_info_dir()
{
	if ! [ -d /usr/local/info ]
	then
		debug 1 "No info directory found !"
		debug 1 "stopping"
		return 0
	fi

	if type gen-dir-node >/dev/null 2>&1
	then
		print "Updating info \"root\" file (/usr/local/info/dir)"
		cmd cd /usr/local/info
		[ -f dir ] && cmd mv dir dir.bak
		cmd gen-dir-node /usr/local/info/ > dir
		cmd chmod 444 dir
	fi
}

# Perl module update function...
update_perllocal ()
{

	if [ "$PERLLIB" = "" ] || [ ! -d "$PERLLIB" ]
	then
		print "update_perllocal: PERLLIB not defined (=$PERLLIB)"
		return 0
	fi
	archdir=${archdir:-"aix"}

	# the directory /usr/local/lib/perl5/ ($PERLLIB) should exist, or might
	# be a symbolic link to /usr/opt/perl5/lib....
	if ! cd $PERLLIB/.
	then
		print "Perl not installed correctly, can't find directory"
		print "$PERLLIB"
		exit 1
	fi

	if ! ls */$archdir/perllocal.pod > /dev/null 2>&1
	then
		filename=$(ls -td 5.*/$archdir | line)
		if [ "$filename" = "" ]
		then    
			cmd print "Perl not installed correctly, can't find \c"
			cmd print "directory $PERLLIB/5.00*/$archdir"
			exit 3
		fi
		filename="$filename/perllocal.pod"
	else
		filename=$(cmd ls -t */$archdir/perllocal.pod | line)
	fi

	# use a "hello-script" to add info to perllocal.pod....
	cmd cat >>$filename <<MODULEINFO
=head2 Wed Nov 29 14:26:09 2000: C<Module> L<Digest::MD5>

=over 4

=item *

C<installed into: /usr/opt/perl5/lib/site_perl/5.005>

=item *

C<LINKTYPE: dynamic>

=item *

C<VERSION: 2.12>

=item *

C<EXE_FILES: >

=back

MODULEINFO


}

#PERLLIB=/usr/local/lib/perl5/
PERLLIB=/usr/opt/perl5/lib/
#archdir=ia64-aix
update_perllocal 

exit 0

 3560                21234               14572               985103834   0           0           755         27  freeware.perl.md5.rte.pre_i `
#!/usr/bin/ksh
LANG=C
VERBOSE=${VERBOSE:-"0"}                 # simple debug system
appname="${0##*/}"   # $(basename $0)

#	Pre- and Post install template scripts
#	Copyright (C) 2000 GROUPE BULL
#	all rights reserved.
#
#   author: Ciaran Deignan (Ciaran.Deignan@bull.net)
#   started: July 1997, last modified July 2000
#   version: 2.0

#------------------------------------------------------------------
#  GLOBAL UTILITIES
#------------------------------------------------------------------

# Debug message print function (v1.0 - July 1998)
debug()
{
	integer lev=$1
	shift
	
	[ $VERBOSE -ge $lev ] && print -- "$@" >&2
	return 0
}

# error handler (v2.1 - July 1998):
cmd()
{
	debug 7 "CMD: execute '$@'"
        eval '"$@"'
        [ $? -ne 0 ] && debug 0 "$appname: CMD: error detected in '$@'" \
		 && exit 2
}

typeset -xf cmd debug
[ $VERBOSE -gt 9 ] && set -x
#------------------------------------------------------------------
debug 2 "$appname: starting execution, params <$*>";
slibclean

# Function to allow perl modules compiled for a "freeware" (/usr/local)
# perl to be installed on top of an "IBM" (/usr/opt/perl5) perl.
make_perl_f2i_links()
{
	# Clean up historic symbolic links if there's any...
	[ -h /usr/opt/perl5/lib ]      && rm /usr/opt/perl5/lib
	
	# Make /usr/local/lib/perl5 be a symbolic link to IBM perl lib dir.
	if [ ! -e /usr/local/lib/perl5 ] && [ -d /usr/opt/perl5/lib ]
	then
		[ -d /usr/local/lib ] || cmd mkdir -p /usr/local/lib
		cmd ln -s /usr/opt/perl5/lib /usr/local/lib/perl5 
	fi
	if [ ! -e /usr/local/bin/perl ] && [ -e /usr/opt/perl5/bin/perl ]
	then
		[ -d /usr/local/bin ] || cmd mkdir    /usr/local/bin
		cmd ln -s /usr/opt/perl5/bin/perl /usr/local/bin/perl
	fi
}

# Function to allow perl modules compiled for an "IBM" (/usr/opt/perl5)
# perl to be installed on top of a "freeware" (/usr/local) perl.
make_perl_i2f_links()
{
	# Clean up historic symbolic links if there's any...
	[ -h /usr/local/lib/perl5 ]      && rm /usr/local/lib/perl5
	
	# Make /usr/opt/perl5/lib be a symbolic link to standard perl lib dir.
	if [ ! -e /usr/opt/perl5/lib ] && [ -d /usr/local/lib/perl5 ]
	then
		[ -d /usr/opt/perl5 ] || cmd mkdir -p /usr/opt/perl5
		cmd ln -s /usr/local/lib/perl5 /usr/opt/perl5/lib
	elif [ ! -e /usr/opt/perl5/lib/5.00503 ] 
	# If "lib" directory already exists, just make 5.00503 link...
	then
		cmd cd /usr/local/lib/perl5
		if [ -d 5.6.0 ]
		then
			cmd ln -s /usr/local/lib/perl5/5.6.0 /usr/opt/perl5/lib/5.00503
		elif [ -d 5.6.1 ]
		then
			cmd ln -s /usr/local/lib/perl5/5.6.1 /usr/opt/perl5/lib/5.00503
		fi
	fi
	if [ ! -e /usr/opt/perl5/bin/perl ] && [ -e /usr/local/bin/perl ]
	then
		[ -d /usr/opt/perl5/bin ] || cmd mkdir /usr/opt/perl5/bin
		cmd ln -s /usr/local/bin/perl /usr/opt/perl5/bin/perl
	fi
}

mkgrp_usr()
{
	if [ $# -ne 2 ]
	then
		debug 0 "Missing module-name parameter in remove_perllocal"
		debug 0 "can't remove module info from perllocal."
		return 1
	fi
	user="$1"; group="$2"

	# First create new group...
	if ! lsgroup $group >/dev/null
	then
		print "making group '$group'"
		if ! mkgroup $group
		then
			print "Can't make group '$group'"
			print "Stopping"
			exit 2
		fi

	else
		print "Group $group exists"
	fi

	if ! lsuser $user >/dev/null
	then
		echo "making user $user"
		if ! mkuser account_locked=true gecos="Automatic account" \
			pgrp=$group login=false rlogin=false su=false \
			sugroups="" $user
		then
			echo "Can't create user '$user'"
			echo "Stopping"
			exit 2
		fi
		
	else
		echo "User $user exists"
	fi
}

make_perl_i2f_links

exit 0

715                 22090               17532               985103839   0           0           644         26  freeware.perl.md5.rte.size`
./usr 6
./usr/local 4
./usr/local/man 126
./usr/local/man/man3 38
./usr/local/lib 2
./usr/local/lib/MD5-2.12 149
./usr/local/lib/MD5-2.12/examples 6
./usr/local/lib/MD5-2.12/t 132
./usr/lpp 2
./usr/lpp/freeware.perl.md5 
./usr/opt 2
./usr/opt/perl5 2
./usr/opt/perl5/lib 2
./usr/opt/perl5/lib/site_perl 2
./usr/opt/perl5/lib/site_perl/5.005 2
./usr/opt/perl5/lib/site_perl/5.005/aix 21
./usr/opt/perl5/lib/site_perl/5.005/aix/auto 2
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest 6
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5 37
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2 36
./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1 39
./usr/opt/perl5/lib/site_perl/5.005/aix/Digest 35
 3011                25246               21234               975504513   0           0           755         30  freeware.perl.md5.rte.unpost_i`
#!/usr/bin/ksh
LANG=C
VERBOSE=${VERBOSE:-"0"}                 # simple debug system
appname="${0##*/}"   # $(basename $0)

#	Pre- and Post install template scripts
#	Copyright (C) 2000 GROUPE BULL
#	all rights reserved.
#
#   author: Ciaran Deignan (Ciaran.Deignan@bull.net)
#   started: July 1997, last modified July 2000
#   version: 2.0

#------------------------------------------------------------------
#  GLOBAL UTILITIES
#------------------------------------------------------------------

# Debug message print function (v1.0 - July 1998)
debug()
{
	integer lev=$1
	shift
	
	[ $VERBOSE -ge $lev ] && print -- "$@" >&2
	return 0
}

# error handler (v2.1 - July 1998):
cmd()
{
	debug 7 "CMD: execute '$@'"
        eval '"$@"'
        [ $? -ne 0 ] && debug 0 "$appname: CMD: error detected in '$@'" \
		 && print exit 2
}

typeset -xf cmd debug
[ $VERBOSE -gt 9 ] && set -x
#------------------------------------------------------------------
debug 2 "$appname: starting execution, params <$*>";

# Function to update the file /usr/local/info/dir
#  This function should be used if the LPP delivers files into
#  /usr/local/info
#  NOTE: the file /usr/local/info/dir should *never* be delivered directly...
update_info_dir()
{
	if ! [ -d /usr/local/info ]
	then
		debug 1 "No info directory found !"
		debug 1 "stopping"
		return 0
	fi

	if type gen-dir-node >/dev/null 2>&1
	then
		print "Updating info \"root\" file (/usr/local/info/dir)"
		cmd cd /usr/local/info
		[ -f dir ] && cmd mv dir dir.bak
		cmd gen-dir-node /usr/local/info/ > dir
		cmd chmod 444 dir
	fi
}

# Perl module update function...
remove_perllocal ()
{

	if [ $# -ne 1 ]
	then
		debug 0 "Missing module-name parameter in remove_perllocal"
		debug 0 "can't remove module info from perllocal."
		return 0
	fi
	modulename="$1"
	if [ "$PERLLIB" = "" ] || [ ! -d "$PERLLIB" ]
	then
		print "remove_perllocal: PERLLIB not defined (=$PERLLIB)"
		return 0
	fi
	archdir=${archdir:-"aix"}

	# the directory /usr/local/lib/perl5/ ($PERLLIB) should exist, or might
	# be a symbolic link to /usr/opt/perl5/lib....
	if ! cd $PERLLIB/.
	then
		print "Perl not installed correctly, can't find directory"
		print "$PERLLIB"
		exit 1
	fi

	if ! ls */$archdir/perllocal.pod > /dev/null 2>&1
	then
		filename=$(ls -td 5.*/$archdir | line)
		if [ "$filename" = "" ]
		then    
			cmd print "Perl not installed correctly, can't find \c"
			cmd print "directory $PERLLIB/5.00*/$archdir"
			exit 3
		fi
		filename="$filename/perllocal.pod"
	else
		filename=$(cmd ls -t */$archdir/perllocal.pod | line)
	fi


	# use a small perl script to remove the module info
	# (I hope this isn't too "wildcard"...)
	cmd perl -w -n -i.bak -e '
		$line = $_;
		if (defined ($flag) && ($flag == 2)) { undef $flag ;} 
		$flag=1 if $line =~ /^=head2\s+.*L<'"$modulename"'>/; 
		print $line if !defined($flag); 
		$flag=2 if $line =~ /^=back/;' $filename


}

#PERLLIB=/usr/local/lib/perl5/
PERLLIB=/usr/opt/perl5/lib/
#archdir=ia64-aix

remove_perllocal "Digest::MD5"
exit 0

 364                 0                   22090               0           0           0           0           0   `
7                   128                 2642                4202                14572               17532               21234               22090               freeware.perl.md5.rte.al freeware.perl.md5.rte.copyright freeware.perl.md5.rte.inventory freeware.perl.md5.rte.post_i freeware.perl.md5.rte.pre_i freeware.perl.md5.rte.size freeware.perl.md5.rte.unpost_i sr/okê
 ~¤ ¤�          ‡  ß}·:%:ÒÎž:!      #  äj  ‡      ./usr/local/man/man3/Digest__MD2.3 a                 ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH MD2 3 "perl 5.005, patch 03" "18/Sep/2000" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::MD2 \- Perl interface to the MD2 Algorithm
.SH "SYNOPSIS"
.PP
.Vb 2
\& # Functional style
\& use Digest::MD2  qw(md2 md2_hex md2_base64);
.Ve
.Vb 3
\& $digest = md2($data);
\& $digest = md2_hex($data);
\& $digest = md2_base64($data);
.Ve
.Vb 2
\& # OO style
\& use Digest::MD2;
.Ve
.Vb 1
\& $ctx = Digest::MD2->new;
.Ve
.Vb 2
\& $ctx->add($data);
\& $ctx->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $ctx->digest;
\& $digest = $ctx->hexdigest;
\& $digest = $ctx->b64digest;
.Ve
.SH "DESCRIPTION"
The \f(CWDigest::MD2\fR module allows you to use the RSA Data Security
Inc. MD2 Message Digest algorithm from within Perl programs.  The
algorithm takes as input a message of arbitrary length and produces as
output a 128-bit \*(L"fingerprint\*(R" or \*(L"message digest\*(R" of the input.
.PP
The \f(CWDigest::MD2\fR programming interface is identical to the interface
of \f(CWDigest::MD5\fR.
.SH "SEE ALSO"
the \fIDigest::MD5\fR manpage
.SH "COPYRIGHT"
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
.PP
.Vb 2
\& Copyright 1998-2000 Gisle Aas.
\& Copyright 1990-1992 RSA Data Security, Inc.
.Ve
.SH "AUTHOR"
Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "MD2 3"
.IX Name "Digest::MD2 - Perl interface to the MD2 Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

.IX Header "COPYRIGHT"

.IX Header "AUTHOR"

fkêœÐ ¤ ¤�          Å  ß}·:%:ÒÎž:!      #  èj  Å      ./usr/local/man/man3/Digest__SHA1.3                  ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH SHA1 3 "perl 5.005, patch 03" "18/Sep/2000" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::SHA1 \- Perl interface to the SHA\-1 Algorithm
.SH "SYNOPSIS"
.PP
.Vb 2
\& # Functional style
\& use Digest::SHA1  qw(sha1 sha1_hex sha1_base64);
.Ve
.Vb 3
\& $digest = sha1($data);
\& $digest = sha1_hex($data);
\& $digest = sha1_base64($data);
.Ve
.Vb 2
\& # OO style
\& use Digest::SHA1;
.Ve
.Vb 1
\& $ctx = Digest::SHA1->new;
.Ve
.Vb 2
\& $ctx->add($data);
\& $ctx->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $ctx->digest;
\& $digest = $ctx->hexdigest;
\& $digest = $ctx->b64digest;
.Ve
.SH "DESCRIPTION"
The \f(CWDigest::SHA1\fR module allows you to use the NIST SHA\-1 message
digest algorithm from within Perl programs.  The algorithm takes as
input a message of arbitrary length and produces as output a 160-bit
\*(L"fingerprint\*(R" or \*(L"message digest\*(R" of the input.
.PP
The \f(CWDigest::SHA1\fR module provide a procedural interface for simple
use, as well as an object oriented interface that can handle messages
of arbitrary length and which can read files directly.
.PP
A binary digest will be 20 bytes long.  A hex digest will be 40
characters long.  A base64 digest will be 27 characters long.
.SH "FUNCTIONS"
The following functions can be exported from the \f(CWDigest::SHA1\fR
module.  No functions are exported by default.
.Ip "sha1($data,...)" 4
This function will concatenate all arguments, calculate the \s-1SHA\s0\-1
digest of this \*(L"message\*(R", and return it in binary form.
.Ip "sha1_hex($data,...)" 4
Same as \fIsha1()\fR, but will return the digest in hexadecimal form.
.Ip "sha1_base64($data,...)" 4
Same as \fIsha1()\fR, but will return the digest as a base64 encoded string.
.SH "METHODS"
The \f(CWDigest::SHA1\fR module provide the standard \f(CWDigest\fR OO\-interface.
The constructor looks like this:
.Ip "$sha1 = Digest->new('\s-1SHA\s0\-1')" 4
.Ip "$sha1 = Digest::\s-1SHA1\s0->new" 4
The constructor returns a new \f(CWDigest::SHA1\fR object which encapsulate
the state of the \s-1SHA\s0\-1 message-digest algorithm.  You can add data to
the object and finally ask for the digest using the methods described
in the \fIDigest\fR manpage.
.SH "SEE ALSO"
the \fIDigest\fR manpage, the \fIDigest::HMAC_SHA1\fR manpage, the \fIDigest::MD5\fR manpage
.PP
http://www.itl.nist.gov/fipspubs/fip180-1.htm
.SH "COPYRIGHT"
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
.PP
.Vb 2
\& Copyright 1999-2000 Gisle Aas.
\& Copyright 1997 Uwe Hollerbach.
.Ve
.SH "AUTHORS"
Peter C. Gutmann,
Uwe Hollerbach <uh@alumni.caltech.edu>,
Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "SHA1 3"
.IX Name "Digest::SHA1 - Perl interface to the SHA-1 Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "FUNCTIONS"

.IX Item "sha1($data,...)"

.IX Item "sha1_hex($data,...)"

.IX Item "sha1_base64($data,...)"

.IX Header "METHODS"

.IX Item "$sha1 = Digest->new('\s-1SHA\s0\-1')"

.IX Item "$sha1 = Digest::\s-1SHA1\s0->new"

.IX Header "SEE ALSO"

.IX Header "COPYRIGHT"

.IX Header "AUTHORS"

\v'kêŒz €¤ ¤�          ž  ß}·:)%:ÒÎž:!      #  íj  ž      ./usr/local/man/man3/SHA.3 __SHA             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH lib::SHA 3 "perl 5.005, patch 03" "8/Mar/1999" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
SHA \- Perl interface to the NIST Secure Hash Algorithm
.SH "SYNOPSIS"
.PP
.Vb 1
\&    use SHA;
.Ve
.Vb 1
\&    $version = &SHA::sha_version;
.Ve
.Vb 2
\&    $context = new SHA;
\&    $context->reset();
.Ve
.Vb 2
\&    $context->add(LIST);
\&    $context->addfile(HANDLE);
.Ve
.Vb 2
\&    $digest = $context->digest();
\&    $string = $context->hexdigest();
.Ve
.Vb 2
\&    $digest = $context->hash($string);
\&    $string = $context->hexhash($string);
.Ve
.SH "DESCRIPTION"
The \f(CWSHA\fR module is \fBdepreciated\fR.  Use \f(CWDigest::SHA1\fR instead.
.PP
The current \f(CWSHA\fR module is just a wrapper around the \f(CWDigest::SHA1\fR
module.  It is provided so that legacy code that rely on the old
interface still work.  This wrapper does not support the old (and
buggy) SHA\-0 algorithm.
.PP
In addition to the methods provided by \f(CWDigest::SHA1\fR this module
provide the class methods SHA\->\fIhash()\fR and SHA\->\fIhexhash()\fR that
basically do the same as the \fIsha1()\fR and \fIsha1_hex()\fR functions provided
\f(CWDigest::SHA1\fR.
.PP
The SHA\->hex* methods will insert spaces between groups of 8 hex
characters, while the Digest::SHA1 version of the same methods will not
do this.
.SH "SEE ALSO"
the \fIDigest::SHA1\fR manpage

.rn }` ''
.IX Title "lib::SHA 3"
.IX Name "SHA - Perl interface to the NIST Secure Hash Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

 Ikêä7 �¤ ¤�          ø#  ß}·:±@%:ÒÎž:!      #  õj  ø#      ./usr/local/man/Digest.3 3 __SHA             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH lib::Digest 3 "perl 5.005, patch 03" "6/Aug/1999" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest:: \- Modules that calculate message digests
.SH "SYNOPSIS"
.PP
.Vb 2
\&  $md2 = Digest->MD2;
\&  $md5 = Digest->MD5;
.Ve
.Vb 2
\&  $sha1 = Digest->SHA1;
\&  $sha1 = Digest->new("SHA-1");
.Ve
.Vb 1
\&  $hmac = Digest->HMAC_MD5($key);
.Ve
.SH "DESCRIPTION"
The \f(CWDigest::\fR modules calculate digests, also called \*(L"fingerprints\*(R"
or \*(L"hashes\*(R", of some data, called a message.  The digest is some small
fixed size string.  The actual size of the digest depend of the
algorithm used.  The message is simply a sequence of arbitrary bytes.
.PP
An important property of the digest algorithms is that the digest is
\fIlikely\fR to change if the message change in some way.  Another
property is that digest functions are one-way functions, i.e. it
should be \fIhard\fR to find a message that correspond to some given
digest.  Algorithms differ in how \*(L"likely\*(R" and how \*(L"hard\*(R", as well as
how efficient they are to compute.
.PP
All \f(CWDigest::\fR modules provide the same programming interface.  A
functional interface for simple use, as well as an object oriented
interface that can handle messages of arbitrary length and which can
read files directly.
.PP
The digest can be delivered in three formats:
.Ip "\fIbinary\fR" 8
This is the most compact form, but it is not well suited for printing
or embedding in places that can't handle arbitrary data.
.Ip "\fIhex\fR" 8
A twice as long string of (lowercase) hexadecimal digits.
.Ip "\fIbase64\fR" 8
A string of portable printable characters.  This is the base64 encoded
representation of the digest with any trailing padding removed.  The
string will be about 30% longer than the binary version.
the \fI\s-1MIME::\s0Base64\fR manpage tells you more about this encoding.
.PP
The functional interface is simply importable functions with the same
name as the algorithm.  The functions take the message as argument and
return the digest.  Example:
.PP
.Vb 2
\&  use Digest::MD5 qw(md5);
\&  $digest = md5($message);
.Ve
There are also versions of the functions with \*(L"_hex\*(R" or \*(L"_base64\*(R"
appended to the name, which returns the digest in the indicated form.
.SH "OO INTERFACE"
The following methods are available for all \f(CWDigest::\fR modules:
.Ip "$ctx = Digest->\s-1XXX\s0($arg,...)" 4
.Ip "$ctx = Digest->new(\s-1XXX\s0 => $arg,...)" 4
.Ip "$ctx = Digest::\s-1XXX\s0\->new($arg,...)" 4
The constructor returns some object that encapsulate the state of the
message-digest algorithm.  You can add data to the object and finally
ask for the digest.  The \*(L"\s-1XXX\s0\*(R" should of course be replaced by the proper
name of the digest algorithm you want to use.
.Sp
The two first forms are simply syntactic sugar which automatically
load the right module on first use.  The second form allow you to use
algorithm names which contains letters which are not legal perl
identifiers, e.g. \*(L"\s-1SHA\s0\-1\*(R".
.Sp
If \fInew()\fR is called as a instance method (i.e. \f(CW$ctx\fR\->new) it will just
reset the state the object to the state of a newly created object.  No
new object is created in this case, and the return value is the
reference to the object (i.e. \f(CW$ctx\fR).
.Ip "$ctx->reset" 4
This is just an alias for \f(CW$ctx\fR\->new.
.Ip "$ctx->add($data,...)" 4
The \f(CW$data\fR provided as argument are appended to the message we
calculate the digest for.  The return value is the \f(CW$ctx\fR object itself.
.Ip "$ctx->addfile($io_handle)" 4
The \f(CW$io_handle\fR is read until \s-1EOF\s0 and the content is appended to the
message we calculate the digest for.  The return value is the \f(CW$ctx\fR
object itself.
.Ip "$ctx->digest" 4
Return the binary digest for the message.
.Sp
Note that the \f(CWdigest\fR operation is effectively a destructive,
read-once operation. Once it has been performed, the \f(CW$ctx\fR object is
automatically \f(CWreset\fR and can be used to calculate another digest
value.
.Ip "$ctx->hexdigest" 4
Same as \f(CW$ctx\fR\->digest, but will return the digest in hexadecimal form.
.Ip "$ctx->b64digest" 4
Same as \f(CW$ctx\fR\->digest, but will return the digest as a base64 encoded
string.
.SH "SEE ALSO"
the \fIDigest::MD5\fR manpage, the \fIDigest::SHA1\fR manpage, the \fIDigest::HMAC\fR manpage, the \fIDigest::MD2\fR manpage
.PP
the \fIMIME::Base64\fR manpage
.SH "AUTHOR"
Gisle Aas <gisle@aas.no>
.PP
The \f(CWDigest::\fR interface is based on the interface originally
developed by Neil Winton for his \f(CWMD5\fR module.

.rn }` ''
.IX Title "lib::Digest 3"
.IX Name "Digest:: - Modules that calculate message digests"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Item "\fIbinary\fR"

.IX Item "\fIhex\fR"

.IX Item "\fIbase64\fR"

.IX Header "OO INTERFACE"

.IX Item "$ctx = Digest->\s-1XXX\s0($arg,...)"

.IX Item "$ctx = Digest->new(\s-1XXX\s0 => $arg,...)"

.IX Item "$ctx = Digest::\s-1XXX\s0\->new($arg,...)"

.IX Item "$ctx->reset"

.IX Item "$ctx->add($data,...)"

.IX Item "$ctx->addfile($io_handle)"

.IX Item "$ctx->digest"

.IX Item "$ctx->hexdigest"

.IX Item "$ctx->b64digest"

.IX Header "SEE ALSO"

.IX Header "AUTHOR"

kêxZ ‚¤ ¤�          ²  ß}·:±@%:ÒÎž:!      #  ñj  ²      ./usr/local/man/Digest__HMAC_SHA1.3                  ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH lib::Digest::HMAC_SHA1 3 "perl 5.005, patch 03" "5/Apr/1999" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::HMAC_SHA1 \- Keyed-Hashing for Message Authentication
.SH "SYNOPSIS"
.PP
.Vb 4
\& # Functional style
\& use Digest::HMAC_SHA1 qw(hmac_sha1 hmac_sha1_hex);
\& $digest = hmac_sha1($data, $key);
\& print hmac_sha1_hex($data, $key);
.Ve
.Vb 3
\& # OO style
\& use Digest::HMAC_SHA1;
\& $hmac = Digest::HMAC_SHA1->new($key);
.Ve
.Vb 2
\& $hmac->add($data);
\& $hmac->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $hmac->digest;
\& $digest = $hmac->hexdigest;
\& $digest = $hmac->b64digest;
.Ve
.SH "DESCRIPTION"
This module provide HMAC\-SHA\-1 hashing.
.SH "SEE ALSO"
the \fIDigest::HMAC\fR manpage, the \fIDigest::SHA1\fR manpage, the \fIDigest::HMAC_MD5\fR manpage
.SH "AUTHOR"
Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "lib::Digest::HMAC_SHA1 3"
.IX Name "Digest::HMAC_SHA1 - Keyed-Hashing for Message Authentication"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

.IX Header "AUTHOR"

'
.ds kê²¾ ƒ¤ ¤�          ‡  ß}·:±@%:ÒÎž:!      #  üj  ‡      ./usr/local/man/Digest__MD2.3 HA             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH MD2 3 "perl 5.005, patch 03" "18/Sep/2000" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::MD2 \- Perl interface to the MD2 Algorithm
.SH "SYNOPSIS"
.PP
.Vb 2
\& # Functional style
\& use Digest::MD2  qw(md2 md2_hex md2_base64);
.Ve
.Vb 3
\& $digest = md2($data);
\& $digest = md2_hex($data);
\& $digest = md2_base64($data);
.Ve
.Vb 2
\& # OO style
\& use Digest::MD2;
.Ve
.Vb 1
\& $ctx = Digest::MD2->new;
.Ve
.Vb 2
\& $ctx->add($data);
\& $ctx->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $ctx->digest;
\& $digest = $ctx->hexdigest;
\& $digest = $ctx->b64digest;
.Ve
.SH "DESCRIPTION"
The \f(CWDigest::MD2\fR module allows you to use the RSA Data Security
Inc. MD2 Message Digest algorithm from within Perl programs.  The
algorithm takes as input a message of arbitrary length and produces as
output a 128-bit \*(L"fingerprint\*(R" or \*(L"message digest\*(R" of the input.
.PP
The \f(CWDigest::MD2\fR programming interface is identical to the interface
of \f(CWDigest::MD5\fR.
.SH "SEE ALSO"
the \fIDigest::MD5\fR manpage
.SH "COPYRIGHT"
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
.PP
.Vb 2
\& Copyright 1998-2000 Gisle Aas.
\& Copyright 1990-1992 RSA Data Security, Inc.
.Ve
.SH "AUTHOR"
Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "MD2 3"
.IX Name "Digest::MD2 - Perl interface to the MD2 Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

.IX Header "COPYRIGHT"

.IX Header "AUTHOR"

fkê’T „¤ ¤�          �+  ß}·:±@%:ÒÎž:!      #  k  �+      ./usr/local/man/Digest__MD5.3 HA             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH MD5 3 "perl 5.005, patch 03" "18/Sep/2000" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::MD5 \- Perl interface to the MD5 Algorithm
.SH "SYNOPSIS"
.PP
.Vb 2
\& # Functional style
\& use Digest::MD5  qw(md5 md5_hex md5_base64);
.Ve
.Vb 3
\& $digest = md5($data);
\& $digest = md5_hex($data);
\& $digest = md5_base64($data);
.Ve
.Vb 2
\& # OO style
\& use Digest::MD5;
.Ve
.Vb 1
\& $ctx = Digest::MD5->new;
.Ve
.Vb 2
\& $ctx->add($data);
\& $ctx->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $ctx->digest;
\& $digest = $ctx->hexdigest;
\& $digest = $ctx->b64digest;
.Ve
.SH "DESCRIPTION"
The \f(CWDigest::MD5\fR module allows you to use the RSA Data Security
Inc. MD5 Message Digest algorithm from within Perl programs.  The
algorithm takes as input a message of arbitrary length and produces as
output a 128-bit \*(L"fingerprint\*(R" or \*(L"message digest\*(R" of the input.
.PP
The \f(CWDigest::MD5\fR module provide a procedural interface for simple
use, as well as an object oriented interface that can handle messages
of arbitrary length and which can read files directly.
.PP
A binary digest will be 16 bytes long.  A hex digest will be 32
characters long.  A base64 digest will be 22 characters long.
.SH "FUNCTIONS"
The following functions can be exported from the \f(CWDigest::MD5\fR
module.  No functions are exported by default.
.Ip "md5($data,...)" 4
This function will concatenate all arguments, calculate the \s-1MD5\s0 digest
of this \*(L"message\*(R", and return it in binary form.
.Ip "md5_hex($data,...)" 4
Same as \fImd5()\fR, but will return the digest in hexadecimal form.
.Ip "md5_base64($data,...)" 4
Same as \fImd5()\fR, but will return the digest as a base64 encoded string.
.SH "METHODS"
The following methods are available:
.Ip "$md5 = Digest::\s-1MD5\s0->new" 4
The constructor returns a new \f(CWDigest::MD5\fR object which encapsulate
the state of the \s-1MD5\s0 message-digest algorithm.  You can add data to
the object and finally ask for the digest.
.Sp
If called as a instance method (i.e. \f(CW$md5\fR\->new) it will just reset the
state the object to the state of a newly created object.  No new
object is created in this case.
.Ip "$md5->reset" 4
This is just an alias for \f(CW$md5\fR\->new.
.Ip "$md5->add($data,...)" 4
The \f(CW$data\fR provided as argument are appended to the message we
calculate the digest for.  The return value is the \f(CW$md5\fR object itself.
.Ip "$md5->addfile($io_handle)" 4
The \f(CW$io_handle\fR is read until \s-1EOF\s0 and the content is appended to the
message we calculate the digest for.  The return value is the \f(CW$md5\fR
object itself.
.Ip "$md5->digest" 4
Return the binary digest for the message.
.Sp
Note that the \f(CWdigest\fR operation is effectively a destructive,
read-once operation. Once it has been performed, the \f(CWDigest::MD5\fR
object is automatically \f(CWreset\fR and can be used to calculate another
digest value.
.Ip "$md5->hexdigest" 4
Same as \f(CW$md5\fR\->digest, but will return the digest in hexadecimal form.
.Ip "$md5->b64digest" 4
Same as \f(CW$md5\fR\->digest, but will return the digest as a base64 encoded
string.
.SH "EXAMPLES"
The simplest way to use this library is to import the \fImd5_hex()\fR
function (or one of its cousins):
.PP
.Vb 2
\&    use Digest::MD5 qw(md5_hex);
\&    print "Digest is ", md5_hex("foobarbaz"), "\en";
.Ve
The above example would print out the message
.PP
.Vb 1
\&    Digest is 6df23dc03f9b54cc38a0fc1483df6e21
.Ve
provided that the implementation is working correctly.  The same
checksum can also be calculated in OO style:
.PP
.Vb 8
\&    use Digest::MD5;
\&    
\&    $md5 = Digest::MD5->new;
\&    $md5->add('foo', 'bar');
\&    $md5->add('baz');
\&    $digest = $md5->hexdigest;
\&    
\&    print "Digest is $digest\en";
.Ve
With OO style you can break the message arbitrary.  This means that we
are no longer limited to have space for the whole message in memory, i.e.
we can handle messages of any size.
.PP
This is useful when calculating checksum for files:
.PP
.Vb 1
\&    use Digest::MD5;
.Ve
.Vb 3
\&    my $file = shift || "/etc/passwd";
\&    open(FILE, $file) or die "Can't open '$file': $!";
\&    binmode(FILE);
.Ve
.Vb 6
\&    $md5 = Digest::MD5->new;
\&    while (<FILE>) {
\&        $md5->add($_);
\&    }
\&    close(FILE);
\&    print $md5->b64digest, " $file\en";
.Ve
Or we can use the builtin addfile method for more efficient reading of
the file:
.PP
.Vb 1
\&    use Digest::MD5;
.Ve
.Vb 3
\&    my $file = shift || "/etc/passwd";
\&    open(FILE, $file) or die "Can't open '$file': $!";
\&    binmode(FILE);
.Ve
.Vb 1
\&    print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\en";
.Ve
.SH "SEE ALSO"
the \fIDigest\fR manpage,
the \fIDigest::MD2\fR manpage,
the \fIDigest::SHA1\fR manpage,
the \fIDigest::HMAC\fR manpage
.PP
the \fImd5sum(1)\fR manpage
.PP
RFC 1321
.SH "COPYRIGHT"
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
.PP
.Vb 3
\& Copyright 1998-2000 Gisle Aas.
\& Copyright 1995-1996 Neil Winton.
\& Copyright 1991-1992 RSA Data Security, Inc.
.Ve
The MD5 algorithm is defined in RFC 1321. The basic C code
implementing the algorithm is derived from that in the RFC and is
covered by the following copyright:
.Ip "" 4
Copyright (C) 1991-2, \s-1RSA\s0 Data Security, Inc. Created 1991. All
rights reserved.
.Sp
License to copy and use this software is granted provided that it
is identified as the \*(L"\s-1RSA\s0 Data Security, Inc. \s-1MD5\s0 Message-Digest
Algorithm\*(R" in all material mentioning or referencing this software
or this function.
.Sp
License is also granted to make and use derivative works provided
that such works are identified as \*(L"derived from the \s-1RSA\s0 Data
Security, Inc. \s-1MD5\s0 Message-Digest Algorithm\*(R" in all material
mentioning or referencing the derived work.
.Sp
\s-1RSA\s0 Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided \*(L"as is\*(R"
without express or implied warranty of any kind.
.Sp
These notices must be retained in any copies of any part of this
documentation and/or software.
.PP
This copyright does not prohibit distribution of any version of Perl
containing this extension under the terms of the \s-1GNU\s0 or Artistic
licenses.
.SH "AUTHORS"
The original MD5 interface was written by Neil Winton
(\f(CWN.Winton@axion.bt.co.uk\fR).
.PP
This release was made by Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "MD5 3"
.IX Name "Digest::MD5 - Perl interface to the MD5 Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "FUNCTIONS"

.IX Item "md5($data,...)"

.IX Item "md5_hex($data,...)"

.IX Item "md5_base64($data,...)"

.IX Header "METHODS"

.IX Item "$md5 = Digest::\s-1MD5\s0->new"

.IX Item "$md5->reset"

.IX Item "$md5->add($data,...)"

.IX Item "$md5->addfile($io_handle)"

.IX Item "$md5->digest"

.IX Item "$md5->hexdigest"

.IX Item "$md5->b64digest"

.IX Header "EXAMPLES"

.IX Header "SEE ALSO"

.IX Header "COPYRIGHT"

.IX Item ""

.IX Header "AUTHORS"

W$mkênY …¤ ¤�          Å  ß}·:±@%:ÒÎž:!      #  k  Å      ./usr/local/man/Digest__SHA1.3 A             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH SHA1 3 "perl 5.005, patch 03" "18/Sep/2000" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::SHA1 \- Perl interface to the SHA\-1 Algorithm
.SH "SYNOPSIS"
.PP
.Vb 2
\& # Functional style
\& use Digest::SHA1  qw(sha1 sha1_hex sha1_base64);
.Ve
.Vb 3
\& $digest = sha1($data);
\& $digest = sha1_hex($data);
\& $digest = sha1_base64($data);
.Ve
.Vb 2
\& # OO style
\& use Digest::SHA1;
.Ve
.Vb 1
\& $ctx = Digest::SHA1->new;
.Ve
.Vb 2
\& $ctx->add($data);
\& $ctx->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $ctx->digest;
\& $digest = $ctx->hexdigest;
\& $digest = $ctx->b64digest;
.Ve
.SH "DESCRIPTION"
The \f(CWDigest::SHA1\fR module allows you to use the NIST SHA\-1 message
digest algorithm from within Perl programs.  The algorithm takes as
input a message of arbitrary length and produces as output a 160-bit
\*(L"fingerprint\*(R" or \*(L"message digest\*(R" of the input.
.PP
The \f(CWDigest::SHA1\fR module provide a procedural interface for simple
use, as well as an object oriented interface that can handle messages
of arbitrary length and which can read files directly.
.PP
A binary digest will be 20 bytes long.  A hex digest will be 40
characters long.  A base64 digest will be 27 characters long.
.SH "FUNCTIONS"
The following functions can be exported from the \f(CWDigest::SHA1\fR
module.  No functions are exported by default.
.Ip "sha1($data,...)" 4
This function will concatenate all arguments, calculate the \s-1SHA\s0\-1
digest of this \*(L"message\*(R", and return it in binary form.
.Ip "sha1_hex($data,...)" 4
Same as \fIsha1()\fR, but will return the digest in hexadecimal form.
.Ip "sha1_base64($data,...)" 4
Same as \fIsha1()\fR, but will return the digest as a base64 encoded string.
.SH "METHODS"
The \f(CWDigest::SHA1\fR module provide the standard \f(CWDigest\fR OO\-interface.
The constructor looks like this:
.Ip "$sha1 = Digest->new('\s-1SHA\s0\-1')" 4
.Ip "$sha1 = Digest::\s-1SHA1\s0->new" 4
The constructor returns a new \f(CWDigest::SHA1\fR object which encapsulate
the state of the \s-1SHA\s0\-1 message-digest algorithm.  You can add data to
the object and finally ask for the digest using the methods described
in the \fIDigest\fR manpage.
.SH "SEE ALSO"
the \fIDigest\fR manpage, the \fIDigest::HMAC_SHA1\fR manpage, the \fIDigest::MD5\fR manpage
.PP
http://www.itl.nist.gov/fipspubs/fip180-1.htm
.SH "COPYRIGHT"
This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
.PP
.Vb 2
\& Copyright 1999-2000 Gisle Aas.
\& Copyright 1997 Uwe Hollerbach.
.Ve
.SH "AUTHORS"
Peter C. Gutmann,
Uwe Hollerbach <uh@alumni.caltech.edu>,
Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "SHA1 3"
.IX Name "Digest::SHA1 - Perl interface to the SHA-1 Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "FUNCTIONS"

.IX Item "sha1($data,...)"

.IX Item "sha1_hex($data,...)"

.IX Item "sha1_base64($data,...)"

.IX Header "METHODS"

.IX Item "$sha1 = Digest->new('\s-1SHA\s0\-1')"

.IX Item "$sha1 = Digest::\s-1SHA1\s0->new"

.IX Header "SEE ALSO"

.IX Header "COPYRIGHT"

.IX Header "AUTHORS"

\v'kê– †¤ ¤�          ›  ß}·:±@%:ÒÎž:!      #   k  ›      ./usr/local/man/MD5.3 __             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH lib::MD5 3 "perl 5.005, patch 03" "6/Aug/1999" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
MD5 \- Perl interface to the MD5 Message-Digest Algorithm
.SH "SYNOPSIS"
.PP
.Vb 1
\& use MD5;
.Ve
.Vb 8
\& $context = new MD5;
\& $context->reset();
\&    
\& $context->add(LIST);
\& $context->addfile(HANDLE);
\&    
\& $digest = $context->digest();
\& $string = $context->hexdigest();
.Ve
.Vb 2
\& $digest = MD5->hash(SCALAR);
\& $string = MD5->hexhash(SCALAR);
.Ve
.SH "DESCRIPTION"
The \f(CWMD5\fR module is \fBdepreciated\fR.  Use \f(CWDigest::MD5\fR instead.
.PP
The current \f(CWMD5\fR module is just a wrapper around the \f(CWDigest::MD5\fR
module.  It is provided so that legacy code that rely on the old
interface still work and get the speed benefit of the new module.
.PP
In addition to the methods provided for \f(CWDigest::MD5\fR objects, this
module provide the class methods MD5->\fIhash()\fR and MD5->\fIhexhash()\fR that
basically do the same as the \fImd5()\fR and \fImd5_hex()\fR functions provided by
\f(CWDigest::MD5\fR.
.SH "SEE ALSO"
the \fIDigest::MD5\fR manpage

.rn }` ''
.IX Title "lib::MD5 3"
.IX Name "MD5 - Perl interface to the MD5 Message-Digest Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

 we'lkêª[ ‡¤ ¤�          ž  ß}·:±@%:ÒÎž:!      #  k  ž      ./usr/local/man/SHA.3 __             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH lib::SHA 3 "perl 5.005, patch 03" "8/Mar/1999" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
SHA \- Perl interface to the NIST Secure Hash Algorithm
.SH "SYNOPSIS"
.PP
.Vb 1
\&    use SHA;
.Ve
.Vb 1
\&    $version = &SHA::sha_version;
.Ve
.Vb 2
\&    $context = new SHA;
\&    $context->reset();
.Ve
.Vb 2
\&    $context->add(LIST);
\&    $context->addfile(HANDLE);
.Ve
.Vb 2
\&    $digest = $context->digest();
\&    $string = $context->hexdigest();
.Ve
.Vb 2
\&    $digest = $context->hash($string);
\&    $string = $context->hexhash($string);
.Ve
.SH "DESCRIPTION"
The \f(CWSHA\fR module is \fBdepreciated\fR.  Use \f(CWDigest::SHA1\fR instead.
.PP
The current \f(CWSHA\fR module is just a wrapper around the \f(CWDigest::SHA1\fR
module.  It is provided so that legacy code that rely on the old
interface still work.  This wrapper does not support the old (and
buggy) SHA\-0 algorithm.
.PP
In addition to the methods provided by \f(CWDigest::SHA1\fR this module
provide the class methods SHA\->\fIhash()\fR and SHA\->\fIhexhash()\fR that
basically do the same as the \fIsha1()\fR and \fIsha1_hex()\fR functions provided
\f(CWDigest::SHA1\fR.
.PP
The SHA\->hex* methods will insert spaces between groups of 8 hex
characters, while the Digest::SHA1 version of the same methods will not
do this.
.SH "SEE ALSO"
the \fIDigest::SHA1\fR manpage

.rn }` ''
.IX Title "lib::SHA 3"
.IX Name "SHA - Perl interface to the NIST Secure Hash Algorithm"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

 Ikê¤· ˆ¤ ¤�             à}·:±@%:ÒÎž:!      #  k         ./usr/local/man/Digest__HMAC.3 A             ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH lib::Digest::HMAC 3 "perl 5.005, patch 03" "5/Apr/1999" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::HMAC \- Keyed-Hashing for Message Authentication
.SH "SYNOPSIS"
.PP
.Vb 4
\& # Functional style
\& use Digest::HMAC qw(hmac hmac_hex);
\& $digest = hmac($data, $key, \e&myhash);
\& print hmac_hex($data, $key, \e&myhash);
.Ve
.Vb 3
\& # OO style
\& use Digest::HMAC;
\& $hmac = Digest::HMAC->new($key, "Digest::MyHash");
.Ve
.Vb 2
\& $hmac->add($data);
\& $hmac->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $hmac->digest;
\& $digest = $hmac->hexdigest;
\& $digest = $hmac->b64digest;
.Ve
.SH "DESCRIPTION"
HMAC is used for message integrity checks between two parties that
share a secret key, and works in combination with some other Digest
algorithm, usually MD5 or SHA\-1.  The HMAC mechanism is described in
RFC 2104.
.PP
HMAC follow the common \f(CWDigest::\fR interface, but the constructor
takes the secret key and the name of some other simple \f(CWDigest::\fR
as argument.
.SH "SEE ALSO"
the \fIDigest::HMAC_MD5\fR manpage, the \fIDigest::HMAC_SHA1\fR manpage
.PP
RFC 2104
.SH "AUTHORS"
Graham Barr <gbarr@ti.com>, Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "lib::Digest::HMAC 3"
.IX Name "Digest::HMAC - Keyed-Hashing for Message Authentication"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

.IX Header "AUTHORS"

kêŽ
 ‰¤ ¤�          ¤  à}·:±@%:ÒÎž:!      #  k  ¤      ./usr/local/man/Digest__HMAC_MD5.3                   ó/      ¤�          .rn '' }`
''' $RCSfile$$Revision$$Date$
'''
''' $Log$
'''
.de Sh
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp
.if t .sp .5v
.if n .sp
..
.de Ip
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb
.ft CW
.nf
.ne \\$1
..
.de Ve
.ft R

.fi
..
'''
'''
'''     Set up \*(-- to give an unbreakable dash;
'''     string Tr holds user defined translation string.
'''     Bell System Logo is used as a dummy character.
'''
.tr \(*W-|\(bv\*(Tr
.ie n \{\
.ds -- \(*W-
.ds PI pi
.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.ds L" ""
.ds R" ""
'''   \*(M", \*(S", \*(N" and \*(T" are the equivalent of
'''   \*(L" and \*(R", except that they are used on ".xx" lines,
'''   such as .IP and .SH, which do another additional levels of
'''   double-quote interpretation
.ds M" """
.ds S" """
.ds N" """""
.ds T" """""
.ds L' '
.ds R' '
.ds M' '
.ds S' '
.ds N' '
.ds T' '
'br\}
.el\{\
.ds -- \(em\|
.tr \*(Tr
.ds L" ``
.ds R" ''
.ds M" ``
.ds S" ''
.ds N" ``
.ds T" ''
.ds L' `
.ds R' '
.ds M' `
.ds S' '
.ds N' `
.ds T' '
.ds PI \(*p
'br\}
.\"	If the F register is turned on, we'll generate
.\"	index entries out stderr for the following things:
.\"		TH	Title 
.\"		SH	Header
.\"		Sh	Subsection 
.\"		Ip	Item
.\"		X<>	Xref  (embedded
.\"	Of course, you have to process the output yourself
.\"	in some meaninful fashion.
.if \nF \{
.de IX
.tm Index:\\$1\t\\n%\t"\\$2"
..
.nr % 0
.rr F
.\}
.TH lib::Digest::HMAC_MD5 3 "perl 5.005, patch 03" "5/Apr/1999" "User Contributed Perl Documentation"
.UC
.if n .hy 0
.if n .na
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.de CQ          \" put $1 in typewriter font
.ft CW
'if n "\c
'if t \\&\\$1\c
'if n \\&\\$1\c
'if n \&"
\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
'.ft R
..
.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
.	\" AM - accent mark definitions
.bd B 3
.	\" fudge factors for nroff and troff
.if n \{\
.	ds #H 0
.	ds #V .8m
.	ds #F .3m
.	ds #[ \f1
.	ds #] \fP
.\}
.if t \{\
.	ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.	ds #V .6m
.	ds #F 0
.	ds #[ \&
.	ds #] \&
.\}
.	\" simple accents for nroff and troff
.if n \{\
.	ds ' \&
.	ds ` \&
.	ds ^ \&
.	ds , \&
.	ds ~ ~
.	ds ? ?
.	ds ! !
.	ds /
.	ds q
.\}
.if t \{\
.	ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.	ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.	ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.	ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.	ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.	ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
.	ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
.	ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.	ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
.\}
.	\" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.ds oe o\h'-(\w'o'u*4/10)'e
.ds Oe O\h'-(\w'O'u*4/10)'E
.	\" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.	\" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.	ds : e
.	ds 8 ss
.	ds v \h'-1'\o'\(aa\(ga'
.	ds _ \h'-1'^
.	ds . \h'-1'.
.	ds 3 3
.	ds o a
.	ds d- d\h'-1'\(ga
.	ds D- D\h'-1'\(hy
.	ds th \o'bp'
.	ds Th \o'LP'
.	ds ae ae
.	ds Ae AE
.	ds oe oe
.	ds Oe OE
.\}
.rm #[ #] #H #V #F C
.SH "NAME"
Digest::HMAC_MD5 \- Keyed-Hashing for Message Authentication
.SH "SYNOPSIS"
.PP
.Vb 4
\& # Functional style
\& use Digest::HMAC_MD5 qw(hmac_md5 hmac_md5_hex);
\& $digest = hmac_md5($data, $key);
\& print hmac_md5_hex($data, $key);
.Ve
.Vb 3
\& # OO style
\& use Digest::HMAC_MD5;
\& $hmac = Digest::HMAC_MD5->new($key);
.Ve
.Vb 2
\& $hmac->add($data);
\& $hmac->addfile(*FILE);
.Ve
.Vb 3
\& $digest = $hmac->digest;
\& $digest = $hmac->hexdigest;
\& $digest = $hmac->b64digest;
.Ve
.SH "DESCRIPTION"
This module provide HMAC\-MD5 hashing.
.SH "SEE ALSO"
the \fIDigest::HMAC\fR manpage, the \fIDigest::MD5\fR manpage, the \fIDigest::HMAC_SHA1\fR manpage
.SH "AUTHOR"
Gisle Aas <gisle@aas.no>

.rn }` ''
.IX Title "lib::Digest::HMAC_MD5 3"
.IX Name "Digest::HMAC_MD5 - Keyed-Hashing for Message Authentication"

.IX Header "NAME"

.IX Header "SYNOPSIS"

.IX Header "DESCRIPTION"

.IX Header "SEE ALSO"

.IX Header "AUTHOR"

s R'kêöu Æ ¤�          ‡-  à}·:Â%:ÓÎž:!        7®  ‡-      ./usr/local/lib/MD5-2.12/Changes 3                   ó/      ¤�          2000-09-18   Gisle Aas <gisle@ActiveState.com>

   Release 2.12

   Avoid pointer cast warning for machines with bigger ints
   than pointers.  Patch by Robin Barker <rmb1@cise.npl.co.uk>.



2000-08-19   Gisle Aas <gisle@ActiveState.com>

   Release 2.11
   
   The fallback code introduced in 2.10 did only work for
   perl-5.6.0.  It should now for for perl5.004 and 5.005
   as well.  Patch by Ville Skyttä <ville@office.popsystems.com>.



2000-08-18   Gisle Aas <gisle@ActiveState.com>

   Release 2.10

   Digest::MD5 will now try to fallback to the pure perl
   implementation of Digest::Perl::MD5 if bootstrap fails.

   Added a bit internal paranoia about casting the IV
   in the Digest::MD5 object to the MD5_CTX* pointer.



1999-08-06   Gisle Aas <gisle@aas.no>

   Release 2.09

   Documentation update.



1999-07-28   Gisle Aas <gisle@aas.no>

   Release 2.08

   The addfile() methods could trigger a core dump when passed
   a filehandle that had failed to open.



1999-04-26   Gisle Aas <gisle@aas.no>

   Release 2.07

   The Digest::SHA1 module failed on some 64-bit systems, because I
   assumed there was a correspondence between the U32 size and
   BYTEORDER.  This version use 'unsigned long' as Uwe's original
   SHA module did.

   The module should now work better when liked statically with perl,
   because we now use a safer module-loaded test in Digest.pm.

   Assume we know the outcome of the alignment test on VMS. Patch by
   Chuck Lane <lane@duphy4.physics.drexel.edu>



1999-03-26   Gisle Aas <gisle@aas.no>

   Release 2.06

   Avoid LONG and BYTE types in SHA.xs as they was in conflict
   with similar definitions in <winnt.h>.

   Patch by Marko Asplund <aspa@hip.fi> to make the the alignment
   test program link successfully with sfio-perl.

   Fixed a typo in MD5.xs that might have affected 64-bit systems.
   Spotted by Nick Ing-Simmons



1999-03-15   Gisle Aas <gisle@aas.no>

   Release 2.05

   Included Digest::SHA1 based on Uwe Hollerbach's SHA module.



1999-03-05   Gisle Aas <gisle@aas.no>

   Release 2.04

   Avoid the -o option when compiling alignment test program
   for Win32 as suggested by Gurusamy Sarathy.

   DEC Compiler bug workaround.  Contributed by D Roland Walker
   <walker@ncbi.nlm.nih.gov>

   Having references to a local variable called "na" was not
   very safe either.  Some older versions of Perl can apparently
   macroize this into something completely different.



1999-02-27   Gisle Aas <gisle@aas.no>

   Release 2.03

   Patch from Christopher J. Madsen <chris_madsen@geocities.com> that
   should help getting the u32align test program to compile with
   Visual C++ 5 on Windows NT.

   Got rid of references to PL_na.



1999-01-31   Gisle Aas <gisle@aas.no>

   Release 2.02

   Added a hints file as workaround for an IRIX compiler bug.
   Contributed by D Roland Walker <walker@ncbi.nlm.nih.gov>.

   Note that the rfc2202 test can still fail on some DEC Alpha,
   because of a compiler bug that affects the perl 'x' operator.
   The Digest:: modules should work and be safe to install anyway.



1998-12-18   Gisle Aas <aas@sn.no>

   Release 2.01

   Some casts and tweaks to make picky compilers more happy.



1998-11-04   Gisle Aas <aas@sn.no>

   Release 2.00.

   Taken out Digest::SHA1 as this module will be provided from Uwe
   Hollerbach later.

   Some tweaks to MD2.xs and MD5.xs since "na" disappeared in
   perl5.005_53



1998-10-30   Gisle Aas <aas@sn.no>

   Release 1.99_60

   The 1.99_59 release introduced compilation problems for big-endian
   systems with free U32 alignment.  Bug reported, and fix suggested
   by Paul J. Schinder <schinder@pobox.com>.



1998-10-28   Gisle Aas <aas@sn.no>

   Release 1.99_59

   Makefile.PL will run a test program to find out if U32 values can
   be aligned anywhere.  This hopefully cures the core dumps reported
   on Solaris and other big endian systems.  Thanks to Graham Barr for
   debugging this.



1998-10-28   Gisle Aas <aas@sn.no>

   Release 1.99_58

   Should be very close to a 2.00 release now.  Need some success
   reports from people running on big-endian machines first I think.

   Added a Digest::MD2 implementation.

   Wrote Digest.pm documentation.  This define the interface that all
   Digest:: modules should provide.

   Avoided some code duplication in MD5.xs

   Fixed typo, that prevented Digest::SHA1::sha1_base64() from working.



1998-10-27   Gisle Aas <aas@sn.no>

   Release 1.99_57

   Rewritten most of the MD5 C code to make it real fast (especially
   on little-endian machines without alignment restrictions for U32).
   Compared to MD5-1.7 we can process files 4 times as fast and we
   digest small stuff in memory 7 times faster.  I came to these
   conclusions after these tests (gcc -O2, i586, Linux):

   First tested calculation of the digest of a 31 MB file, using
   perl -le 'print Digest::MD5->new->addfile(*STDIN)->hexdigest'
   and similar stuff:

      MD5-1.7:                 21.06s
      Digest::MD5-1.99_57:      5.23s
      md5sum (GNU textutils):   4.90s

   As you can see, we do nearly as good as the md5sum program.  I
   think the reason we don't beat md5sum is that perl always insist on
   loading extra modules like Config.pm, Carp.pm, strict.pm, vars.pm,
   AutoLoader.pm and DynaLoader.pm.  When I simply wrapped the MD5.xs
   hasher code in a C program I managed to process the file in 4.68s.

   Then we calculated the digest of the same 6 byte sting, 20000
   times:

      MD5-1.7:                 11.81s
      Digest::MD5-1.99_57:      1.68s

   Digest::MD5 benefit from making this into a plain procedure call
   instead of a static method call.


   Other changes in this release are:

   Documentation update

   Internal MD5.xs cleanup.

   $md5->digest will automatically reset now.

   Digest::HMAC methods add() and addfile() did not return the
   corret object.

   Added Digest.pm loading module.  I am not sure this is a good idea.

   Added Digest::SHA1 and Digest::HMAC_SHA1 module.  The Digest::SHA1
   module is just a wrapper around SHA.pm.  I hope to get the author
   of SHA.pm to move his module to the Digest:: category.



1998-10-25   Gisle Aas <aas@sn.no>

   Release 1.99_56

   Fix memcpy_byteswap() function in MD5.xs.  Must be careful with
   htovl() as it might evaluate its arguments more than once.



1998-10-25   Gisle Aas <aas@sn.no>

   Release 1.99_55

   Grahams HMAC_MD5.pm splitted into two modules.  Digest::HMAC and
   Digest::HMAC_MD5.  Also provide functional interface.  Documentation
   is still lacking.

   Included RFC 2202 based test for HMAC-MD5.



1998-10-24   Gisle Aas <aas@sn.no>

   Release 1.99_54

   Included HMAC_MD5.pm, contributed by Graham Barr <gbarr@ti.com>.

   I have a hard time to make up my mind :-)  md5_bin() renamed back
   to md5().   Functions are not exported by default any more.

   Try to Encode/Decode with memcpy_byteswap for 32-bit big-endian
   machines.



1998-10-23   Gisle Aas <aas@sn.no>

   Release 1.99_53

   Renamed core module as Digest::MD5.  Leave a MD5.pm stub for
   legacy code.

   The md5() function renamed as md5_bin().

   The constructor, Digest::MD5->new, no longer takes any extra
   arguments.

   Added some new tests.

   Updated the documentation.

   $md5->b64digest implemented with same base64 encoder as md5_base64.



1998-10-23   Gisle Aas <aas@sn.no>

   Release 1.99_52

   Patch from Graham Barr which make it work for big-endian machines
   again.



1998-10-22   Gisle Aas <aas@sn.no>

   Release 1.99_51

   The MD5 class is now subclassable.

   The add() and addfile() methods now return $self.

   The reset() method is just an alias for new().

   The constructor (MD5->new) now takes optional arguments which are
   automatically added.  It means that we can now write:

      MD5->new($data)->hexdigest;

   New $md5->b64digest method.

   New functions that are exported on request: md5, md5_hex, md5_base64

   Included RFC 1321

   Barely started to update the documentation.



1998-10-22   Gisle Aas <aas@sn.no>

   Release 1.99_50

   Much better performance (more than twice as fast now).  Mostly
   because we use Copy/Zero instead of the original MD5_memcpy and
   MD5_memset functions.

   The addfile() and hexdigest() methods are now XS implemented.

   All RSA functions now included in MD5.xs and made static.

   Use perl's Copy/Zero.

   Random cleanup, simplifications and reformatting.
   Merged things better with the perl configuration.



Neil Winton's versions below:


*** 96/06/20 Version 1.7

MD5 is now completely 64-bit clean (I hope). The basic MD5 code uses
32-bit quantities and requires a typedef UINT4 to be defined in
global.h. Perl configuration data (the value of BYTEORDER) is used to
determine if unsigned longs have 4 or 8 bytes. On 64-bit platforms (eg
DEC Alpha) then it assumes that "unsigned int" will be a 32-bit type.
If this is incorrect then adding -DUINT4_IS_LONG to the DEFINES line in
Makefile.PL will override this.

On some machines (at least Cray that I know of) there is no 32-bit
integer type. In this case defining TRUNCATE_UINT4 (which is done
automatically for a Cray) will ensure that 64-bit values are masked
down to 32 bits. I have done my best to test this but without easy
access to a true 64-bit machine I can not totally guarantee it (unless
anyone wants to lend me a spare Cray :-)

There is one remaining limitation for 64-bit enabled processors. The
amount of data passed to any single call to the underlying MD5
routines is limited to (2^32 - 1) bytes -- that's 4 gigabytes. I'm
sorry if that's a real problem for you ...

And finally, a minor complilation warning (unsigned char * used with
function having char * prototype) has also been eliminated.

*** 96/04/09 Version 1.6

Re-generated module framework using h2xs to pick up the latest module
conventions for versions etc. You can now say "use MD5 1.6;" and things
should work correctly. MD5.pod has been integrated into MD5.pm and
CHANGES renamed to Changes. There is a fairly comprehensive test.pl
which can be invoked via "make test". There are no functional changes
to the MD5 routines themselves.

*** 96/03/14 Version 1.5.3

Fixed addfile method to accept type-glob references for the file-handle
(eg \*STDOUT). This is more consistent with other routines and is now the
recommended way of passing file-handles. The documentation now gives more
examples as to how the routines might be used.

*** 96/03/12 Version 1.5.2

Minor fixes from Christopher J Madsen <madsen@computek.net> to provide
support for building on OS/2 (and to work arround a perl -w bug).

Remove warning about possible difference between add('foo', 'bar') and
add('foobar'). This is not true (it may have been true in the earliest
version of the module but is no longer the case).

*** 96/03/08 Version 1.5.1

Add CHANGES file to make it easier for people to figure out what has
been going on. (Meant to do this as part of 1.5)

*** 96/03/05 Version 1.5

Add hash() and hexhash() methods at the suggestion/request of Gary
Howland <gary@kampai.euronet.nl> before inclusion in a wider library
of cryptography modules.

*** 96/02/27 Version 1.4

Finally fixed the pesky Solaris dynamic loading bug. All kudos to Ken
Pizzini <kenp@spry.com>!

*** 95/11/29 Version 1.3.1

Add explanations of current known problems.

*** 95/06/02 Version 1.3

Fix problems with scope resolution in addfile() reported by
Jean-Claude Giese <Jean-Claude.Giese@loria.fr>. Basically ARGV is
always implicitly in package main while other filehandles aren't.
 
*** 95/05/23 Version 1.2.1

[Changes pre 1.2.1 not recorded]

kêÞ# Æ ¤�          ‡  à}·:Â%:ÓÎž:!      0  /®  ‡      ./usr/local/lib/MD5-2.12/README              ó/      ¤�          Digest::*
---------

This package contains Perl extension interfaces for the following
message digest algorithms:

  - RSA Data Security Inc. MD5   (RFC 1321)
  - RSA Data Security Inc. MD2   (RFC 1319)
  - NIST SHA-1                   (FIPS PUB 180-1)

Modules to calculate HMAC (RFC 2104) digests are also provided.

To build the extensions, unpack this distribution somewhere, create
the Makefile by running 'perl Makefile.PL' and do a 'make', 'make
test', and if successful 'make install'.

You will need perl version 5.004 or better to install these modules.
Further documentation is embedded in the individual modules.

Copyright 1998-2000 Gisle Aas.
Copyright 1998 Graham Barr.
Copyright 1997 Uwe Hollerbach.
Copyright 1995-1996 Neil Winton.
Copyright 1990-1992 RSA Data Security, Inc.

This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

kêÄ@ Æ ¤�          —‰  à}·:Â%:ÓÎž:!        L®  —‰      ./usr/local/lib/MD5-2.12/rfc1321.txt                 ó/      ¤�          





Network Working Group                                          R. Rivest
Request for Comments: 1321           MIT Laboratory for Computer Science
                                             and RSA Data Security, Inc.
                                                              April 1992


                     The MD5 Message-Digest Algorithm

Status of this Memo

   This memo provides information for the Internet community.  It does
   not specify an Internet standard.  Distribution of this memo is
   unlimited.

Acknowlegements

   We would like to thank Don Coppersmith, Burt Kaliski, Ralph Merkle,
   David Chaum, and Noam Nisan for numerous helpful comments and
   suggestions.

Table of Contents

   1. Executive Summary                                                1
   2. Terminology and Notation                                         2
   3. MD5 Algorithm Description                                        3
   4. Summary                                                          6
   5. Differences Between MD4 and MD5                                  6
   References                                                          7
   APPENDIX A - Reference Implementation                               7
   Security Considerations                                            21
   Author's Address                                                   21

1. Executive Summary

   This document describes the MD5 message-digest algorithm. The
   algorithm takes as input a message of arbitrary length and produces
   as output a 128-bit "fingerprint" or "message digest" of the input.
   It is conjectured that it is computationally infeasible to produce
   two messages having the same message digest, or to produce any
   message having a given prespecified target message digest. The MD5
   algorithm is intended for digital signature applications, where a
   large file must be "compressed" in a secure manner before being
   encrypted with a private (secret) key under a public-key cryptosystem
   such as RSA.







Rivest                                                          [Page 1]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


   The MD5 algorithm is designed to be quite fast on 32-bit machines. In
   addition, the MD5 algorithm does not require any large substitution
   tables; the algorithm can be coded quite compactly.

   The MD5 algorithm is an extension of the MD4 message-digest algorithm
   1,2]. MD5 is slightly slower than MD4, but is more "conservative" in
   design. MD5 was designed because it was felt that MD4 was perhaps
   being adopted for use more quickly than justified by the existing
   critical review; because MD4 was designed to be exceptionally fast,
   it is "at the edge" in terms of risking successful cryptanalytic
   attack. MD5 backs off a bit, giving up a little in speed for a much
   greater likelihood of ultimate security. It incorporates some
   suggestions made by various reviewers, and contains additional
   optimizations. The MD5 algorithm is being placed in the public domain
   for review and possible adoption as a standard.

   For OSI-based applications, MD5's object identifier is

   md5 OBJECT IDENTIFIER ::=
     iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 5}

   In the X.509 type AlgorithmIdentifier [3], the parameters for MD5
   should have type NULL.

2. Terminology and Notation

   In this document a "word" is a 32-bit quantity and a "byte" is an
   eight-bit quantity. A sequence of bits can be interpreted in a
   natural manner as a sequence of bytes, where each consecutive group
   of eight bits is interpreted as a byte with the high-order (most
   significant) bit of each byte listed first. Similarly, a sequence of
   bytes can be interpreted as a sequence of 32-bit words, where each
   consecutive group of four bytes is interpreted as a word with the
   low-order (least significant) byte given first.

   Let x_i denote "x sub i". If the subscript is an expression, we
   surround it in braces, as in x_{i+1}. Similarly, we use ^ for
   superscripts (exponentiation), so that x^i denotes x to the i-th
   power.

   Let the symbol "+" denote addition of words (i.e., modulo-2^32
   addition). Let X <<< s denote the 32-bit value obtained by circularly
   shifting (rotating) X left by s bit positions. Let not(X) denote the
   bit-wise complement of X, and let X v Y denote the bit-wise OR of X
   and Y. Let X xor Y denote the bit-wise XOR of X and Y, and let XY
   denote the bit-wise AND of X and Y.





Rivest                                                          [Page 2]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


3. MD5 Algorithm Description

   We begin by supposing that we have a b-bit message as input, and that
   we wish to find its message digest. Here b is an arbitrary
   nonnegative integer; b may be zero, it need not be a multiple of
   eight, and it may be arbitrarily large. We imagine the bits of the
   message written down as follows:

          m_0 m_1 ... m_{b-1}

   The following five steps are performed to compute the message digest
   of the message.

3.1 Step 1. Append Padding Bits

   The message is "padded" (extended) so that its length (in bits) is
   congruent to 448, modulo 512. That is, the message is extended so
   that it is just 64 bits shy of being a multiple of 512 bits long.
   Padding is always performed, even if the length of the message is
   already congruent to 448, modulo 512.

   Padding is performed as follows: a single "1" bit is appended to the
   message, and then "0" bits are appended so that the length in bits of
   the padded message becomes congruent to 448, modulo 512. In all, at
   least one bit and at most 512 bits are appended.

3.2 Step 2. Append Length

   A 64-bit representation of b (the length of the message before the
   padding bits were added) is appended to the result of the previous
   step. In the unlikely event that b is greater than 2^64, then only
   the low-order 64 bits of b are used. (These bits are appended as two
   32-bit words and appended low-order word first in accordance with the
   previous conventions.)

   At this point the resulting message (after padding with bits and with
   b) has a length that is an exact multiple of 512 bits. Equivalently,
   this message has a length that is an exact multiple of 16 (32-bit)
   words. Let M[0 ... N-1] denote the words of the resulting message,
   where N is a multiple of 16.

3.3 Step 3. Initialize MD Buffer

   A four-word buffer (A,B,C,D) is used to compute the message digest.
   Here each of A, B, C, D is a 32-bit register. These registers are
   initialized to the following values in hexadecimal, low-order bytes
   first):




Rivest                                                          [Page 3]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


          word A: 01 23 45 67
          word B: 89 ab cd ef
          word C: fe dc ba 98
          word D: 76 54 32 10

3.4 Step 4. Process Message in 16-Word Blocks

   We first define four auxiliary functions that each take as input
   three 32-bit words and produce as output one 32-bit word.

          F(X,Y,Z) = XY v not(X) Z
          G(X,Y,Z) = XZ v Y not(Z)
          H(X,Y,Z) = X xor Y xor Z
          I(X,Y,Z) = Y xor (X v not(Z))

   In each bit position F acts as a conditional: if X then Y else Z.
   The function F could have been defined using + instead of v since XY
   and not(X)Z will never have 1's in the same bit position.) It is
   interesting to note that if the bits of X, Y, and Z are independent
   and unbiased, the each bit of F(X,Y,Z) will be independent and
   unbiased.

   The functions G, H, and I are similar to the function F, in that they
   act in "bitwise parallel" to produce their output from the bits of X,
   Y, and Z, in such a manner that if the corresponding bits of X, Y,
   and Z are independent and unbiased, then each bit of G(X,Y,Z),
   H(X,Y,Z), and I(X,Y,Z) will be independent and unbiased. Note that
   the function H is the bit-wise "xor" or "parity" function of its
   inputs.

   This step uses a 64-element table T[1 ... 64] constructed from the
   sine function. Let T[i] denote the i-th element of the table, which
   is equal to the integer part of 4294967296 times abs(sin(i)), where i
   is in radians. The elements of the table are given in the appendix.

   Do the following:

   /* Process each 16-word block. */
   For i = 0 to N/16-1 do

     /* Copy block i into X. */
     For j = 0 to 15 do
       Set X[j] to M[i*16+j].
     end /* of loop on j */

     /* Save A as AA, B as BB, C as CC, and D as DD. */
     AA = A
     BB = B



Rivest                                                          [Page 4]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


     CC = C
     DD = D

     /* Round 1. */
     /* Let [abcd k s i] denote the operation
          a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  0  7  1]  [DABC  1 12  2]  [CDAB  2 17  3]  [BCDA  3 22  4]
     [ABCD  4  7  5]  [DABC  5 12  6]  [CDAB  6 17  7]  [BCDA  7 22  8]
     [ABCD  8  7  9]  [DABC  9 12 10]  [CDAB 10 17 11]  [BCDA 11 22 12]
     [ABCD 12  7 13]  [DABC 13 12 14]  [CDAB 14 17 15]  [BCDA 15 22 16]

     /* Round 2. */
     /* Let [abcd k s i] denote the operation
          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  1  5 17]  [DABC  6  9 18]  [CDAB 11 14 19]  [BCDA  0 20 20]
     [ABCD  5  5 21]  [DABC 10  9 22]  [CDAB 15 14 23]  [BCDA  4 20 24]
     [ABCD  9  5 25]  [DABC 14  9 26]  [CDAB  3 14 27]  [BCDA  8 20 28]
     [ABCD 13  5 29]  [DABC  2  9 30]  [CDAB  7 14 31]  [BCDA 12 20 32]

     /* Round 3. */
     /* Let [abcd k s t] denote the operation
          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  5  4 33]  [DABC  8 11 34]  [CDAB 11 16 35]  [BCDA 14 23 36]
     [ABCD  1  4 37]  [DABC  4 11 38]  [CDAB  7 16 39]  [BCDA 10 23 40]
     [ABCD 13  4 41]  [DABC  0 11 42]  [CDAB  3 16 43]  [BCDA  6 23 44]
     [ABCD  9  4 45]  [DABC 12 11 46]  [CDAB 15 16 47]  [BCDA  2 23 48]

     /* Round 4. */
     /* Let [abcd k s t] denote the operation
          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
     /* Do the following 16 operations. */
     [ABCD  0  6 49]  [DABC  7 10 50]  [CDAB 14 15 51]  [BCDA  5 21 52]
     [ABCD 12  6 53]  [DABC  3 10 54]  [CDAB 10 15 55]  [BCDA  1 21 56]
     [ABCD  8  6 57]  [DABC 15 10 58]  [CDAB  6 15 59]  [BCDA 13 21 60]
     [ABCD  4  6 61]  [DABC 11 10 62]  [CDAB  2 15 63]  [BCDA  9 21 64]

     /* Then perform the following additions. (That is increment each
        of the four registers by the value it had before this block
        was started.) */
     A = A + AA
     B = B + BB
     C = C + CC
     D = D + DD

   end /* of loop on i */



Rivest                                                          [Page 5]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


3.5 Step 5. Output

   The message digest produced as output is A, B, C, D. That is, we
   begin with the low-order byte of A, and end with the high-order byte
   of D.

   This completes the description of MD5. A reference implementation in
   C is given in the appendix.

4. Summary

   The MD5 message-digest algorithm is simple to implement, and provides
   a "fingerprint" or message digest of a message of arbitrary length.
   It is conjectured that the difficulty of coming up with two messages
   having the same message digest is on the order of 2^64 operations,
   and that the difficulty of coming up with any message having a given
   message digest is on the order of 2^128 operations. The MD5 algorithm
   has been carefully scrutinized for weaknesses. It is, however, a
   relatively new algorithm and further security analysis is of course
   justified, as is the case with any new proposal of this sort.

5. Differences Between MD4 and MD5

     The following are the differences between MD4 and MD5:

       1.   A fourth round has been added.

       2.   Each step now has a unique additive constant.

       3.   The function g in round 2 was changed from (XY v XZ v YZ) to
       (XZ v Y not(Z)) to make g less symmetric.

       4.   Each step now adds in the result of the previous step.  This
       promotes a faster "avalanche effect".

       5.   The order in which input words are accessed in rounds 2 and
       3 is changed, to make these patterns less like each other.

       6.   The shift amounts in each round have been approximately
       optimized, to yield a faster "avalanche effect." The shifts in
       different rounds are distinct.










Rivest                                                          [Page 6]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


References

   [1] Rivest, R., "The MD4 Message Digest Algorithm", RFC 1320, MIT and
       RSA Data Security, Inc., April 1992.

   [2] Rivest, R., "The MD4 message digest algorithm", in A.J.  Menezes
       and S.A. Vanstone, editors, Advances in Cryptology - CRYPTO '90
       Proceedings, pages 303-311, Springer-Verlag, 1991.

   [3] CCITT Recommendation X.509 (1988), "The Directory -
       Authentication Framework."

APPENDIX A - Reference Implementation

   This appendix contains the following files taken from RSAREF: A
   Cryptographic Toolkit for Privacy-Enhanced Mail:

     global.h -- global header file

     md5.h -- header file for MD5

     md5c.c -- source code for MD5

   For more information on RSAREF, send email to <rsaref@rsa.com>.

   The appendix also includes the following file:

     mddriver.c -- test driver for MD2, MD4 and MD5

   The driver compiles for MD5 by default but can compile for MD2 or MD4
   if the symbol MD is defined on the C compiler command line as 2 or 4.

   The implementation is portable and should work on many different
   plaforms. However, it is not difficult to optimize the implementation
   on particular platforms, an exercise left to the reader. For example,
   on "little-endian" platforms where the lowest-addressed byte in a 32-
   bit word is the least significant and there are no alignment
   restrictions, the call to Decode in MD5Transform can be replaced with
   a typecast.

A.1 global.h

/* GLOBAL.H - RSAREF types and constants
 */

/* PROTOTYPES should be set to one if and only if the compiler supports
  function argument prototyping.
The following makes PROTOTYPES default to 0 if it has not already



Rivest                                                          [Page 7]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


  been defined with C compiler flags.
 */
#ifndef PROTOTYPES
#define PROTOTYPES 0
#endif

/* POINTER defines a generic pointer type */
typedef unsigned char *POINTER;

/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;

/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;

/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
  returns an empty list.
 */
#if PROTOTYPES
#define PROTO_LIST(list) list
#else
#define PROTO_LIST(list) ()
#endif

A.2 md5.h

/* MD5.H - header file for MD5C.C
 */

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.

License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.




Rivest                                                          [Page 8]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


These notices must be retained in any copies of any part of this
documentation and/or software.
 */

/* MD5 context. */
typedef struct {
  UINT4 state[4];                                   /* state (ABCD) */
  UINT4 count[2];        /* number of bits, modulo 2^64 (lsb first) */
  unsigned char buffer[64];                         /* input buffer */
} MD5_CTX;

void MD5Init PROTO_LIST ((MD5_CTX *));
void MD5Update PROTO_LIST
  ((MD5_CTX *, unsigned char *, unsigned int));
void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *));

A.3 md5c.c

/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
 */

/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.

License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this
documentation and/or software.
 */

#include "global.h"
#include "md5.h"

/* Constants for MD5Transform routine.
 */



Rivest                                                          [Page 9]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21

static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
static void Encode PROTO_LIST
  ((unsigned char *, UINT4 *, unsigned int));
static void Decode PROTO_LIST
  ((UINT4 *, unsigned char *, unsigned int));
static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));

static unsigned char PADDING[64] = {
  0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

/* F, G, H and I are basic MD5 functions.
 */
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))

/* ROTATE_LEFT rotates x left n bits.
 */
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))

/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
 */
#define FF(a, b, c, d, x, s, ac) { \
 (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
 (a) = ROTATE_LEFT ((a), (s)); \



Rivest                                                         [Page 10]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


 (a) += (b); \
  }
#define GG(a, b, c, d, x, s, ac) { \
 (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
 (a) = ROTATE_LEFT ((a), (s)); \
 (a) += (b); \
  }
#define HH(a, b, c, d, x, s, ac) { \
 (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
 (a) = ROTATE_LEFT ((a), (s)); \
 (a) += (b); \
  }
#define II(a, b, c, d, x, s, ac) { \
 (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
 (a) = ROTATE_LEFT ((a), (s)); \
 (a) += (b); \
  }

/* MD5 initialization. Begins an MD5 operation, writing a new context.
 */
void MD5Init (context)
MD5_CTX *context;                                        /* context */
{
  context->count[0] = context->count[1] = 0;
  /* Load magic initialization constants.
*/
  context->state[0] = 0x67452301;
  context->state[1] = 0xefcdab89;
  context->state[2] = 0x98badcfe;
  context->state[3] = 0x10325476;
}

/* MD5 block update operation. Continues an MD5 message-digest
  operation, processing another message block, and updating the
  context.
 */
void MD5Update (context, input, inputLen)
MD5_CTX *context;                                        /* context */
unsigned char *input;                                /* input block */
unsigned int inputLen;                     /* length of input block */
{
  unsigned int i, index, partLen;

  /* Compute number of bytes mod 64 */
  index = (unsigned int)((context->count[0] >> 3) & 0x3F);

  /* Update number of bits */
  if ((context->count[0] += ((UINT4)inputLen << 3))



Rivest                                                         [Page 11]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


   < ((UINT4)inputLen << 3))
 context->count[1]++;
  context->count[1] += ((UINT4)inputLen >> 29);

  partLen = 64 - index;

  /* Transform as many times as possible.
*/
  if (inputLen >= partLen) {
 MD5_memcpy
   ((POINTER)&context->buffer[index], (POINTER)input, partLen);
 MD5Transform (context->state, context->buffer);

 for (i = partLen; i + 63 < inputLen; i += 64)
   MD5Transform (context->state, &input[i]);

 index = 0;
  }
  else
 i = 0;

  /* Buffer remaining input */
  MD5_memcpy
 ((POINTER)&context->buffer[index], (POINTER)&input[i],
  inputLen-i);
}

/* MD5 finalization. Ends an MD5 message-digest operation, writing the
  the message digest and zeroizing the context.
 */
void MD5Final (digest, context)
unsigned char digest[16];                         /* message digest */
MD5_CTX *context;                                       /* context */
{
  unsigned char bits[8];
  unsigned int index, padLen;

  /* Save number of bits */
  Encode (bits, context->count, 8);

  /* Pad out to 56 mod 64.
*/
  index = (unsigned int)((context->count[0] >> 3) & 0x3f);
  padLen = (index < 56) ? (56 - index) : (120 - index);
  MD5Update (context, PADDING, padLen);

  /* Append length (before padding) */
  MD5Update (context, bits, 8);



Rivest                                                         [Page 12]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


  /* Store state in digest */
  Encode (digest, context->state, 16);

  /* Zeroize sensitive information.
*/
  MD5_memset ((POINTER)context, 0, sizeof (*context));
}

/* MD5 basic transformation. Transforms state based on block.
 */
static void MD5Transform (state, block)
UINT4 state[4];
unsigned char block[64];
{
  UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];

  Decode (x, block, 64);

  /* Round 1 */
  FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
  FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
  FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
  FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
  FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
  FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
  FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
  FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
  FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
  FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
  FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
  FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
  FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
  FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
  FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
  FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */

 /* Round 2 */
  GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
  GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
  GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
  GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
  GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
  GG (d, a, b, c, x[10], S22,  0x2441453); /* 22 */
  GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
  GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
  GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
  GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
  GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */



Rivest                                                         [Page 13]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


  GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
  GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
  GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
  GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
  GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */

  /* Round 3 */
  HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
  HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
  HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
  HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
  HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
  HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
  HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
  HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
  HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
  HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
  HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
  HH (b, c, d, a, x[ 6], S34,  0x4881d05); /* 44 */
  HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
  HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
  HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
  HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */

  /* Round 4 */
  II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
  II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
  II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
  II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
  II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
  II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
  II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
  II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
  II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
  II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
  II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
  II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
  II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
  II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
  II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
  II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */

  state[0] += a;
  state[1] += b;
  state[2] += c;
  state[3] += d;

  /* Zeroize sensitive information.



Rivest                                                         [Page 14]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


*/
  MD5_memset ((POINTER)x, 0, sizeof (x));
}

/* Encodes input (UINT4) into output (unsigned char). Assumes len is
  a multiple of 4.
 */
static void Encode (output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
{
  unsigned int i, j;

  for (i = 0, j = 0; j < len; i++, j += 4) {
 output[j] = (unsigned char)(input[i] & 0xff);
 output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
 output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
 output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
  }
}

/* Decodes input (unsigned char) into output (UINT4). Assumes len is
  a multiple of 4.
 */
static void Decode (output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
{
  unsigned int i, j;

  for (i = 0, j = 0; j < len; i++, j += 4)
 output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
   (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
}

/* Note: Replace "for loop" with standard memcpy if possible.
 */

static void MD5_memcpy (output, input, len)
POINTER output;
POINTER input;
unsigned int len;
{
  unsigned int i;

  for (i = 0; i < len; i++)



Rivest                                                         [Page 15]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


 output[i] = input[i];
}

/* Note: Replace "for loop" with standard memset if possible.
 */
static void MD5_memset (output, value, len)
POINTER output;
int value;
unsigned int len;
{
  unsigned int i;

  for (i = 0; i < len; i++)
 ((char *)output)[i] = (char)value;
}

A.4 mddriver.c

/* MDDRIVER.C - test driver for MD2, MD4 and MD5
 */

/* Copyright (C) 1990-2, RSA Data Security, Inc. Created 1990. All
rights reserved.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this
documentation and/or software.
 */

/* The following makes MD default to MD5 if it has not already been
  defined with C compiler flags.
 */
#ifndef MD
#define MD MD5
#endif

#include <stdio.h>
#include <time.h>
#include <string.h>
#include "global.h"
#if MD == 2
#include "md2.h"
#endif
#if MD == 4



Rivest                                                         [Page 16]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


#include "md4.h"
#endif
#if MD == 5
#include "md5.h"
#endif

/* Length of test block, number of test blocks.
 */
#define TEST_BLOCK_LEN 1000
#define TEST_BLOCK_COUNT 1000

static void MDString PROTO_LIST ((char *));
static void MDTimeTrial PROTO_LIST ((void));
static void MDTestSuite PROTO_LIST ((void));
static void MDFile PROTO_LIST ((char *));
static void MDFilter PROTO_LIST ((void));
static void MDPrint PROTO_LIST ((unsigned char [16]));

#if MD == 2
#define MD_CTX MD2_CTX
#define MDInit MD2Init
#define MDUpdate MD2Update
#define MDFinal MD2Final
#endif
#if MD == 4
#define MD_CTX MD4_CTX
#define MDInit MD4Init
#define MDUpdate MD4Update
#define MDFinal MD4Final
#endif
#if MD == 5
#define MD_CTX MD5_CTX
#define MDInit MD5Init
#define MDUpdate MD5Update
#define MDFinal MD5Final
#endif

/* Main driver.

Arguments (may be any combination):
  -sstring - digests string
  -t       - runs time trial
  -x       - runs test script
  filename - digests file
  (none)   - digests standard input
 */
int main (argc, argv)
int argc;



Rivest                                                         [Page 17]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


char *argv[];
{
  int i;

  if (argc > 1)
 for (i = 1; i < argc; i++)
   if (argv[i][0] == '-' && argv[i][1] == 's')
     MDString (argv[i] + 2);
   else if (strcmp (argv[i], "-t") == 0)
     MDTimeTrial ();
   else if (strcmp (argv[i], "-x") == 0)
     MDTestSuite ();
   else
     MDFile (argv[i]);
  else
 MDFilter ();

  return (0);
}

/* Digests a string and prints the result.
 */
static void MDString (string)
char *string;
{
  MD_CTX context;
  unsigned char digest[16];
  unsigned int len = strlen (string);

  MDInit (&context);
  MDUpdate (&context, string, len);
  MDFinal (digest, &context);

  printf ("MD%d (\"%s\") = ", MD, string);
  MDPrint (digest);
  printf ("\n");
}

/* Measures the time to digest TEST_BLOCK_COUNT TEST_BLOCK_LEN-byte
  blocks.
 */
static void MDTimeTrial ()
{
  MD_CTX context;
  time_t endTime, startTime;
  unsigned char block[TEST_BLOCK_LEN], digest[16];
  unsigned int i;




Rivest                                                         [Page 18]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


  printf
 ("MD%d time trial. Digesting %d %d-byte blocks ...", MD,
  TEST_BLOCK_LEN, TEST_BLOCK_COUNT);

  /* Initialize block */
  for (i = 0; i < TEST_BLOCK_LEN; i++)
 block[i] = (unsigned char)(i & 0xff);

  /* Start timer */
  time (&startTime);

  /* Digest blocks */
  MDInit (&context);
  for (i = 0; i < TEST_BLOCK_COUNT; i++)
 MDUpdate (&context, block, TEST_BLOCK_LEN);
  MDFinal (digest, &context);

  /* Stop timer */
  time (&endTime);

  printf (" done\n");
  printf ("Digest = ");
  MDPrint (digest);
  printf ("\nTime = %ld seconds\n", (long)(endTime-startTime));
  printf
 ("Speed = %ld bytes/second\n",
  (long)TEST_BLOCK_LEN * (long)TEST_BLOCK_COUNT/(endTime-startTime));
}

/* Digests a reference suite of strings and prints the results.
 */
static void MDTestSuite ()
{
  printf ("MD%d test suite:\n", MD);

  MDString ("");
  MDString ("a");
  MDString ("abc");
  MDString ("message digest");
  MDString ("abcdefghijklmnopqrstuvwxyz");
  MDString
 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
  MDString
 ("1234567890123456789012345678901234567890\
1234567890123456789012345678901234567890");
}

/* Digests a file and prints the result.



Rivest                                                         [Page 19]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


 */
static void MDFile (filename)
char *filename;
{
  FILE *file;
  MD_CTX context;
  int len;
  unsigned char buffer[1024], digest[16];

  if ((file = fopen (filename, "rb")) == NULL)
 printf ("%s can't be opened\n", filename);

  else {
 MDInit (&context);
 while (len = fread (buffer, 1, 1024, file))
   MDUpdate (&context, buffer, len);
 MDFinal (digest, &context);

 fclose (file);

 printf ("MD%d (%s) = ", MD, filename);
 MDPrint (digest);
 printf ("\n");
  }
}

/* Digests the standard input and prints the result.
 */
static void MDFilter ()
{
  MD_CTX context;
  int len;
  unsigned char buffer[16], digest[16];

  MDInit (&context);
  while (len = fread (buffer, 1, 16, stdin))
 MDUpdate (&context, buffer, len);
  MDFinal (digest, &context);

  MDPrint (digest);
  printf ("\n");
}

/* Prints a message digest in hexadecimal.
 */
static void MDPrint (digest)
unsigned char digest[16];
{



Rivest                                                         [Page 20]

RFC 1321              MD5 Message-Digest Algorithm            April 1992


  unsigned int i;

  for (i = 0; i < 16; i++)
 printf ("%02x", digest[i]);
}

A.5 Test suite

   The MD5 test suite (driver option "-x") should print the following
   results:

MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
d174ab98d277d9f5a5611c2c9f419d9f
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a

Security Considerations

   The level of security discussed in this memo is considered to be
   sufficient for implementing very high security hybrid digital-
   signature schemes based on MD5 and a public-key cryptosystem.

Author's Address

   Ronald L. Rivest
   Massachusetts Institute of Technology
   Laboratory for Computer Science
   NE43-324
   545 Technology Square
   Cambridge, MA  02139-1986

   Phone: (617) 253-5880
   EMail: rivest@theory.lcs.mit.edu












Rivest                                                         [Page 21]


kê Æ ¤�          W  à}·:Â%:ÓÎž:!        k®  W      ./usr/local/lib/MD5-2.12/rfc2104.txt                 ó/      ¤�          





Network Working Group                                       H. Krawczyk
Request for Comments: 2104                                          IBM
Category: Informational                                      M. Bellare
                                                                   UCSD
                                                             R. Canetti
                                                                    IBM
                                                          February 1997


             HMAC: Keyed-Hashing for Message Authentication

Status of This Memo

   This memo provides information for the Internet community.  This memo
   does not specify an Internet standard of any kind.  Distribution of
   this memo is unlimited.

Abstract

   This document describes HMAC, a mechanism for message authentication
   using cryptographic hash functions. HMAC can be used with any
   iterative cryptographic hash function, e.g., MD5, SHA-1, in
   combination with a secret shared key.  The cryptographic strength of
   HMAC depends on the properties of the underlying hash function.

1. Introduction

   Providing a way to check the integrity of information transmitted
   over or stored in an unreliable medium is a prime necessity in the
   world of open computing and communications. Mechanisms that provide
   such integrity check based on a secret key are usually called
   "message authentication codes" (MAC). Typically, message
   authentication codes are used between two parties that share a secret
   key in order to validate information transmitted between these
   parties. In this document we present such a MAC mechanism based on
   cryptographic hash functions. This mechanism, called HMAC, is based
   on work by the authors [BCK1] where the construction is presented and
   cryptographically analyzed. We refer to that work for the details on
   the rationale and security analysis of HMAC, and its comparison to
   other keyed-hash methods.











Krawczyk, et. al.            Informational                      [Page 1]

RFC 2104                          HMAC                     February 1997


   HMAC can be used in combination with any iterated cryptographic hash
   function. MD5 and SHA-1 are examples of such hash functions. HMAC
   also uses a secret key for calculation and verification of the
   message authentication values. The main goals behind this
   construction are

   * To use, without modifications, available hash functions.
     In particular, hash functions that perform well in software,
     and for which code is freely and widely available.

   * To preserve the original performance of the hash function without
     incurring a significant degradation.

   * To use and handle keys in a simple way.

   * To have a well understood cryptographic analysis of the strength of
     the authentication mechanism based on reasonable assumptions on the
     underlying hash function.

   * To allow for easy replaceability of the underlying hash function in
     case that faster or more secure hash functions are found or
     required.

   This document specifies HMAC using a generic cryptographic hash
   function (denoted by H). Specific instantiations of HMAC need to
   define a particular hash function. Current candidates for such hash
   functions include SHA-1 [SHA], MD5 [MD5], RIPEMD-128/160 [RIPEMD].
   These different realizations of HMAC will be denoted by HMAC-SHA1,
   HMAC-MD5, HMAC-RIPEMD, etc.

   Note: To the date of writing of this document MD5 and SHA-1 are the
   most widely used cryptographic hash functions. MD5 has been recently
   shown to be vulnerable to collision search attacks [Dobb].  This
   attack and other currently known weaknesses of MD5 do not compromise
   the use of MD5 within HMAC as specified in this document (see
   [Dobb]); however, SHA-1 appears to be a cryptographically stronger
   function. To this date, MD5 can be considered for use in HMAC for
   applications where the superior performance of MD5 is critical.   In
   any case, implementers and users need to be aware of possible
   cryptanalytic developments regarding any of these cryptographic hash
   functions, and the eventual need to replace the underlying hash
   function. (See section 6 for more information on the security of
   HMAC.)








Krawczyk, et. al.            Informational                      [Page 2]

RFC 2104                          HMAC                     February 1997


2. Definition of HMAC

   The definition of HMAC requires a cryptographic hash function, which
   we denote by H, and a secret key K. We assume H to be a cryptographic
   hash function where data is hashed by iterating a basic compression
   function on blocks of data.   We denote by B the byte-length of such
   blocks (B=64 for all the above mentioned examples of hash functions),
   and by L the byte-length of hash outputs (L=16 for MD5, L=20 for
   SHA-1).  The authentication key K can be of any length up to B, the
   block length of the hash function.  Applications that use keys longer
   than B bytes will first hash the key using H and then use the
   resultant L byte string as the actual key to HMAC. In any case the
   minimal recommended length for K is L bytes (as the hash output
   length). See section 3 for more information on keys.

   We define two fixed and different strings ipad and opad as follows
   (the 'i' and 'o' are mnemonics for inner and outer):

                   ipad = the byte 0x36 repeated B times
                  opad = the byte 0x5C repeated B times.

   To compute HMAC over the data `text' we perform

                    H(K XOR opad, H(K XOR ipad, text))

   Namely,

    (1) append zeros to the end of K to create a B byte string
        (e.g., if K is of length 20 bytes and B=64, then K will be
         appended with 44 zero bytes 0x00)
    (2) XOR (bitwise exclusive-OR) the B byte string computed in step
        (1) with ipad
    (3) append the stream of data 'text' to the B byte string resulting
        from step (2)
    (4) apply H to the stream generated in step (3)
    (5) XOR (bitwise exclusive-OR) the B byte string computed in
        step (1) with opad
    (6) append the H result from step (4) to the B byte string
        resulting from step (5)
    (7) apply H to the stream generated in step (6) and output
        the result

   For illustration purposes, sample code based on MD5 is provided as an
   appendix.







Krawczyk, et. al.            Informational                      [Page 3]

RFC 2104                          HMAC                     February 1997


3. Keys

   The key for HMAC can be of any length (keys longer than B bytes are
   first hashed using H).  However, less than L bytes is strongly
   discouraged as it would decrease the security strength of the
   function.  Keys longer than L bytes are acceptable but the extra
   length would not significantly increase the function strength. (A
   longer key may be advisable if the randomness of the key is
   considered weak.)

   Keys need to be chosen at random (or using a cryptographically strong
   pseudo-random generator seeded with a random seed), and periodically
   refreshed.  (Current attacks do not indicate a specific recommended
   frequency for key changes as these attacks are practically
   infeasible.  However, periodic key refreshment is a fundamental
   security practice that helps against potential weaknesses of the
   function and keys, and limits the damage of an exposed key.)

4. Implementation Note

   HMAC is defined in such a way that the underlying hash function H can
   be used with no modification to its code. In particular, it uses the
   function H with the pre-defined initial value IV (a fixed value
   specified by each iterative hash function to initialize its
   compression function).  However, if desired, a performance
   improvement can be achieved at the cost of (possibly) modifying the
   code of H to support variable IVs.

   The idea is that the intermediate results of the compression function
   on the B-byte blocks (K XOR ipad) and (K XOR opad) can be precomputed
   only once at the time of generation of the key K, or before its first
   use. These intermediate results are stored and then used to
   initialize the IV of H each time that a message needs to be
   authenticated.  This method saves, for each authenticated message,
   the application of the compression function of H on two B-byte blocks
   (i.e., on (K XOR ipad) and (K XOR opad)). Such a savings may be
   significant when authenticating short streams of data.  We stress
   that the stored intermediate values need to be treated and protected
   the same as secret keys.

   Choosing to implement HMAC in the above way is a decision of the
   local implementation and has no effect on inter-operability.









Krawczyk, et. al.            Informational                      [Page 4]

RFC 2104                          HMAC                     February 1997


5. Truncated output

   A well-known practice with message authentication codes is to
   truncate the output of the MAC and output only part of the bits
   (e.g., [MM, ANSI]).  Preneel and van Oorschot [PV] show some
   analytical advantages of truncating the output of hash-based MAC
   functions. The results in this area are not absolute as for the
   overall security advantages of truncation. It has advantages (less
   information on the hash result available to an attacker) and
   disadvantages (less bits to predict for the attacker).  Applications
   of HMAC can choose to truncate the output of HMAC by outputting the t
   leftmost bits of the HMAC computation for some parameter t (namely,
   the computation is carried in the normal way as defined in section 2
   above but the end result is truncated to t bits). We recommend that
   the output length t be not less than half the length of the hash
   output (to match the birthday attack bound) and not less than 80 bits
   (a suitable lower bound on the number of bits that need to be
   predicted by an attacker).  We propose denoting a realization of HMAC
   that uses a hash function H with t bits of output as HMAC-H-t. For
   example, HMAC-SHA1-80 denotes HMAC computed using the SHA-1 function
   and with the output truncated to 80 bits.  (If the parameter t is not
   specified, e.g. HMAC-MD5, then it is assumed that all the bits of the
   hash are output.)

6. Security

   The security of the message authentication mechanism presented here
   depends on cryptographic properties of the hash function H: the
   resistance to collision finding (limited to the case where the
   initial value is secret and random, and where the output of the
   function is not explicitly available to the attacker), and the
   message authentication property of the compression function of H when
   applied to single blocks (in HMAC these blocks are partially unknown
   to an attacker as they contain the result of the inner H computation
   and, in particular, cannot be fully chosen by the attacker).

   These properties, and actually stronger ones, are commonly assumed
   for hash functions of the kind used with HMAC. In particular, a hash
   function for which the above properties do not hold would become
   unsuitable for most (probably, all) cryptographic applications,
   including alternative message authentication schemes based on such
   functions.  (For a complete analysis and rationale of the HMAC
   function the reader is referred to [BCK1].)








Krawczyk, et. al.            Informational                      [Page 5]

RFC 2104                          HMAC                     February 1997


   Given the limited confidence gained so far as for the cryptographic
   strength of candidate hash functions, it is important to observe the
   following two properties of the HMAC construction and its secure use
   for message authentication:

   1. The construction is independent of the details of the particular
   hash function H in use and then the latter can be replaced by any
   other secure (iterative) cryptographic hash function.

   2. Message authentication, as opposed to encryption, has a
   "transient" effect. A published breaking of a message authentication
   scheme would lead to the replacement of that scheme, but would have
   no adversarial effect on information authenticated in the past.  This
   is in sharp contrast with encryption, where information encrypted
   today may suffer from exposure in the future if, and when, the
   encryption algorithm is broken.

   The strongest attack known against HMAC is based on the frequency of
   collisions for the hash function H ("birthday attack") [PV,BCK2], and
   is totally impractical for minimally reasonable hash functions.

   As an example, if we consider a hash function like MD5 where the
   output length equals L=16 bytes (128 bits) the attacker needs to
   acquire the correct message authentication tags computed (with the
   _same_ secret key K!) on about 2**64 known plaintexts.  This would
   require the processing of at least 2**64 blocks under H, an
   impossible task in any realistic scenario (for a block length of 64
   bytes this would take 250,000 years in a continuous 1Gbps link, and
   without changing the secret key K during all this time).  This attack
   could become realistic only if serious flaws in the collision
   behavior of the function H are discovered (e.g.  collisions found
   after 2**30 messages). Such a discovery would determine the immediate
   replacement of the function H (the effects of such failure would be
   far more severe for the traditional uses of H in the context of
   digital signatures, public key certificates, etc.).

   Note: this attack needs to be strongly contrasted with regular
   collision attacks on cryptographic hash functions where no secret key
   is involved and where 2**64 off-line parallelizable (!) operations
   suffice to find collisions.  The latter attack is approaching
   feasibility [VW] while the birthday attack on HMAC is totally
   impractical.  (In the above examples, if one uses a hash function
   with, say, 160 bit of output then 2**64 should be replaced by 2**80.)








Krawczyk, et. al.            Informational                      [Page 6]

RFC 2104                          HMAC                     February 1997


   A correct implementation of the above construction, the choice of
   random (or cryptographically pseudorandom) keys, a secure key
   exchange mechanism, frequent key refreshments, and good secrecy
   protection of keys are all essential ingredients for the security of
   the integrity verification mechanism provided by HMAC.














































Krawczyk, et. al.            Informational                      [Page 7]

RFC 2104                          HMAC                     February 1997


Appendix -- Sample Code

   For the sake of illustration we provide the following sample code for
   the implementation of HMAC-MD5 as well as some corresponding test
   vectors (the code is based on MD5 code as described in [MD5]).

/*
** Function: hmac_md5
*/

void
hmac_md5(text, text_len, key, key_len, digest)
unsigned char*  text;                /* pointer to data stream */
int             text_len;            /* length of data stream */
unsigned char*  key;                 /* pointer to authentication key */
int             key_len;             /* length of authentication key */
caddr_t         digest;              /* caller digest to be filled in */

{
        MD5_CTX context;
        unsigned char k_ipad[65];    /* inner padding -
                                      * key XORd with ipad
                                      */
        unsigned char k_opad[65];    /* outer padding -
                                      * key XORd with opad
                                      */
        unsigned char tk[16];
        int i;
        /* if key is longer than 64 bytes reset it to key=MD5(key) */
        if (key_len > 64) {

                MD5_CTX      tctx;

                MD5Init(&tctx);
                MD5Update(&tctx, key, key_len);
                MD5Final(tk, &tctx);

                key = tk;
                key_len = 16;
        }

        /*
         * the HMAC_MD5 transform looks like:
         *
         * MD5(K XOR opad, MD5(K XOR ipad, text))
         *
         * where K is an n byte key
         * ipad is the byte 0x36 repeated 64 times



Krawczyk, et. al.            Informational                      [Page 8]

RFC 2104                          HMAC                     February 1997


         * opad is the byte 0x5c repeated 64 times
         * and text is the data being protected
         */

        /* start out by storing key in pads */
        bzero( k_ipad, sizeof k_ipad);
        bzero( k_opad, sizeof k_opad);
        bcopy( key, k_ipad, key_len);
        bcopy( key, k_opad, key_len);

        /* XOR key with ipad and opad values */
        for (i=0; i<64; i++) {
                k_ipad[i] ^= 0x36;
                k_opad[i] ^= 0x5c;
        }
        /*
         * perform inner MD5
         */
        MD5Init(&context);                   /* init context for 1st
                                              * pass */
        MD5Update(&context, k_ipad, 64)      /* start with inner pad */
        MD5Update(&context, text, text_len); /* then text of datagram */
        MD5Final(digest, &context);          /* finish up 1st pass */
        /*
         * perform outer MD5
         */
        MD5Init(&context);                   /* init context for 2nd
                                              * pass */
        MD5Update(&context, k_opad, 64);     /* start with outer pad */
        MD5Update(&context, digest, 16);     /* then results of 1st
                                              * hash */
        MD5Final(digest, &context);          /* finish up 2nd pass */
}

Test Vectors (Trailing '\0' of a character string not included in test):

  key =         0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
  key_len =     16 bytes
  data =        "Hi There"
  data_len =    8  bytes
  digest =      0x9294727a3638bb1c13f48ef8158bfc9d

  key =         "Jefe"
  data =        "what do ya want for nothing?"
  data_len =    28 bytes
  digest =      0x750c783e6ab0b503eaa86e310a5db738

  key =         0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA



Krawczyk, et. al.            Informational                      [Page 9]

RFC 2104                          HMAC                     February 1997


  key_len       16 bytes
  data =        0xDDDDDDDDDDDDDDDDDDDD...
                ..DDDDDDDDDDDDDDDDDDDD...
                ..DDDDDDDDDDDDDDDDDDDD...
                ..DDDDDDDDDDDDDDDDDDDD...
                ..DDDDDDDDDDDDDDDDDDDD
  data_len =    50 bytes
  digest =      0x56be34521d144c88dbb8c733f0e8b3f6

Acknowledgments

   Pau-Chen Cheng, Jeff Kraemer, and Michael Oehler, have provided
   useful comments on early drafts, and ran the first interoperability
   tests of this specification. Jeff and Pau-Chen kindly provided the
   sample code and test vectors that appear in the appendix.  Burt
   Kaliski, Bart Preneel, Matt Robshaw, Adi Shamir, and Paul van
   Oorschot have provided useful comments and suggestions during the
   investigation of the HMAC construction.

References

   [ANSI]  ANSI X9.9, "American National Standard for Financial
           Institution Message Authentication (Wholesale)," American
           Bankers Association, 1981.   Revised 1986.

   [Atk]   Atkinson, R., "IP Authentication Header", RFC 1826, August
           1995.

   [BCK1]  M. Bellare, R. Canetti, and H. Krawczyk,
           "Keyed Hash Functions and Message Authentication",
           Proceedings of Crypto'96, LNCS 1109, pp. 1-15.
           (http://www.research.ibm.com/security/keyed-md5.html)

   [BCK2]  M. Bellare, R. Canetti, and H. Krawczyk,
           "Pseudorandom Functions Revisited: The Cascade Construction",
           Proceedings of FOCS'96.

   [Dobb]  H. Dobbertin, "The Status of MD5  After a Recent Attack",
           RSA Labs' CryptoBytes, Vol. 2 No. 2, Summer 1996.
           http://www.rsa.com/rsalabs/pubs/cryptobytes.html

   [PV]    B. Preneel and P. van Oorschot, "Building fast MACs from hash
           functions", Advances in Cryptology -- CRYPTO'95 Proceedings,
           Lecture Notes in Computer Science, Springer-Verlag Vol.963,
           1995, pp. 1-14.

   [MD5]   Rivest, R., "The MD5 Message-Digest Algorithm",
           RFC 1321, April 1992.



Krawczyk, et. al.            Informational                     [Page 10]

RFC 2104                          HMAC                     February 1997


   [MM]    Meyer, S. and Matyas, S.M., Cryptography, New York Wiley,
           1982.

   [RIPEMD] H. Dobbertin, A. Bosselaers, and B. Preneel, "RIPEMD-160: A
            strengthened version of RIPEMD", Fast Software Encryption,
            LNCS Vol 1039, pp. 71-82.
            ftp://ftp.esat.kuleuven.ac.be/pub/COSIC/bosselae/ripemd/.

   [SHA]   NIST, FIPS PUB 180-1: Secure Hash Standard, April 1995.

   [Tsu]   G. Tsudik, "Message authentication with one-way hash
           functions", In Proceedings of Infocom'92, May 1992.
           (Also in "Access Control and Policy Enforcement in
            Internetworks", Ph.D. Dissertation, Computer Science
            Department, University of Southern California, April 1991.)

   [VW]    P. van Oorschot and M. Wiener, "Parallel Collision
           Search with Applications to Hash Functions and Discrete
           Logarithms", Proceedings of the 2nd ACM Conf. Computer and
           Communications Security, Fairfax, VA, November 1994.

Authors' Addresses

   Hugo Krawczyk
   IBM T.J. Watson Research Center
   P.O.Box 704
   Yorktown Heights, NY 10598

   EMail: hugo@watson.ibm.com

   Mihir Bellare
   Dept of Computer Science and Engineering
   Mail Code 0114
   University of California at San Diego
   9500 Gilman Drive
   La Jolla, CA 92093

   EMail: mihir@cs.ucsd.edu

   Ran Canetti
   IBM T.J. Watson Research Center
   P.O.Box 704
   Yorktown Heights, NY 10598

   EMail: canetti@watson.ibm.com






Krawczyk, et. al.            Informational                     [Page 11]

igest =kêJþ ƒ ¤�            à}·:Â%:ÓÎž:!      0  h        ./usr/local/lib/MD5-2.12/examples/twdigest.pl                ó/      ¤�          #!/usr/local/bin/perl

use MD5;

#
# twdigest -- format MD5 digest like TripWire does
#
# This converts the md5->digest binary string to
# 64-radix ascii, given the base-vector:
# 0 - 9, A - Z, a - z, :, .
#

sub twdigest {
    my($digest) = @_;
    my(@chunks, $bits);

    # Convert to ASCII bit-string
    $bits = unpack("B*", $digest);

    # Round up length to multiple of 6 by prepending zeros
    $bits = ("0" x ((6 - (length($bits) % 6)) % 6)) . $bits;

    # Split into 6-bit chunks
    @chunks = grep {$_ ne ''} (split(/(.{6})/, $bits, -1));

    # Convert each 6-bit value to a single character
    foreach (@chunks)
    {
	$_ = pack("B8", "00" . $_);
	tr/\000-\011\012-\043\044-\075\076\077/0-9A-Za-z:./;
    }

    # Join all of the chunks into one string
    join('', @chunks);
}
 1992.kê4ê „ ¤�          Í  à}·:Â%:ÓÎž:!      0  i  Í      ./usr/local/lib/MD5-2.12/examples/mddriver.pl                ó/      ¤�          #!/usr/local/bin/perl
# SCCS ID @(#)mddriver.pl	1.3 95/05/01

require 'getopts.pl';
use MD5;
sub DoTest;

&Getopts('s:x');

$md5 = new MD5;

if (defined($opt_s))
{
    $md5->add($opt_s);
    $digest = $md5->digest();
    print("MD5(\"$opt_s\") = " . unpack("H*", $digest) . "\n");
}
elsif ($opt_x)
{
    DoTest("", "d41d8cd98f00b204e9800998ecf8427e");
    DoTest("a", "0cc175b9c0f1b6a831c399e269772661");
    DoTest("abc", "900150983cd24fb0d6963f7d28e17f72");
    DoTest("message digest", "f96b697d7cb7938d525a2f31aaf161d0");
    DoTest("abcdefghijklmnopqrstuvwxyz", "c3fcd3d76192e4007dfb496cca67e13b");
    DoTest("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
	   "d174ab98d277d9f5a5611c2c9f419d9f");
    DoTest("12345678901234567890123456789012345678901234567890123456789012345678901234567890",
	   "57edf4a22be3c955ac49da2e2107b67a");
}
else
{
    if ($#ARGV >= 0)
    {
	foreach $ARGV (@ARGV)
	{
	    die "Can't open file '$ARGV' ($!)\n" unless open(ARGV, $ARGV);

	    $md5->reset();
	    $md5->addfile(ARGV);
	    $hex = $md5->hexdigest();
	    print "MD5($ARGV) = $hex\n";

	    close(ARGV);
	}
    }
    else
    {
	$md5->reset();
	$md5->addfile(STDIN);
	$hex = $md5->hexdigest();

	print "$hex\n";
    }
}

exit 0;

sub DoTest
{
    my ($str, $expect) = @_;
    my ($digest, $hex);
    my $md5 = new MD5;

    $md5->add($str);
    $digest = $md5->digest();
    $hex = unpack("H*", $digest);

    print "MD5(\"$str\") =>\nEXPECT: $expect\nRESULT: $hex\n"
}
de kê2ú Æ ¤�          ¸  à}·:Õ%:ÓÎž:!      0  0®  ¸      ./usr/local/lib/MD5-2.12/MANIFEST mddriv             ó/      ¤�          README			Guess what?
MANIFEST		This file
MD2/MD2.pm		Digest::MD2 Perl Module
MD2/MD2.xs		MD2 XS implementation
MD2/Makefile.PL		Perl Makefile builder
MD2/rfc1319.txt		The MD2 Message-Digest Algorithm
MD2/t/badfile.t         Try addfile() on unopened file
MD2/t/md2.t		Test if Digest::MD2 works
MD2/typemap		Supplementary typemap
MD5.pm			Digest::MD5 Perl Module
hints/dec_osf.pl	Workaround for DEC compiler bug
hints/irix_6.pl		Workaround for IRIX compiler bug
lib/MD5.pm		MD5 backwards compatibility stuff
lib/Digest.pm		Loading frontend
lib/Digest/HMAC.pm      HMAC implementation
lib/Digest/HMAC_MD5.pm  HMAC using MD5
lib/Digest/HMAC_SHA1.pm HMAC using SHA-1
MD5.xs			MD5 Perl 'XS' source file
typemap			Supplementary typemap
Makefile.PL		Perl Makefile builder
SHA1/Makefile.PL	Perl Makefile builder
SHA1/SHA1.pm		Digest::SHA1 module
SHA1/SHA1.xs		SHA-1 XS implementation
SHA1/fip180-1.gif       SHA-1 specification illustration
SHA1/fip180-1.html      SHA-1 specification
SHA1/lib/SHA.pm		SHA backwards compatibility stuff
SHA1/t/badfile.t        Try addfile() on unopened file
SHA1/t/sha.t		Uwe's old test
SHA1/t/sha1.t		Test if Digest::SHA1 works
SHA1/typemap		Supplementary typemap
rfc1321.txt		The MD5 Message-Digest Algorithm
rfc2104.txt		HMAC: Keyed-Hashing for Message Authentication
t/badfile.t             Try addfile() on unopened file
t/digest.t		Test Digest.pm loader
t/files.t		Check a few files.
t/md5.t			Test suite using standard Perl conventions
t/md5-aaa.t		Exercise padding code
t/rfc2202.t		Test Cases for HMAC-MD5 and HMAC-SHA-1
Changes			Version history
examples/mddriver.pl	Example driver script after mddriver.c in RFC 1321
examples/twdigest.pl	Example code to format a digest like Tripwire
kêè" c§ ¤�          ™  à}·:Â%:ÓÎž:!      0  üm  ™      ./usr/local/lib/MD5-2.12/t/digest.t driv             ó/      ¤�          print "1..3\n";

use Digest;

print "not " unless Digest->MD5->add("abc")->hexdigest eq "900150983cd24fb0d6963f7d28e17f72";
print "ok 1\n";

print "not " unless Digest->MD5->add("abc")->hexdigest eq "900150983cd24fb0d6963f7d28e17f72";
print "ok 2\n";

print "not " unless Digest->new("HMAC-MD5" => "Jefe")->add("what do ya want for nothing?")->hexdigest eq "750c783e6ab0b503eaa86e310a5db738";
print "ok 3\n";
g
hintskêþ) d§ ¤�          Ä  à}·:Â%:ÓÎž:!      0  ým  Ä      ./usr/local/lib/MD5-2.12/t/badfile.t riv             ó/      ¤�          # Digest::MD5 2.07 and older used to trigger a core dump when
# passed an illegal file handle that failed to open.

print "1..2\n";

use Digest::MD5 ();

$md5 = Digest::MD5->new;

eval {
   use vars qw(*FOO);
   $md5->addfile(*FOO);
};
print "not " unless $@ =~ /^Bad filehandle: FOO/;
print "ok 1\n";

open(BAR, "none-existing-file.$$");
$md5->addfile(*BAR);

print "not " unless $md5->hexdigest eq "d41d8cd98f00b204e9800998ecf8427e";
print "ok 2\n";
ilerkêF e§ ¤�          L8  à}·:Â%:ÓÎž:!         5n  L8      ./usr/local/lib/MD5-2.12/t/rfc2202.t riv             ó/      ¤�          print "1..14\n";

$test_case = 0;
$algorithm = "";

while (<DATA>) {
   next if /^\s+$/;            # blank lines
   next if /^Cheng & Glenn/;   # page header
   next if /^RFC 2202/;        # page header
   chomp;
   if (/^2\. Test Cases for/ .. /4\. Security Considerations/) {
	if (/^\d+\. Test Cases for (\S+)/) {
	    if (defined $key) { save($key, $val); undef($key) }
	    $algorithm = $1;
        } elsif (/^(\w+(?:-\w+)*)\s+=\s+(.*)/) {
            save($key, $val) if defined $key;
	    $key = $1;
	    $val = $2;
	    $test_case = $val if $key eq "test_case";
        } elsif (/^\s+(.*)/) {
	    $val .= " $1";
        } elsif (/^4\. /) {
	    # ignore
        } else {
	    print ">>> $_\n";
        }
   }
}
close(DATA);
save($key, $val) if $key;

sub save
{
    my($key,$val) = @_;
    if ($val =~ /^0x(..) repeated (\d+) times$/) {
	$val = chr(hex($1)) x $2;
    } elsif ($val =~ s/^0x//) {
	$val = pack("H*", $val);
    } elsif ($val =~ s/^\"// && $val =~ s/\"$//) {
	# we already did it
    }
    $case{$algorithm}[$test_case-1]{$key} = $val;
}

#use Data::Dumper; print Dumper(\%case);


$testno = 0;

use Digest::HMAC_MD5 qw(hmac_md5);
print "\n# HMAC-MD5 tests\n";
foreach (@{$case{"HMAC-MD5"}}) {
    $testno++;

    # This is a temporary workaround necessitated by a DEC
    # compiler bug which breaks the 'x' operator.  See
    #
    #  http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/1998-12/msg01720.html
    #
    if ($^O eq 'dec_osf' and $] < 5.00503) {
      require Config;
      my $temp=\%Config::Config;  # suppress a silly warning
      if ($testno =~ /^(?:3|4|6|7)$/ and ! $Config::Config{gccversion}) {
        print "ok $testno # skipping test on this platform\n";
        next;
      }
    }

    #use Data::Dumper; print Dumper($_);
    warn unless length($_->{key}) == $_->{key_len};
    warn unless length($_->{data}) == $_->{data_len};

    my $failed;
    # Test OO interface
    my $hasher = Digest::HMAC_MD5->new($_->{key});
    $hasher->add($_->{data});
    $failed++ unless $hasher->digest eq $_->{digest};

    # Test functional interface
    $failed++ if hmac_md5($_->{data}, $_->{key}) ne $_->{digest};
    print "not " if $failed;
    print "ok $testno\n";
}

# Digest::SHA1 might fail if the SHA module is not installed
eval {
   # use Digest::HMAC_SHA1 qw(hmac_sha1);
   require Digest::HMAC_SHA1;
   *hmac_sha1 = \&Digest::HMAC_SHA1::hmac_sha1;
};
if ($@) {
   print "\n# HMAC-SHA-1 tests skipped\n$@\n";
   for (8..14) { print "ok $_\n"; }
}
else {

print "\n# HMAC-SHA-1 tests\n";
foreach (@{$case{"HMAC-SHA-1"}}) {
    $testno++;
    #use Data::Dumper; print Dumper($_);
    warn unless length($_->{key}) == $_->{key_len};
    warn unless length($_->{data}) == $_->{data_len};

    my $failed;
    # Test OO interface
    my $hasher = Digest::HMAC_SHA1->new($_->{key});
    $hasher->add($_->{data});
    $failed++ unless $hasher->digest eq $_->{digest};

    # Test functional interface
    $failed++ if hmac_sha1($_->{data}, $_->{key}) ne $_->{digest};

    print "not " if $failed;
    print "ok $testno\n";
}
}

__END__


Network Working Group                                          P. Cheng
Request for Comments: 2202                                          IBM
Category: Informational                                        R. Glenn
                                                                   NIST
                                                         September 1997


                 Test Cases for HMAC-MD5 and HMAC-SHA-1

Status of This Memo

   This memo provides information for the Internet community.  This memo
   does not specify an Internet standard of any kind.  Distribution of
   this memo is unlimited.

Abstract

   This document provides two sets of test cases for HMAC-MD5 and HMAC-
   SHA-1, respectively. HMAC-MD5 and HMAC-SHA-1 are two constructs of
   the HMAC [HMAC] message authentication function using the MD5 [MD5]
   hash function and the SHA-1 [SHA] hash function. Both constructs are
   used by IPSEC [OG,CG] and other protocols to authenticate messages.
   The test cases and results provided in this document are meant to be
   used as a conformance test for HMAC-MD5 and HMAC-SHA-1
   implementations.

1. Introduction

   The general method for constructing a HMAC message authentication
   function using a particular hash function is described in section 2
   of [HMAC]. We will not repeat the description here. Section 5 of
   [HMAC] also discusses truncating the output of HMAC; the rule is that
   we should keep the more significant bits (the bits in the left,
   assuming a network byte order (big-endian)).

   In sections 2 and 3 we provide test cases for HMAC-MD5 and HMAC-SHA-
   1, respectively. Each case includes the key, the data, and the
   result.  The values of keys and data are either hexadecimal numbers
   (prefixed by "0x") or ASCII character strings in double quotes. If a
   value is an ASCII character string, then the HMAC computation for the
   corresponding test case DOES NOT include the trailing null character
   ('\0') in the string.









Cheng & Glenn                Informational                      [Page 1]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


   The C source code of the functions used to generate HMAC-SHA-1
   results is listed in the Appendix. Note that these functions are
   meant to be simple and easy to understand; they are not optimized in
   any way. The C source code for computing HMAC-MD5 can be found in
   [MD5]; or you can do a simple modification to HMAC-SHA-1 code to get
   HMAC-MD5 code, as explained in the Appendix.

   The test cases in this document are cross-verified by three
   independent implementations, one from NIST and two from IBM Research.
   One IBM implementation uses optimized code that is very different
   from the code in the Appendix. An implemenation that concurs with the
   results provided in this document should be interoperable with other
   similar implemenations.  We do not claim that such an implementation
   is absolutely correct with respect to the HMAC definition in [HMAC].

2. Test Cases for HMAC-MD5

test_case =     1
key =           0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
key_len =       16
data =          "Hi There"
data_len =      8
digest =        0x9294727a3638bb1c13f48ef8158bfc9d

test_case =     2
key =           "Jefe"
key_len =       4
data =          "what do ya want for nothing?"
data_len =      28
digest =        0x750c783e6ab0b503eaa86e310a5db738

test_case =     3
key =           0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
key_len =       16
data =          0xdd repeated 50 times
data_len =      50
digest =        0x56be34521d144c88dbb8c733f0e8b3f6

test_case =     4
key =           0x0102030405060708090a0b0c0d0e0f10111213141516171819
key_len =       25
data =          0xcd repeated 50 times
data_len =      50
digest =        0x697eaf0aca3a3aea3a75164746ffaa79







Cheng & Glenn                Informational                      [Page 2]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


test_case =     5
key =           0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
key_len =       16
data =          "Test With Truncation"
data_len =      20
digest =        0x56461ef2342edc00f9bab995690efd4c
digest-96 =     0x56461ef2342edc00f9bab995

test_case =     6
key =           0xaa repeated 80 times
key_len =       80
data =          "Test Using Larger Than Block-Size Key - Hash Key First"
data_len =      54
digest =        0x6b1ab7fe4bd7bf8f0b62e6ce61b9d0cd

test_case =     7
key =           0xaa repeated 80 times
key_len =       80
data =          "Test Using Larger Than Block-Size Key and Larger
                Than One Block-Size Data"
data_len =      73
digest =        0x6f630fad67cda0ee1fb1f562db3aa53e

3. Test Cases for HMAC-SHA-1

test_case =     1
key =           0x0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b
key_len =       20
data =          "Hi There"
data_len =      8
digest =        0xb617318655057264e28bc0b6fb378c8ef146be00

test_case =     2
key =           "Jefe"
key_len =       4
data =          "what do ya want for nothing?"
data_len =      28
digest =        0xeffcdf6ae5eb2fa2d27416d5f184df9c259a7c79

test_case =     3
key =           0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
key_len =       20
data =          0xdd repeated 50 times
data_len =      50
digest =        0x125d7342b9ac11cd91a39af48aa17b4f63f175d3






Cheng & Glenn                Informational                      [Page 3]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


test_case =     4
key =           0x0102030405060708090a0b0c0d0e0f10111213141516171819
key_len =       25
data =          0xcd repeated 50 times
data_len =      50
digest =        0x4c9007f4026250c6bc8414f9bf50c86c2d7235da

test_case =     5
key =           0x0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c
key_len =       20
data =          "Test With Truncation"
data_len =      20
digest =        0x4c1a03424b55e07fe7f27be1d58bb9324a9a5a04
digest-96 =     0x4c1a03424b55e07fe7f27be1

test_case =     6
key =           0xaa repeated 80 times
key_len =       80
data =          "Test Using Larger Than Block-Size Key - Hash Key First"
data_len =      54
digest =        0xaa4ae5e15272d00e95705637ce8a3b55ed402112

test_case =     7
key =           0xaa repeated 80 times
key_len =       80
data =          "Test Using Larger Than Block-Size Key and Larger
                Than One Block-Size Data"
data_len =      73
digest =        0xe8e99d0f45237d786d6bbaa7965c7808bbff1a91




Cheng & Glenn                Informational                      [Page 4]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


4. Security Considerations

   This docuemnt raises no security issues. Discussion on the strength
   of the HMAC construction can be found in [HMAC].

References

   [HMAC]    Krawczyk, H., Bellare, M., and R. Canetti,
             "HMAC: Keyed-Hashing for Message Authentication",
             RFC 2104, February 1997.

   [MD5]     Rivest, R., "The MD5 Message-Digest Algorithm",
             RFC 1321, April 1992.

   [SHA]     NIST, FIPS PUB 180-1: Secure Hash Standard, April 1995.

   [OG]      Oehler, M., and R. Glenn,
             "HMAC-MD5 IP Authentication with Replay Prevention",
             RFC 2085, February 1997.

   [CG]      Chang, S., and R. Glenn,
             "HMAC-SHA IP Authentication with Replay Prevention",
             Work in Progress.




























Cheng & Glenn                Informational                      [Page 5]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


Authors' Addresses

   Pau-Chen Cheng
   IBM T.J. Watson Research Center
   P.O.Box 704
   Yorktown Heights, NY 10598

   EMail: pau@watson.ibm.com


   Robert Glenn
   NIST
   Building 820, Room 455
   Gaithersburg, MD 20899

   EMail: rob.glenn@nist.gov



































Cheng & Glenn                Informational                      [Page 6]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


Appendix

   This appendix contains the C reference code which implements HMAC-
   SHA-1 using an existing SHA-1 library.  It assumes that the SHA-1
   library has similar API's as those of the MD5 code described in RFC
   1321.  The code for HMAC-MD5 is similar, just replace the strings
   "SHA" and "sha" with "MD5" and "md5". HMAC-MD5 code is also listed in
   RFC 2104.

   #ifndef SHA_DIGESTSIZE
   #define SHA_DIGESTSIZE  20
   #endif

   #ifndef SHA_BLOCKSIZE
   #define SHA_BLOCKSIZE   64
   #endif

   #ifndef MD5_DIGESTSIZE
   #define MD5_DIGESTSIZE  16
   #endif

   #ifndef MD5_BLOCKSIZE
   #define MD5_BLOCKSIZE   64
   #endif

   /* Function to print the digest */
   void
   pr_sha(FILE* fp, char* s, int t)
   {
           int     i ;

           fprintf(fp, "0x") ;
           for (i = 0 ; i < t ; i++)
                   fprintf(fp, "%02x", s[i]) ;
           fprintf(fp, "0) ;
   }

   void truncate
   (
    char*   d1,   /* data to be truncated */
    char*   d2,   /* truncated data */
    int     len   /* length in bytes to keep */
   )
   {
           int     i ;
           for (i = 0 ; i < len ; i++) d2[i] = d1[i];
   }




Cheng & Glenn                Informational                      [Page 7]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


   /* Function to compute the digest */
   void
   hmac_sha
   (
    char*    k,     /* secret key */
    int      lk,    /* length of the key in bytes */
    char*    d,     /* data */
    int      ld,    /* length of data in bytes */
    char*    out,   /* output buffer, at least "t" bytes */
    int      t
   )
   {
           SHA_CTX ictx, octx ;
           char    isha[SHA_DIGESTSIZE], osha[SHA_DIGESTSIZE] ;
           char    key[SHA_DIGESTSIZE] ;
           char    buf[SHA_BLOCKSIZE] ;
           int     i ;

           if (lk > SHA_BLOCKSIZE) {

                   SHA_CTX         tctx ;

                   SHAInit(&tctx) ;
                   SHAUpdate(&tctx, k, lk) ;
                   SHAFinal(key, &tctx) ;

                   k = key ;
                   lk = SHA_DIGESTSIZE ;
           }

           /**** Inner Digest ****/

           SHAInit(&ictx) ;

           /* Pad the key for inner digest */
           for (i = 0 ; i < lk ; ++i) buf[i] = k[i] ^ 0x36 ;
           for (i = lk ; i < SHA_BLOCKSIZE ; ++i) buf[i] = 0x36 ;

           SHAUpdate(&ictx, buf, SHA_BLOCKSIZE) ;
           SHAUpdate(&ictx, d, ld) ;

           SHAFinal(isha, &ictx) ;

           /**** Outter Digest ****/

           SHAInit(&octx) ;

           /* Pad the key for outter digest */



Cheng & Glenn                Informational                      [Page 8]

RFC 2202         Test Cases for HMAC-MD5 and HMAC-SHA-1   September 1997


           for (i = 0 ; i < lk ; ++i) buf[i] = k[i] ^ 0x5C ;
           for (i = lk ; i < SHA_BLOCKSIZE ; ++i) buf[i] = 0x5C ;

           SHAUpdate(&octx, buf, SHA_BLOCKSIZE) ;
           SHAUpdate(&octx, isha, SHA_DIGESTSIZE) ;

           SHAFinal(osha, &octx) ;

           /* truncate and print the results */
           t = t > SHA_DIGESTSIZE ? SHA_DIGESTSIZE : t ;
           truncate(osha, out, t) ;
           pr_sha(stdout, out, t) ;

   }





































Cheng & Glenn                Informational                      [Page 9]

    kêÚK f§ ¤�          !  à}·:Â%:ÓÎž:!         þm  !      ./usr/local/lib/MD5-2.12/t/md5.t 2.t riv             ó/      ¤�          ######################### We start with some black magic to print on failure.

# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)

BEGIN {print "1..14\n";}
END {print "not ok 1\n" unless $loaded;}
use MD5;
$loaded = 1;
print "ok 1\n";

######################### End of black magic.

# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):

package MD5Test;

# 2: Constructor

print (($md5 = new MD5) ? "ok 2\n" : "not ok 2\n");

# 3: Basic test data as defined in RFC 1321

%data = (
	 ""	=> "d41d8cd98f00b204e9800998ecf8427e",
	 "a"	=> "0cc175b9c0f1b6a831c399e269772661",
	 "abc"	=> "900150983cd24fb0d6963f7d28e17f72",
	 "message digest"
		=> "f96b697d7cb7938d525a2f31aaf161d0",
	 "abcdefghijklmnopqrstuvwxyz"
		=> "c3fcd3d76192e4007dfb496cca67e13b",
	 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
		=> "d174ab98d277d9f5a5611c2c9f419d9f",
	 "12345678901234567890123456789012345678901234567890123456789012345678901234567890"
		=> "57edf4a22be3c955ac49da2e2107b67a",
);

$failed = 0;
foreach (sort(keys(%data)))
{
    $md5->reset;
    $md5->add($_);
    $digest = $md5->digest;
    $hex = unpack("H*", $digest);
    if ($hex ne $data{$_}) {
        print STDERR "\$md5->digest: $_\n";
        print STDERR "expected: $data{$_}\n",
                     "got     : $hex\n";
	$failed++;
    }

    if (Digest::MD5::md5($_) ne $digest) {
	print STDERR "md5($_) failed\n";
	$failed++;
    }

    if (Digest::MD5::md5_hex($_) ne $hex) {
	print STDERR "md5_hex($_) failed\n";
	$failed++;
    }

    # same stuff ending with $md5->hexdigest instead
    $md5->reset;
    $md5->add($_);
    $hex = $md5->hexdigest;
    if ($hex ne $data{$_}) {
        print STDERR "\$md5->hexdigest: $_\n";
        print STDERR "expected: $data{$_}\n",
                     "got     : $hex\n";
	$failed++;
    }
}
print ($failed ? "not ok 3\n" : "ok 3\n");

# 4: Various flavours of file-handle to addfile

open(F, "<$0");

$md5->reset;

$md5->addfile(F);
$hex = $md5->hexdigest;
print ($hex ne '' ? "ok 4\n" : "not ok 4\n");

$orig = $hex;

# 5: Fully qualified with ' operator

seek(F, 0, 0);
$md5->reset;
$md5->addfile(MD5Test'F);
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 5\n" : "not ok 5\n");

# 6: Fully qualified with :: operator

seek(F, 0, 0);
$md5->reset;
$md5->addfile(MD5Test::F);
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 6\n" : "not ok 6\n");

# 7: Type glob

seek(F, 0, 0);
$md5->reset;
$md5->addfile(*F);
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 7\n" : "not ok 7\n");

# 8: Type glob reference (the prefered mechanism)

seek(F, 0, 0);
$md5->reset;
$md5->addfile(\*F);
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 8\n" : "not ok 8\n");

# 9: File-handle passed by name (really the same as 6)

seek(F, 0, 0);
$md5->reset;
$md5->addfile("MD5Test::F");
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 9\n" : "not ok 9\n");

# 10: Other ways of reading the data -- line at a time

seek(F, 0, 0);
$md5->reset;
while (<F>)
{
    $md5->add($_);
}
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 10\n" : "not ok 10\n");

# 11: Input lines as a list to add()

seek(F, 0, 0);
$md5->reset;
$md5->add(<F>);
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 11\n" : "not ok 11\n");

# 12: Random chunks up to 128 bytes

seek(F, 0, 0);
$md5->reset;
while (read(F, $hexata, (rand % 128) + 1))
{
    $md5->add($hexata);
}
$hex = $md5->hexdigest;
print ($hex eq $orig ? "ok 12\n" : "not ok 12\n");

# 13: All the data at once

seek(F, 0, 0);
$md5->reset;
undef $/;
$data = <F>;
$hex = $md5->hexhash($data);
print ($hex eq $orig ? "ok 13\n" : "not ok 13\n");

close(F);

# 14: Using static member function

$hex = MD5->hexhash($data);
print ($hex eq $orig ? "ok 14\n" : "not ok 14\n");
ncated kê˜6 g§ ¤�          k  à}·:Â%:ÓÎž:!          n  k      ./usr/local/lib/MD5-2.12/t/files.t t riv             ó/      ¤�          print "1..5\n";

use strict;
use Digest::MD5 qw(md5 md5_hex md5_base64);

#
# This is the output of: 'md5sum Changes README MD5.pm MD5.xs rfc1321.txt'
#
my $EXPECT = <<EOT;
c0a2755385f3110ace3789bf5fc1ebbc  Changes
7d7b8d686e102992616e2d53273d58ba  README
4da4267218c6c31a66ee09f3e58d79e7  MD5.pm
61debd0ec12e131e1ba220e2f3ad2d26  MD5.xs
754b9db19f79dbc4992f7166eb0f37ce  rfc1321.txt
EOT

if (!(-f "README") && -f "../README") {
   chdir("..") or die "Can't chdir: $!";
}

my $testno = 0;

my $B64 = 1;
eval { require MIME::Base64; };
if ($@) {
    print $@;
    print "Will not test base64 methods\n";
    $B64 = 0;
}

for (split /^/, $EXPECT) {
     my($md5hex, $file) = split ' ';
     my $md5bin = pack("H*", $md5hex);
     my $md5b64;
     if ($B64) {
	 $md5b64 = MIME::Base64::encode($md5bin, "");
	 chop($md5b64); chop($md5b64);   # remove padding
     }
     my $failed;

     if (digest_file($file, 'digest') ne $md5bin) {
	 print "$file: Bad digest\n";
	 $failed++;
     }

     if (digest_file($file, 'hexdigest') ne $md5hex) {
	 print "$file: Bad hexdigest\n";
	 $failed++;
     }

     if ($B64 && digest_file($file, 'b64digest') ne $md5b64) {
	 print "$file: Bad b64digest\n";
	 $failed++;
     }

     my $data = cat_file($file);
     if (md5($data) ne $md5bin) {
	 print "$file: md5() failed\n";
	 $failed++;
     }
     if (md5_hex($data) ne $md5hex) {
	 print "$file: md5_hex() failed\n";
	 $failed++;
     }
     if ($B64 && md5_base64($data) ne $md5b64) {
	 print "$file: md5_base64() failed\n";
	 $failed++;
     }

     if (Digest::MD5->new->add($data)->digest ne $md5bin) {
	 print "$file: MD5->new->add(...)->digest failed\n";
	 $failed++;
     }
     if (Digest::MD5->new->add($data)->hexdigest ne $md5hex) {
	 print "$file: MD5->new->add(...)->hexdigest failed\n";
	 $failed++;
     }
     if ($B64 && Digest::MD5->new->add($data)->b64digest ne $md5b64) {
	 print "$file: MD5->new->add(...)->b64digest failed\n";
	 $failed++;
     }

     my @data = split //, $data;
     if (md5(@data) ne $md5bin) {
	 print "$file: md5(\@data) failed\n";
	 $failed++;
     }
     if (Digest::MD5->new->add(@data)->digest ne $md5bin) {
	 print "$file: MD5->new->add(\@data)->digest failed\n";
	 $failed++;
     }
     my $md5 = Digest::MD5->new;
     for (@data) {
	 $md5->add($_);
     }
     if ($md5->digest ne $md5bin) {
	 print "$file: $md5->add()-loop failed\n";
	 $failed++;
     }

     print "not " if $failed;
     print "ok ", ++$testno, "\n";
}


sub digest_file
{
    my($file, $method) = @_;
    $method ||= "digest";
    #print "$file $method\n";

    open(FILE, $file) or die "Can't open $file: $!";
    binmode(FILE);
    my $digest = Digest::MD5->new->addfile(*FILE)->$method();
    close(FILE);

    $digest;
}

sub cat_file
{
    my($file) = @_;
    local $/;  # slurp
    open(FILE, $file) or die "Can't open $file: $!";
    binmode(FILE);
    my $tmp = <FILE>;
    close(FILE);
    $tmp;
}

->addkêŽÎ h§ ¤�          ¥§  á}·:Â%:ÓÎž:!        ^n  ¥§      ./usr/local/lib/MD5-2.12/t/md5-aaa.t riv             ó/      ¤�          use strict;
print "1..256\n";

use Digest::MD5 qw(md5_hex);

my $testno = 0;
while (<DATA>) {
   my($hexdigest, $message) = split;
   $message =~ s/\"//g;

   my $failed;
   $failed++ unless md5_hex($message) eq $hexdigest;
   $failed++ unless Digest::MD5->new->add(split(//, $message))->digest
                                              eq pack("H*", $hexdigest);

   print "not " if $failed;
   print "ok ", ++$testno, "\n";
}



# This data was generated with:
#
# perl -e 'for (1..256) { system("md5sum --string=" . ("a" x $_)); }'
#
__END__
0cc175b9c0f1b6a831c399e269772661  "a"
4124bc0a9335c27f086f24ba207a4912  "aa"
47bce5c74f589f4867dbd57e9ca9f808  "aaa"
74b87337454200d4d33f80c4663dc5e5  "aaaa"
594f803b380a41396ed63dca39503542  "aaaaa"
0b4e7a0e5fe84ad35fb5f95b9ceeac79  "aaaaaa"
5d793fc5b00a2348c3fb9ab59e5ca98a  "aaaaaaa"
3dbe00a167653a1aaee01d93e77e730e  "aaaaaaaa"
552e6a97297c53e592208cf97fbb3b60  "aaaaaaaaa"
e09c80c42fda55f9d992e59ca6b3307d  "aaaaaaaaaa"
d57f21e6a273781dbf8b7657940f3b03  "aaaaaaaaaaa"
45e4812014d83dde5666ebdf5a8ed1ed  "aaaaaaaaaaaa"
c162de19c4c3731ca3428769d0cd593d  "aaaaaaaaaaaaa"
451599a5f9afa91a0f2097040a796f3d  "aaaaaaaaaaaaaa"
12f9cf6998d52dbe773b06f848bb3608  "aaaaaaaaaaaaaaa"
23ca472302f49b3ea5592b146a312da0  "aaaaaaaaaaaaaaaa"
88e42e96cc71151b6e1938a1699b0a27  "aaaaaaaaaaaaaaaaa"
2c60c24e7087e18e45055a33f9a5be91  "aaaaaaaaaaaaaaaaaa"
639d76897485360b3147e66e0a8a3d6c  "aaaaaaaaaaaaaaaaaaa"
22d42eb002cefa81e9ad604ea57bc01d  "aaaaaaaaaaaaaaaaaaaa"
bd049f221af82804c5a2826809337c9b  "aaaaaaaaaaaaaaaaaaaaa"
ff49cfac3968dbce26ebe7d4823e58bd  "aaaaaaaaaaaaaaaaaaaaaa"
d95dbfee231e34cccb8c04444412ed7d  "aaaaaaaaaaaaaaaaaaaaaaa"
40edae4bad0e5bf6d6c2dc5615a86afb  "aaaaaaaaaaaaaaaaaaaaaaaa"
a5a8bfa3962f49330227955e24a2e67c  "aaaaaaaaaaaaaaaaaaaaaaaaa"
ae791f19bdf77357ff10bb6b0e97e121  "aaaaaaaaaaaaaaaaaaaaaaaaaa"
aaab9c59a88bf0bdfcb170546c5459d6  "aaaaaaaaaaaaaaaaaaaaaaaaaaa"
b0f0545856af1a340acdedce23c54b97  "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
f7ce3d7d44f3342107d884bfa90c966a  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
59e794d45697b360e18ba972bada0123  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3b0845db57c200be6052466f87b2198a  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5eca9bd3eb07c006cd43ae48dfde7fd3  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b4f13cb081e412f44e99742cb128a1a5  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4c660346451b8cf91ef50f4634458d41  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
11db24dc3f6c2145701db08625dd6d76  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
80dad3aad8584778352c68ab06250327  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1227fe415e79db47285cb2689c93963f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8e084f489f1bdf08c39f98ff6447ce6d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
08b2f2b0864bac1ba1585043362cbec9  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4697843037d962f62a5a429e611e0f5f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
10c4da18575c092b486f8ab96c01c02f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
af205d729450b663f48b11d839a1c8df  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0d3f91798fac6ee279ec2485b25f1124  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4c3c7c067634daec9716a80ea886d123  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
d1e358e6e3b707282cdd06e919f7e08c  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8c6ded4f0af86e0a7e301f8a716c4363  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4c2d8bcb02d982d7cb77f649c0a2dea8  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
bdb662f765cd310f2a547cab1cfecef6  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
08ff5f7301d30200ab89169f6afdb7af  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
6eb6a030bcce166534b95bc2ab45d9cf  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1bb77918e5695c944be02c16ae29b25e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b6fe77c19f0f0f4946c761d62585bfea  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e9e7e260dce84ffa6e0e7eb5fd9d37fc  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
eced9e0b81ef2bba605cbc5e2e76a1d0  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
ef1772b6dff9a122358552954ad0df65  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3b0c8ac703f828b04c6c197006d17218  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
652b906d60af96844ebd21b674f35e93  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
dc2f2f2462a0d72358b2f99389458606  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
762fc2665994b217c52c3c2eb7d9f406  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
cc7ed669cf88f201c3297c6a91e1d18d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
cced11f7bbbffea2f718903216643648  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
24612f0ce2c9d2cf2b022ef1e027a54f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b06521f39153d618550606be297466d5  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
014842d480b571495a4a0363793f7367  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
c743a45e0d2e6a95cb859adae0248435  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
def5d97e01e1219fb2fc8da6c4d6ba2f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
92cb737f8687ccb93022fdb411a77cca  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
a0d1395c7fb36247bfe2d49376d9d133  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
ab75504250558b788f99d1ebd219abf2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0f5c6c4e740bfcc08c3c26ccb2673d46  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
cddd19bec7f310d8c87149ef47a1828f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
96b39b8b95e016c79d104d83395b8133  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
f1fc0b14ff8fa674b02344577e23eeb1  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0e8d28a1cafa3ffcff22afd480cce7d8  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
448539ffc17e1e81005b65581855cef4  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
61e39aae7c53e6e77db2e4405d9fb157  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
618a426895ee6133a372bebd1129b63e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
046c90690c9e36578b9d4a7e1d249c75  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
aadab38075c43296ee7e12466ebb03e3  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b15af9cdabbaea0516866a33d8fd0f98  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
986e6938ed767a8ae9530eef54bfe5f1  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7ae25a72b71a42ccbc5477fd989cd512  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
98d34e50d4aa7a893cc7919a91acb0e3  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3fc53fc22ea40f1a0afd78fc2cd9aa0f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
923e37c738b9d7b1526f70b65229cc3d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b3966b7a08e5d46fd0774b797ba78dc2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
f50c7286b540bb181db1d6e05a51a296  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4efd6c8826e65a61f82af954d431b59b  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
ef1031e79e7a15a4470a5e98b23781b5  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
067876bfd0df0f4c5002780ec85e6f8c  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
789851dfa4c03563e9cef5f7bc050a7e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
baf934720818ee49477e74fc644faa5e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9a0ea77ca26d2c121ddcc179edb76308  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
20c825561572e33d026f99ddfd999538  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
464c461455c5a927079a13609c20b637  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
cf37d42f89b6adb0e1a9e99104501b82  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
d266af45e3d06b70d9f52e2df4344186  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
f8b59fa22eb0ba944e2b7aa24d67b681  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0918d7c2f9062743450a86eae9dde1a3  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
36a92cc94a9e0fa21f625f8bfb007adf  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
681d73898dad5685d48b5e8438bc3a66  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
337ccef058459c3c16411381778da0c4  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
6ccdfcc742862036ce07583633c5f77e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
ddfa1adc974649dc5b414be86def7457  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
650ebc28ad85f11aa4b63b6ee565b89d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e4571793bcaba284017eeabd8df85697  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4fc040d354ad9ba5e4f62862109d3e17  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
25814274e02aa7cc03d6314eb703e655  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
11378ecaee0089c840d26352704027e3  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
86f950bfcd824d5546da01c40576db31  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
089f243d1e831c5879aa375ee364a06e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9146ef3527c7cfcc66dc615c3986e391  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
d727cfdfc9ed0347e6917a68b982f7bc  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
da8f45e1fdc12deecfe56aeb5288796e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
29cfcf52d8250a253a535cf7989c7bd2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0f6eb555b8e3c35411eebe9348594193  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
a922439f963e7e59040e4756992c6f1b  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
81f8453cf3f7e5ee5479c777e5a8d80c  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8a7bd0732ed6a28ce75f6dabc90e1613  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5f61c0ccad4cac44c75ff505e1f1e537  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
f6acfca2d47c87f2b14ca038234d3614  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
269fc62c517f3d55c368152addca57e7  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
50587cb16413da779b35508018721647  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5e4a3ecfdaa4636b84a39b6a7be7c047  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
c5339dc2af6bf595580281ffb07353f6  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e51176a47347e167ed0ed766b6de1a0c  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
020406e1d05cdc2aa287641f7ae2cc39  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e510683b3f5ffe4093d021808bc6ff70  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b325dc1c6f5e7a2b7cf465b9feab7948  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e016e4ccc7fdaea56fc377600b58c4cb  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3870ec709d2fc64b255d65be3123ad69  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
a92bde1f862c3fe797ecd69510bbd266  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
04daa146f3a2256fdcbf015c0f67e168  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3d13c8bf627421ccc937aa1c9ac87bf1  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
247dc7ffc545e4dda64ae12def481c4e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2dfd4def392ee9563241b7db7eb7c346  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
d11a18a4743a1a0a699d1704efb74a0d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
55b62fabd9c77d44d86e992eeeb093e6  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9a72cf7d0bd5ae2907c79f91837e3ced  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
d3828cce1835534475029202ebd799e4  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b0bebbf0015658d4740679f263a3f01f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
02368ebf1f53bc4634211b1693021666  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
04960f7d18960e348372949e4baa9752  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
c6041e7a86d407e9402b175670519260  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
439fd4c056bec1d14acd393746f6ae59  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
81a855120e04494c5a6c874a2360fd57  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
ef57bd47a964dc3aadd959c4131e64ac  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0b0ab27b16cbba267c141fe0f4ee9189  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
abccd84f340bfe4ba59095cc3d5ca6ad  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
bc620e8c15265f195c8818e2f3e3c58b  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
fdcd84c4143286f6fc70c69208acd18d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
50e05071e773b1e9f3009a4a559ce6b2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9e69c7a6c1863fbba2532f09ba665bde  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
47a962111aa5187eeef3d17a278d95f2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
c13e57e33526bc713b5a1825f92651bc  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
72b392f15593e42404b38e5c889fa75e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5327acd3278274265d44e22ccfc4042c  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
930dcac6da160b2a4c51879da76d3417  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
41292c326f926f1534ead47fe302f0a0  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2bdecb5cf6b69a00f7832299ef2fb5a5  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8bf93e9e8a3e4396de3f211c788e177e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
eea9cb566e19d6a7f55fbae78d94ef2a  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3b8452700a829dec78397aa5c0458dd3  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7950059f699eaea1e0a1759340d7c153  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
40840c5f1de00f17a8e70d5bd4d00af2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
80f86f6af38be9ca8e40c2dc44491a0a  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7aab2c2e72c77163e7102412dc332125  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
bfd6869ae2ee2fe2675846d341eaa67d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7e4d976f6d552d1d5bac7e2693dc8759  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
37d9884c32abfc6f372ee899434e64ad  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e362cd83a4b49d81ac6788b7839a56fd  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9203cbb93b25d80b9d1b75e3c6c4b0dc  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
77441eda11554ec5b915d942605f66ed  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e0fe0c02b5c9c5afe10ab9d6a3769efe  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
cc7682cf11b214e928f3df899772e789  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
ade0901d347afb25ecf9df4955bb8061  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
987379587cbe8e94b7057269232ff826  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
fd44a60101b04b7ddbc2b4e9b509ca1f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
53107a7f1e6f13a2e63239b6f2bf0ef1  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0b82cdd562f26aaa2459610a7ba8cd76  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
79f12de7255e9c8c0ec9a9be45ee6210  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
92338d8de02ed7aa8b3adc9120b94e71  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8fc48efda580fce85b8705d540e8382e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
63642b027ee89938c922722650f2eb9b  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
fe54daa473502e9cc2c26dd66d564eab  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b90f3d4b7dcd8cdd8d96cb14695f4793  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3e73392e7a03bca45b67650d79a8fc63  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7fe51f2642dffbabc33eea2fcc2039ba  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
bc33790e52f99718cf920329961ee753  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
54d1e41ebac5db7886f01ab0afb65b17  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
16e2824f7a3f00ef0028994182071953  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
234c07907df5019d5f40f03936939bce  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8ea3af1d9476fa0b6c04ce4f3a336c03  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e95b69eae07d498d484afc771d1c45fc  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
f22a673abbc4372544ba37b51a5f5a91  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7e6161eb1be7b06928c536fada91b7f1  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4dfe3c301e88fff67822e1cfcfece43f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
edda210ac6645fbf5815eb4c58821f6d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
6a514de2bf1926129b08f9234cd0115e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
887f30b43b2867f4a9accceee7d16e6c  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
15936442c22dab9b685de350bfe75971  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
281a39e10bab29f1f2dead149a1f3f87  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
04d5f8a53b0eeda82d3c0ccafd02c98e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
a91e6b80fe9d6db74fac76c7a67f065a  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
30334486fa9841044afb07f2573107a5  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0183c0cf15a3c2ed97d326f421b6d62c  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4dc2a01b2161653753019b5228f765f8  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
71ef2dbdec7f78005354abebbfec8d8f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
a1d1cd1446c113726ba50cc86d8b6519  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
ed6da79cfd13ece051c4cb7c88e80c2e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
d2047852ce178d4ddb7978da3883f9c5  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
d75382e07dd096b618faeeac033eefff  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
3fb48e286d462dcc237c3335aa63ba14  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
55b959972677ea06c4d0e32f7fb2f10a  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0a479c3623cfb9745e54d3376d0b9ae2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7825ad1ba19db7eec57d88b16936f32f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
833ccf25509cb423a4aa98accb15512d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
cae9609b05a9782610a5a43d7cd4b8ff  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
6c303e1da7f8a3032d13fe995847a722  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
4c47143a568e30ecde86dafe3bcb0558  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
9c48f0592f504b86360cfb6de00203b3  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e1524f5686f170209366f9723880d9b0  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
a96164a43a192543d40e538b9e9e4ece  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b774a4f788458a60e131d998705e4a06  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1e97f0a7dfd3fac6ae585acdcf51a549  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b6364c77b6dd495c2a7f6b0211ac6fce  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5d22315e78df2bc4146aa66f6c405dbb  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2a773d5b04e910612543a42deeaaaa62  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0165449ac66b086accdec3051e0b691e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
54884ba571054eae72b2a5271828a1fc  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
520fb61f8625ea916d72a54a37937bc6  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
7717f05d6e424a2c7a20ab7977b21ec8  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b64e4f62e3e14317e3a90f9ff2cde576  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
a49128259cfe50ba3bed80bbd11add7f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b10cb153b79c2e4af6a8431c265aa82d  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
2e50fee6f574241042bdfabfdd46a153  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5d5656a09b98c24edd01c530d3aad5e2  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
5ac1e1609d82274371c349d5b7875298  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
b7b40d64ffccebd78abcf522376b3aae  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8619933469d908a2d4a2d890909bea43  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
591a0ee6dccd872b46ae184eb0f9450e  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
8cd256a02c8c5c1676e9220e655d9ac4  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
e48c0e2ed3e4e299a6e62e5416eb6d83  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
f30f75dce71e757ee562218c1efa0645  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
06bd7e90c0410dacb155732cf956f520  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
531a0a821a9304c215f1829b880306f1  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
93f4621c0b88499297ec3f8fbb3fb9c4  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
6af3d61e2e3ef8e189cffbea802c7e69  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
df84d21c884f99d6764d9bca4dec26e1  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
1bdbdf1c9087c796394bcda5789f7206  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
21f5b107cda33036590a19419afd7fb6  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
0eae304c738191613302fb6721ea3605  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
abed9cdef66dcec954b87124ba18c1ab  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
dfde09457e2017e31d4ecfaea010db8f  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
46bc249a5a8fc5d622cf12c42c463ae0  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
81109eec5aa1a284fb5327b10e9c16b9  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
aaakê4- •¤ m�          %A  á}·:±%:ÔÎž:!      #  @k  %A      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.so               ó/      m�          ß :%±  .h   Ü H0   ¨  ¼    ÿÿÿÿ          X         RE                      .text             ¨  @  (È     g      .data             ¼  è  ,Î     )     @.bss      ¼  ¼                       €.loader           $  #¤                                                                                   �‚  �A €  €L |	¦N€                                       �b �‹ 8  qŒ A‚ ´|¦| +|à"*A‚ H|…8@@@@† |Aš L˜  H  p|£+|ä*A‚ $0  |…8@@@|£+@† P@š D|ä*@‚ÿä|¦,     T øA� |¥0|ç0|…8@H  |…8@|Æ0}0@@@† L˜  A† A… 8`ÿÿN€  8` N€  8`  N€  8cÿÿ8„ÿÿˆ£ ˆÄ ,  |…0@A‚ Œ£ @† ŒÄ ,  |…0@KÿÿèA† A… 8`ÿÿN€  8`  N€  8` N€        @       strcmp                |fx|ƒ#x|Ä3x`   `   `   `   `   �b T Ù�‹ @�qŒ @¢|ƒ @M†  A„ |*|€@A… Œpi A‚ <8„ÿÿ8Ãÿÿ!) })¦Œä œæ B ÿø|©(8„ÿý8Æÿýp¨ T¥èþ|©¦H  p¨ T¥èþ|©¦8„ÿü8Ãÿü„ä …$ ”æ •& B ÿðM‚  }	¦8„ 8Æ Œä œæ B ÿøN€  |Ã*|ä*pÈ A‚ }	¦�'ÿÿ�&ÿÿB ÿø|¨(p¨ T¥èþ|©¦…'ÿü…Gÿü•&ÿü•FÿüB ÿðM‚  }	¦�'ÿÿ�&ÿÿB ÿøN€  |¡¦| $*| *N€  |„@@„ }D(|ƒP@|	¦8   |¦T ÿ�a |dA„ (| $*|£%*0„  B ÿô|¦| $*|£%*€a N€  |„(0„ÿà| $*|£%*B ÿô|€ |¦| $*|£%*€a N€        @      À bcopy €b |¦¿ÿà€ƒ  � ƒâ ƒÂ €  8„ÿü�ƒ  €Þ  T :€¿  |p|c””!ÿ�|| 0ƒ¢ |pZ”8 T:|eÈ.;€  8� @;`  € €Ã  t  A‚ 0€ � @|eÈ.€c  ƒ  ,š c  8} l€  A„ 4H  $H É€A `x  ,š c  8} l€  A„ |`ÊƒC H  `;} tce  H ½€A 8€  H Ù€A |zyc  A‚ € t ,€  @† (8} €;} ˆce  H �€A 8€  H �€A `z  ,  A‚ œ€ €º  cC  8� @tt  ,†  A† <A‚ € � @€z  €ƒ  H  H €A `d  8} �Kÿûi`   ,ƒ  A† D,  8½ À8}”c  cJ  8Ý ˜c  9 ¤@‚ 8ý  8Ý œ9 ¨;} ¬ci  H !€A €‚ (8} È8½ dH 5€A €‚ 08} Ü8½ dH !€A €‚ 48} ô8½ dH €A €‚ 88}8½ dH ù€A 8} 8½ d€‚ <H å€A €£  ;` 8}8€‚ <“e 08½ dH Å€A €£  ;@ 8}P€‚ <“E 08½ dH ¥€A €ƒ  8}d8½ d“„ 0€‚ @H ‰€A €Ã  8}|€‚ @8½ d“f 0H m€A €Ã  €‚ @8}”8½ d“F 0H Q€A €c  € D“ƒ 0€  |É.€  | Ê�  �� x8! p»ÿà}ˆ¦N€         €    ü€‚ |¦¿Aÿè€¤  ƒÂ � ”!þðƒâ €å  €Þ  8¥ÿü€  �¤  Tå:€ƒ  | *| 0|¥p|¥”|p}•8a X;¥ ƒ„ 0H µU:W»:8ÿü8� @[€ß  @� p|fØ.€ €£  t  A‚ €¥ �¡ @|fØ.€c  €ƒ  H  H ¹€A `d  €¡ @8a XH 	Å€ß  |Ð ;{ 8� @@€ |fØ.€ €£  t  Kÿÿ¨8� X8a DH ]8a Dc„  H é��€Ÿ  W¥:8!}ˆ¦|d).€  | *�  »AÿèN€         €    0|¦€¢ ¿�ÿð€å  ƒâ €Â � ƒÂ �  €Ÿ  8çÿü�å  €  €£  8f PU:”!ÿ�|Ä:| | p| ”|æp|Æ”;¦ ,  ƒ… 0A‚ €… 4€„  €„ $H %€A €Ÿ  W½:|dè.H õ�a T``  8a @`  H q€a TH -8a @c„  H õ€Ÿ  |dé.€  | ê�  �� x8! p»�ÿð}ˆ¦N€         €     à|¦€¢ ¿�ÿð€Å  ƒâ €b � ƒÂ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ï |¤2| | p| ”|Åp|¥”8cl,€ ;¥ A† H I€A €Ÿ  W¼:|dâ€c ¤à.H }€A €ƒ  c£  ƒ¤  H ý,�  € �aD8a @p  ?8€    @A† |c¦  A‚  Kÿö­€A |ey€aD8� @A‚ \H }8a @8€ c¦  8  Kÿö�€A |ey€aD8� @A‚ 0H Q8a @8€ 8  c¦  KÿöU€A |ey€aD8� @@‚ÿØ€  | â�  ��h8!`»�ÿð}ˆ¦N€         €    P|¦€¢ ¿aÿì€Å  }€ &ƒâ €b ƒÂ €æ  8Æÿü� €Ÿ  �Å  €  Tå:|Ä*|¥p|¥”| |pœ•‘� . ”!ÿ ;¥ 8cHA� H á€A €Ÿ  W½:|dè.H ±€ß  �a H@‘ „;} W…:|fØ.8¥ÿü�*8� @€ €£  t  A‚ €¥ �¡ @|fØ.€c  €ƒ  H  H €A `d  €¡ @€a HH €ß  |à ;{ 8� @@€ |fØ.€ €£  t  Kÿÿ¨€  | ê�  �� d€ h8! `|¦}€� »aÿìN€         €    8|¦€¢ ¿¡ÿô€Å  ƒâ €b � ƒ¢ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ÿ°|¤2| | p| ”|Åp|¥”8c ,  ;Å A‚ H ¡€A €Ÿ  WÞ:|dð.H qH €A €  |`ò8ÿü�  �� X8! P»¡ÿô}ˆ¦N€         €     ¨|¦€‚ ¿aÿì€Ä  ƒâ €b � ƒb €æ  8Æÿü€¿  �Ä  €  Tæ:”!ÿ |…2| | p| ”|Äp|„”8c 0,  ;Ä A‚ H é€A €¿  8� @WÞ:|eð.€ €£  T ‡>|  Aœ Œ@� € � @€c  ƒ£  H  H -€A `}  8` œH 5€A `|  <`ì8Î]�  H E€A €ß  c¤  c…  |fñ.€  |cð.H M€A €  |cð.€c  €c  € d  €� H  H `|  cƒ  H a€  | ò�  �� h8! `»aÿì}ˆ¦N€         €    H|¦,  ¿Áÿø� ,„ / ”!ÿ�A‚ 0€¢ A† 4Aš D8e H Å€A cã  cÄ  H Í€A H  D;À `  H  (8� @H `  ;À  H  8� @H  I`  ;À cã  cÄ  H ‰€A H ©€A �� x8! p»Áÿø}ˆ¦N€         €     ¨8Ã 8 €¢ | @`†  €¥¨ˆã  9 a	  9 Têð¾Të¾}EP®™F  A‚ P‰ ˆã 8c 9# U
ç>|	 @Qj 6U>}EP®Té×¾Q	:Tç¾™F }H®™ |å8®˜æ 8Æ Kÿÿ”8   Tã&¶|¥®`ƒ  ˜©  ˜  N€                 ¤8 | @`…  €Â 8  8cÿÿ€æ¬@€ 0|	¦ˆ Tá>|0®˜  Œ T>|0®˜ 8¥ B ÿÜ8   `ƒ  ˜  N€                 \|¦”!ÿÀ€‚ � H€ €c  t  A‚ <€c  < ì8Î]€£ €c  T¥‡>|  @Ÿ €c ,  A‚ €£  | @A‚ $8d´H Á€A 8`  �� H8! @}ˆ¦N€  8! @N€         €      €|¦¿�ÿð� `Ÿ  € €‚ ”!ÿ°`~  T¾8  x( 8|ê8c 8„Ä@€ 8  8� c…  Kÿñ¥`   € € |�â|¿"T~T8Pg8T^>PÈÀTf^>PæÀPZPÜ.PfZ8 PfÜ.‘ |8 �Ã 8Ÿ TÑ¾cã  H u€ TF>PÀPBPÄ.�~  € TF>PÀPBPÄ.�~ € TF>PÀPBPÄ.�~ € TF>PÀPBPÄ.�~ �� X8! P»�ÿð}ˆ¦N€         €    $¿�ÿð`  |¦€ `¾  `�  � |ƒòp` ?|„ð@#€ @�Ÿ |à@”!ÿ°8c c¤  @„ €¿ 8¥ �¿ c…  |ßA‚ <@˜ cÅ  8f KÿðM`   H  TKÿðA`   8Ÿ cã  8  H  a¼êÜðWÅÑ¿cã  c¤  @‚ IMï{‚sÅ ?WÀ 2|�8 A‚ Kÿïù`   �� X8! P»�ÿð}ˆ¦N€         €     Ü½áÿ¼”!ÿ0|©¦€ €Ã €ã � 8¡ @|éBx�„  |ÉH8|Ê:x}	JxU‹F>Q‹ÀQ‹BQ‹Ä.}+J‘e  =)×k�d 9)¤x})U,8>UiF>QiÀÌ2ÊP8QiBQiÄ.|ëRx‘% �D })ZË2x=)èÈULF>9)·V})BU)`>QLÀQLB}>J}+X8QLÄ.‘… |ËZx}lZ�„ =k$ ÊJx9kpÛ}k:Uˆ>U‹F>Q‹À¿JQ‹BªP8Q‹Ä.ÌRx‘e }kb=kÁ¾�D 9kÎî}k2Uk°>ULF>QLÀ¼JxQLBëêQLÄ.êà8‘… ƒ„ }+Rxêêx}lZWŒF>SŒÀ=kõ|9k¯}kòUk8>SŒBSŒÄ.‹úŠP8‘… «Rx�D }lZŒúx=kGˆ9kÆ*}+JU+`>UIF>QIÀÜZQIBË`8QIÄ.êZx‘% })R=)¨0�d 9)F})êU)ˆ>UjF>QjÀŒòxQjB})òQjÄ.}+`8‘E ƒ¤  ‹Zx},òx}JZW«F>S«À=JýG9J•}JúUJ°>S«BS«Ä.}JJ}L`8‘e  Ìbxƒä $}kb}]Jx=ki�WìF>9k˜Ø}kâUk8>SìÀSìB}kRSìÄ.}è8‘… $ƒ„ (}?úx}}RxìúWŒF>SŒÀ?ÿ‹E;ÿ÷¯ÿòWþ`>SŒBSŒÄ.ËòÝè8‘… (}]êxƒä ,}Œê}{òx=ŒÿÿWüF>9Œ[±},JU)ˆ>SüÀSüB})òSüÄ.}?Ø8“… ,�„ 0}úx}=òxüúUœF>QœÀ?ÿ‰];ÿ×¾}_RUJ°>QœBQœÄ.}ŠJ}Ÿè8“… 0ƒ¤ 4ßúxüú}ŠJx?ÿk�;ÿ"}ZUk8>W¿F>S¿À}kb}jP8S¿BS¿Ä.}=Rx“å 4�D 8ÿê}}bx?ÿý˜U\F>;ÿq“ÿòWÿ`>Q\ÀQ\BëúQ\Ä.êè8“… 8ƒ¤ <}žRx}júxÜòW¼F>S¼À?Þ¦y;ÞCŽ}>JU)ˆ>S¼BS¼Ä.©ú©P8“… <}iJx8„ @}\J�! D?ÊI´�A X;Þ!}žbUŒ°>ÌêÌêxì`8¬bx}ŒJ=Œö9Œ%b}kbUk(>kòkòx«X8ËZx}kR=‹ÀA�a l9Œ³@}ŸbUŸH>�� @›úâxßø8úxÿZ?ÿ&^;ÿZQýúWÿp>ââxø8Ÿúxÿb?ÿé·;ÿÇªþúWþ >ƒá T>ÂƒÁ h=Âx�è8êx½ú?½Ö/;½]»êW½(>ƒa d~ÝÊ~ÝÊxè8=êx½ò?½D;½S¼êW¼H>ƒ¡ |~öâƒ� P~Úºx:Ð8~ÚÒxZê?ZØ¢;Zæ�XÒWZp>~šº~šºx~ÚÐ8~úÒxZâ?ZçÔ;ZûÈYÒWY >ƒA x~¹¢ƒ! L~¸¢x~øÀ8~˜ÂxÚ?!â;ÍæÂW(>~Xª~Xªx~˜À8~¸ÂxÒ?Ã7;ÖÂWH>‚á t~rÂƒ `~Všx~¶°8~V²x~ÖÊ>ÖôÕ:Ö‡~Ô²VÖp>~š~šx~V°8~v²x~ÖÂ>ÖEZ:Öí~Õ²VÖ >}ö‚‚Á H}õ‚x~t¨8‚¡ \~¢x~”º>”©ä:”é~’¢V”(>~Tz~Tzx~ 8}ô¢x~”²>”üð:”£ø~“¢V”H>~2¢~TŠx}ó 8‚� p~Sšx~sª>sgo:sÙ~pšVsp>~Š~Šx~S˜8~3šx~s¢>s�*:sLŠ~ošVs >}ó‚}ó‚x~3šx~š>sÿú:s9B~ršVs >~sz~rzx~’x~X’>R‡r:Rö�~Q’VRX>~S’~q’x}ñŠx~+Š>1m�:1a"~0ŠV1€>~1’~0’x~p‚x~‚>ýå:8~‚V¸>}ðŠ}ðŠx~P‚x~	‚>¤¿:êD~s‚Vs >~z~zx~3šx~|š>sKß:sÏ©~ršVsX>~Pš~’x}óšx~uš>sö»:sK`~qšVs€>~3’~3’x~šx~~š>s¾À:s¼p~ošVs¸>}óŠ}óŠx~Sšx~wš>s(›:s~Æ~pšVs >~z~zx~3šx~lš>sê¡:s'ú~ršVsX>~Pš~’x}óšx~yš>sÔï:s0…~qšVs€>~3’~3’x~šx~jš>sˆ:s~ošVs¸>}óŠ}óŠx~Sšx~{š>sÙÕ:sÐ9~pšVs >~z~zx~3šx~tš>sæÜ:s™å~ršVsX>~Pš~’x}óšx~}š>s¢:s|ø~qšVs€>~3’~3’x~šx~vš>sÄ¬:sVe~ošVs¸>}óŠ}ó“8~3šx}Œš=Œô)9Œ"D}�bUŒ0>~lz~l‹8}ìbx}•b=ŒC+9Œÿ—}’bUŒP>~³b~¬{8~lbx}šb=Œ«”9Œ#§}‘bUŒx>LªL›8~¬bx}Ÿb=Œü”9Œ 9}�bUŒ¨>ìÒì«8Lbx}”b=Œe[9ŒYÃ}“bUŒ0>~Œú~ŒÓ8ìbx}™b=Œ�9ŒÌ’}•bUŒP>4b,û8~Œbx}žb=Œÿð9Œô}}šbUŒx>ÌÊÌ£8,bx})b=)…„9)]Ñ}?JU)¨>}‰ò}‰Ë8ÉJx}8J=)o¨9)~O}4JU)0>ébéó8}‰Jx}=J=)þ-9)æà}9JU)P>¿J©c8éJx}*J=)£9)C}>JU)x>}Iê}Iû8©Jx}7J=)N9)¡},JU)¨>}‰R}‰ë8}IJx}<J=)÷S9)~‚}?JU)0>éb| úéS8}‰Jx}+J=)½;9)ò5}=JU)P>}J}Z}ic8éJx}6J=)*Ø9)Ò»}*JU)x>})Z|çJ}*û8}jRx}[R=Jë‡9JÓ‘}LRUJ¨>}*J|ÆJB õ¬� �Ã ‘ �ã ¹á Œ8! ÐN€          €    
”8   <€gE< ïÎ<à˜»<À28„#8¥«‰8çÜþ8ÆTv�ƒ �£ �ã �Ã � � N€                 @�‚ �A €  €L |	¦N€               �‚ �A €  €L |	¦N€               �‚  �A €  €L |	¦N€               �‚ $�A €  €L |	¦N€               �‚ ,�A €  €L |	¦N€               �‚ H�A €  €L |	¦N€               �‚ L�A €  €L |	¦N€               �‚ P�A €  €L |	¦N€               �‚ T�A €  €L |	¦N€               �‚ X�A €  €L |	¦N€               �‚ \�A €  €L |	¦N€               �‚ `�A €  €L |	¦N€               0123456789abcdef    Bad convertion type (%d)    Usage: Digest::MD5::new(xclass) Usage: %s(context)  MD5.c   %s::%s  XS_VERSION  %s::%s  VERSION 2.12    $           ::      bootstrap parameter 2.12    Digest::MD5::new    Digest::MD5::DESTROY    Digest::MD5::add    Digest::MD5::addfile    Digest::MD5::b64digest  Digest::MD5::hexdigest  Digest::MD5::digest Digest::MD5::md5_base64 Digest::MD5::md5_hex    Digest::MD5::md5      Ü        Not a reference to a Digest::MD5 object ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/    Usage: Digest::MD5::DESTROY(context)    Usage: Digest::MD5::add(self, ...)  Usage: Digest::MD5::addfile(self, fh)   %s object version %s does not match %s%s%s%s %_ €                                                                 X  X      ô  X      <  X      	ô  X      ”  X      ¤  X      d  X                                                      (  4  @  L                                         )   -     Ô  #               @       fread         @
                    @               -      @               =      @               K      @               W      @
               d      @
               p      @
                     @
               Œ      @
               œ      @
               ®      @
               ¼      @
               Î      @
               Ü      @
               ð      @
                    @
                 
          ¨       ¬                                                     (        ,       4        8       @        D       L        P       X       \       `       d       h       l       p       t   
    x       |   	    €       „       ˆ       Œ       �       ”       ˜       œ               ¤       ¨       ¬       °       ´       ¸     /usr/lib:/lib:/usr/local/lib    libc.a shr.o  _system_configuration  PL_markstack_ptr  PL_stack_base  PL_stack_sp  
PL_sv_yes  Perl_croak  
Perl_form  Perl_newSVpv  Perl_newXS  Perl_safefree  Perl_safemalloc  Perl_sv_2io  Perl_sv_2mortal  Perl_sv_2pv  Perl_sv_newmortal  Perl_sv_setref_pv  perl_get_sv  boot_Digest__MD5       &   @   Z    B   (  €   ]   ¢   (  Z   *�  n   ,�  r   .�  ¢   0�      £™  4   ¨™  @   ­™  p   ¨™  |   ­™  È   £™  Ø   Z™      ²™  *   :�  4   ·™  >   >�  H   ·™  R   @�  \   ·™  f   B�  p   ·™  ‚   D�  „   ·™  š   D�  ¤   ·™  º   D�  Ä   ·™  Þ   F�  à   ·™  ò   F�  ü   ·™  
   F�     ·™  &   H�  f   *�  v   .�  ‚   ,�     £™  ª   *�  ¶   ,�  º   0�  Â   .�     ²™  š   *�  ¦   ,�  ª   0�  ²   .�  ø   ²™  	   ¼™  	T   ž™  	€   ž™  	¬   ž™  	ú   *�  

   ,�  
   0�  
   .�  
`   ²™  
Ä   £™  B   *�  N   ,�  R   0�  Z   .�      ²™  ¸   Á™  ú   *�     ,�  
   0�     .�  X   ²™  œ   £™  ¬   Æ™  Ä   Ë™  ä   Ð™  n   0�  |   ²™  Œ   Õ™  Ð   Õ™  Ø   Ú™     0�  Æ   0�  .   0�  €   ²™  Ê   0�  ü   a™  T   a™  `   a™  ¨   a™  Ê   2  ò   4     6  B   8  j   <  ’   J  º   L  â   N  
   P  2   R  Z   T  ‚   V  ¨   ‹   ¬   ‹      m      $      y      $      w       $   (   u   ,   $   4   s   8   $   @   q   D   $   L   o   P   $   X      \       `      d      h      l   ‹   p      t      x   "   |      €   �   „      ˆ   ‘   Œ   “   �   •   ”   —   ˜   ™   œ   
          ¤      ¨      ¬      °       ´      ¸                                    fread                      
                                             +                                9                                E                                O                   
             Z                   
             d                   
             q                   
             |                   
             Š                   
             š                   
             ¦                   
             ¶                   
             Â                   
             Ô                   
             æ                   
      TOC       X   k                fread     X   k                        \   k                        `   k                      +  d   k                      9  h   k               _$STATIC  l   k                      ¶  p   k                      Z  t   k                      æ  x   k                      O  |   k                      ò  €   k                      q  „   k                       ˆ   k                       Œ   k                     /  �   k                     F  ”   k                     \  ˜   k                      E  œ   k                      š      k                      |  ¤   k                      Š  ¨   k                      Â  ¬   k                      Ô  °   k                      d  ´   k                      ¦  ¸   k                         Yÿþùg strcmp.s   \ÿþg .strcmp    @     0      )       moveeq.s   gÿþg .bcopy    €     ×      )       .ovbcopy  €      ]             ._moveeq         ]             .memcpy          ]             .memmove         ]             .file      ›ÿþ gMD5.c                   o               ‰                   X   k  p                   ¶  X      k                   È  d      k                   Ü  ¤      k                   ó  ”      k                     	ô      k                     <      k                   7  ô      k                   K  L   k   k                   [     k   k             .hex_16   ¸   k   k                   f  $   k   k                   s  ´   k   k                   }  è   k   k                   ˆ  Ô   k   k             .MD5Init  x   k   k             _$STATIC       k                    ·              
             ò              
                          
              (            
            /  4            
            F  @            
            \  L            
      glink.s     ÿþg .fread         k   (            .fread            œ            glink.s    ¥ÿþg       –  È   k   (                  –  È      ¡            glink.s    ªÿþg       £  ð   k   (                  £  ð      ¦            glink.s    ¯ÿþg       ®     k   (                  ®        «            glink.s    ´ÿþg       »  @   k   (                  »  @      °            glink.s    ¹ÿþg       Ç  h   k   (                  Ç  h      µ            glink.s    ¾ÿþg       Ó  �   k   (                  Ó  �      º            glink.s    Ãÿþg       à  ¸   k   (                  à  ¸      ¿            glink.s    Èÿþg       ï  à   k   (                  ï  à      Ä            glink.s    Íÿþg             k   (                           É            glink.s    Òÿþg         0   k   (                    0      Î            glink.s    ×ÿþg       &  X   k   (                  &  X      Ó            glink.s ÿÿÿÿÿþg       4  €   k   (                  4  €      Ø              E_system_configuration PL_markstack_ptr PL_stack_base PL_stack_sp PL_sv_yes Perl_croak Perl_form Perl_newSVpv Perl_newXS Perl_safefree Perl_safemalloc Perl_sv_2io Perl_sv_2mortal Perl_sv_2pv Perl_sv_newmortal Perl_sv_setref_pv perl_get_sv XS_Digest__MD5_new XS_Digest__MD5_DESTROY XS_Digest__MD5_add XS_Digest__MD5_addfile XS_Digest__MD5_digest XS_Digest__MD5_md5 Wed Nov 29 14:24:55 2000  IBM C and C++ Compilers Version 3.6.6.3 ---  .boot_Digest__MD5 .XS_Digest__MD5_md5 .XS_Digest__MD5_digest .XS_Digest__MD5_addfile .XS_Digest__MD5_add .XS_Digest__MD5_DESTROY .XS_Digest__MD5_new .make_mortal_sv .base64_16 .get_md5_ctx .MD5Final .MD5Update .MD5Transform .Perl_sv_2pv .Perl_form .perl_get_sv .Perl_croak .Perl_newXS .Perl_sv_2io .Perl_safefree .Perl_safemalloc .Perl_sv_newmortal .Perl_sv_setref_pv .Perl_newSVpv .Perl_sv_2mortal   kê¸ï –¤ $�              á}·:±%:ÔÎž:!                      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.bs               ó/      $�          kê–# —¤ ¤�          P  á}·:	%:ÔÎž:!      #0  #k  P      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/.packlist                    ó/      ¤�          /usr/opt/perl5/lib/site_perl/5.005/aix/Digest.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_MD5.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_SHA1.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD2.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD5.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/Digest/SHA1.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/MD5.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/SHA.pm
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.bs
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.so
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.bs
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5/MD5.so
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.bs
/usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.so
kê) ™¤ m�          KD  á}·:�%:ÔÎž:!      #  Nk  KD      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.so s             ó/      m�          ß :%�  /¾   ò H0   è  ˆ    ÿÿÿÿ                   RE                      .text             è  @  )     m      .data             ˆ  (  -\     =     @.bss      ˆ  ˆ                       €.loader           i  "°                                                                                   �‚  �A €  €L |	¦N€                                       �b �‹ 8  qŒ A‚ ´|¦| +|à"*A‚ H|…8@@@@† |Aš L˜  H  p|£+|ä*A‚ $0  |…8@@@|£+@† P@š D|ä*@‚ÿä|¦,     T øA� |¥0|ç0|…8@H  |…8@|Æ0}0@@@† L˜  A† A… 8`ÿÿN€  8` N€  8`  N€  8cÿÿ8„ÿÿˆ£ ˆÄ ,  |…0@A‚ Œ£ @† ŒÄ ,  |…0@KÿÿèA† A… 8`ÿÿN€  8`  N€  8` N€        @       strcmp                |fx|ƒ#x|Ä3x`   `   `   `   `   �b T Ù�‹ @�qŒ @¢|ƒ @M†  A„ |*|€@A… Œpi A‚ <8„ÿÿ8Ãÿÿ!) })¦Œä œæ B ÿø|©(8„ÿý8Æÿýp¨ T¥èþ|©¦H  p¨ T¥èþ|©¦8„ÿü8Ãÿü„ä …$ ”æ •& B ÿðM‚  }	¦8„ 8Æ Œä œæ B ÿøN€  |Ã*|ä*pÈ A‚ }	¦�'ÿÿ�&ÿÿB ÿø|¨(p¨ T¥èþ|©¦…'ÿü…Gÿü•&ÿü•FÿüB ÿðM‚  }	¦�'ÿÿ�&ÿÿB ÿøN€  |¡¦| $*| *N€  |„@@„ }D(|ƒP@|	¦8   |¦T ÿ�a |dA„ (| $*|£%*0„  B ÿô|¦| $*|£%*€a N€  |„(0„ÿà| $*|£%*B ÿô|€ |¦| $*|£%*€a N€        @      À bcopy €b |¦¿ÿà€ƒ  � ƒâ ƒÂ €  8„ÿü�ƒ  €Þ  T :€¿  |p|c””!ÿ�|| 0ƒ¢ |pZ”8 T:|eÈ.;€  8� @;`  € €Ã  t  A‚ 0€ � @|eÈ.€c  ƒ  ,š c  8},€  A„ 4H  $H ™€A `x  ,š c  8},€  A„ |`ÊƒC H  `;}4ce  H �€A 8€  H ©€A |zyc  A‚ € t ,€  @† (8}@;}Hce  H Q€A 8€  H m€A `z  ,  A‚ œ€ €º  cC  8� @tt  ,†  A† <A‚ € � @€z  €ƒ  H  H Ñ€A `d  8}PKÿûi`   ,ƒ  A† D,  8½€8}Pc  cJ  8ÝXc  9d@‚ 8ý`8Ý\9h;}lci  H ñ€A €‚ (8}ˆ8½$H €A €‚ 08}œ8½$H ñ€A €‚ 48}´8½$H Ý€A €‚ 88}È8½$H É€A 8}à8½$€‚ <H µ€A €£  ;` 8}ø€‚ <“e 08½$H •€A €Ã  8}€‚ <8½$“† 0H y€A €ƒ  ;@ 8}$8½$“D 0€‚ @H Y€A €Ã  8}<€‚ @8½$“F 0H =€A €Ã  €‚ @8}T8½$“f 0H !€A €c  € D“ƒ 0€  |É.€  | Ê�  �� x8! p»ÿà}ˆ¦N€         €    ü€‚ |¦¿Aÿè€¤  ƒÂ � ”!ÿPƒâ €å  €Þ  8¥ÿü€  �¤  Tå:€ƒ  | *| 0|¥p|¥”|pœ•8a X;¥ ƒD 0H ¥Wƒ:W¼:8ÿü8� @|€ß  @� p|fà.€ €£  t  A‚ €¥ �¡ @|fà.€c  €ƒ  H  H ‰€A `d  €¡ @8a XH á€ß  |Ø ;œ 8� @@€ |fà.€ €£  t  Kÿÿ¨8� X8a DH %8a DcD  H ¥�� ¸€Ÿ  W¥:8! °}ˆ¦|d).€  | *�  »AÿèN€         €    0|¦€¢ ¿�ÿð€å  ƒâ €Â � ƒÂ �  €Ÿ  8çÿü�å  €  €£  8fU:”!ÿ�|Ä:| | p| ”|æp|Æ”;¦ ,  ƒ… 0A‚ €… 4€„  €„ $H õ€A €Ÿ  W½:|dè.H ±�a T``  8a @`  H 9€a TH 8a @c„  H ±€Ÿ  |dé.€  | ê�  �� x8! p»�ÿð}ˆ¦N€         €     à|¦€¢ ¿�ÿð€Å  ƒâ €b � ƒÂ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ï |¤2| | p| ”|Åp|¥”8c(,  ;¥ A‚ H €A €Ÿ  W¼:|dâ€c ¤à.H M€A €ƒ  c£  ƒ¤  H ¹,  �aD8a @8€ 8  c¦  A‚ HKÿö¹€A |ey€aD8� @A‚ 0H ¥8a @8€ 8  c¦  Kÿö�€A |ey€aD8� @@‚ÿØ€  | â�  ��h8!`»�ÿð}ˆ¦N€         €    |¦€¢ ¿aÿì€Å  }€ &ƒâ €b ƒÂ €æ  8Æÿü� €Ÿ  �Å  €  Tå:|Ä*|¥p|¥”| |pœ•‘� . ”!ÿ ;¥ 8cA� H é€A €Ÿ  W½:|dè.H ¥€ß  �a H@‘ „;} W…:|fØ.8¥ÿü�*8� @€ €£  t  A‚ €¥ �¡ @|fØ.€c  €ƒ  H  H €A `d  €¡ @€a HH e€ß  |à ;{ 8� @@€ |fØ.€ €£  t  Kÿÿ¨€  | ê�  �� d€ h8! `|¦}€� »aÿìN€         €    8|¦€¢ ¿¡ÿô€Å  ƒâ €b � ƒ¢ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ÿ°|¤2| | p| ”|Åp|¥”8cÜ,  ;Å A‚ H ©€A €Ÿ  WÞ:|dð.H eH 	€A €  |`ò8ÿü�  �� X8! P»¡ÿô}ˆ¦N€         €     ¨|¦€‚ ¿aÿì€Ä  ƒâ €b � ƒb €æ  8Æÿü€¿  �Ä  €  Tæ:”!ÿ |…2| | p| ”|Äp|„”8c ð,  ;Ä A‚ H ñ€A €¿  8� @WÞ:|eð.€ €£  T ‡>|  Aœ €@� € � @€c  ƒ£  H  H 5€A `}  8` 4H =€A `|  H Y€A €ß  c¤  c…  |fñ.€  |cð.H a€A €  |cð.€c  €c  € d  €� H  H `|  cƒ  H •€  | ò�  �� h8! `»aÿì}ˆ¦N€         €    <|¦,  ¿Áÿø� ,„ / ”!ÿ�A‚ 0€¢ A† 4Aš D8e ÔH Ù€A cã  cÄ  H á€A H  D;À `  H  (8� @H `  ;À  H  8� @H  I`  ;À cã  cÄ  H �€A H ½€A �� x8! p»Áÿø}ˆ¦N€         €     ¨8Ã 8 €¢ | @`†  €¥hˆã  9 a	  9 Têð¾Të¾}EP®™F  A‚ P‰ ˆã 8c 9# U
ç>|	 @Qj 6U>}EP®Té×¾Q	:Tç¾™F }H®™ |å8®˜æ 8Æ Kÿÿ”8   Tã&¶|¥®`ƒ  ˜©  ˜  N€                 ¤8 | @`…  €Â 8  8cÿÿ€æl@€ 0|	¦ˆ Tá>|0®˜  Œ T>|0®˜ 8¥ B ÿÜ8   `ƒ  ˜  N€                 \¿Áÿø|¦ƒâ `~  � ”!ÿÀ8Ÿ ´H }€A ,  8pA‚ @€ž  €d  € €ƒ  t  A‚ €d �� H8! @»Áÿø}ˆ¦N€  H a€A H  H 
Å€A 8`  �� H8! @»Áÿø}ˆ¦N€         €     Œ|¦¿Áÿø`Ÿ  � €  `~  €‚ ”!ÿÀ   cã  T :|„€„€H  U8Ÿ cã  8  H  E€b l8Ÿ |¿„ª|¾…ª|£äª|¿åª|¤Åª�� H8! @»Áÿø}ˆ¦N€         €     x¿aÿì`  ƒŸ  |¦`¾  #| |â� |ò|Ø@T >`�  ”!ÿ°�  8c $A€ „ce  KÿñY`   8¿ $cã  8Ÿ H  ©  | ð@œè;œ c…  cã  8Ÿ @€ (H  …8 | ð@;{ ;œ c…  cã  8Ÿ A€ÿà;€  |»ð|â|�Ú8c $Kÿðé`   H   ;`  |»ð|â|�Ú8c $KÿðÉ`   �� X8! P»aÿì}ˆ¦N€         €     ð`ª  ½¡ÿ´”!þÐ9a @|£„ª|«…ª|ª„ª9! P‘A t|©…ªˆ£  ˆ
  |¦x˜Á `TÌ>ˆ ˆª ‘� x|*x˜Á aTÍ>ˆ ˆª ‘¡ ||*xTÎ>˜Á bˆ ˆª ‘Á €|*xTÏ>˜Á cˆ ˆª ‘á „|*xTÐ>˜Á dˆ ˆª ’ ˆ|*xTÑ>˜Á eˆ ˆª ’! Œ|*xTÒ>˜Á fˆ ˆª ’A �|*xTÓ>˜Á gˆ ˆª ’a ”|*xTÔ>˜Á hˆ 	ˆª 	’� ˜‚â |*xTÕ>˜Á iˆ 
ˆª 
’¡ œ|*xTÖ>˜Á jˆ ˆª ’Á  |*x8   U>`¹  ™ kˆÃ ˆê 8  ‹¡ @|	¦|É:x“ ¤U:>™! lˆã ‰
 “! ¨8×Ä|èBx“A ¬U>™ mˆ ˆê “a °“¡ ¸|:x‹Á A‹á B‰! C™ nˆê U>‰ Dˆ ‰¡ F“Á ¼“á À| :xˆá E‘! Ä‘ È�á Ì“� ´‘¡ ÐT >ˆá G‰ H‰! I‰A J‰a K‰� L‹á M‹Á N‹¡ O‹� P‹a Q‹A R‹! S‹ TŠá UŠÁ VŠ¡ WŠ� XŠa YŠA ZŠ! [Š \‰á ]‰Á _‰¡ ^� Ô€ ¸|¦(®|*x€ ¼˜¡ @T¥>�¡ ¸|¦(®|*x€ À˜¡ AT¥>�¡ ¼|¦(®|*x€ Ä˜¡ BT¥>�¡ À|¦(®|*x€ È˜¡ CT¥>�¡ Ä|¦(®|*x€ Ì˜¡ DT¥>�¡ È|¦(®|*x€ Ð˜¡ ET¥>�¡ Ì|¦(®|*x˜¡ FT¥>�¡ Ð|¦(®|å*x˜¡ GT§>|¦8®}*x˜¡ HT¨>|¦@®}%*x˜¡ IT©>|¦H®}E*x˜¡ JTª>|¦P®}e*x˜¡ KT«>|¦X®}…*x˜¡ LT¬>|¦`®å*x˜¡ MT¿>|¦ø®Å*x˜¡ NT¾>|¦ð®¥*x˜¡ OT½>|¦è®…*x˜¡ PT¼>|¦à®e*x˜¡ QT»>|¦Ø®E*x˜¡ RTº>|¦Ð®%*x˜¡ ST¹>|¦È®*x˜¡ TT¸>|¦À®~å*x˜¡ UT·>|¦¸®~Å*x˜¡ VT¶>|¦°®~¥*x˜¡ WTµ>|¦¨®~…*x˜¡ XT´>|¦ ®~e*x˜¡ YT³>|¦˜®~E*x˜¡ ZT²>|¦�®~%*x˜¡ [T±>|¦ˆ®€ x~*x˜¡ \T°>|¦€®}å*x˜¡ ]T¯>|¦x®}¥*x˜¡ ^T­>|¦h®}Å*x˜¡ _T®>|¦p®|*x€ |˜¡ `T¥>�¡ x|¦(®|*x€ €˜¡ aT¥>�¡ ||¦(®|*x€ „˜¡ bT¥>�¡ €|¦(®|*x€ ˆ˜¡ cT¥>�¡ „|¦(®|*x€ Œ˜¡ dT¥>�¡ ˆ|¦(®|*x€ �˜¡ eT¥>�¡ Œ|¦(®|*x€ ”˜¡ fT¥>�¡ �|¦(®|*x€ ˜˜¡ gT¥>�¡ ”|¦(®|*x€ œ˜¡ hT¥>�¡ ˜|¦(®|*x€  ˜¡ iT¥>�¡ œ|¦(®|*x€ ¤˜¡ jT¥>�¡  |¦(®|*x€ ¬˜¡ kT¥>�a Ø�¡ ¤|¦(®€a ¨|*x€ °˜¡ lT¥>�¡ ¬|¦(®|*x€ ´˜¡ mT¥>�¡ °|¦(®|*x€ Ô˜¡ nT¥>�¡ ´|¦(®8c | *x€¡ ¨�a ¨€a Ø˜ oT >|¥T¥>B ü(9! @�A t|©„ª|£…ªˆd ˆÊ  �b ˆ  |Ãxˆ¤ |kˆcÄˆä | x˜  ˆj T >|`x|kˆÄ| x˜ T >ˆj ˆ¤ |cxˆ |kˆÃÄˆd |æ2x˜Ä ˆê TÆ>|æ2x|Ë2ˆÆÄ| 2x˜ ˆÊ T >|Àx|ËˆÄˆä | x˜ ˆÊ T>ˆ |Å*xˆÄ |«*ˆ¥Ä|c*x˜d ˆª Tc>|£x|kˆcÄ| x˜ ˆj T >ˆ¤ 	|`x|kˆÄˆd 
|Àx˜ ˆÊ T >|Àx|ËˆÄ|àx˜ ˆÊ 	T >|Àx|ËˆÄ| x˜ 	ˆÊ 
T>ˆ |Å*xˆÄ |«*ˆ¥Äˆä |c*x˜d 
ˆª Tc>|£xˆ¤ |kˆcÄ| x˜ ˆj T >|`x|kˆÄˆd |Àx˜ ˆÊ T >|Àx|ËˆÄ|àx˜ ˆÊ T >|Àx|ËˆÄ| x˜ ˆª T >| x|«ˆÄ|`x˜ ¹¡ ä8!0N€          €    T€‚ l9ƒ 8   |¤äª|£åª|¬Åª�  N€                  �‚ �A €  €L |	¦N€               �‚ �A €  €L |	¦N€               �‚  �A €  €L |	¦N€               �‚ $�A €  €L |	¦N€               �‚ ,�A €  €L |	¦N€               �‚ H�A €  €L |	¦N€               �‚ L�A €  €L |	¦N€               �‚ P�A €  €L |	¦N€               �‚ T�A €  €L |	¦N€               �‚ X�A €  €L |	¦N€               �‚ \�A €  €L |	¦N€               �‚ `�A €  €L |	¦N€               �‚ d�A €  €L |	¦N€               �‚ h�A €  €L |	¦N€                                                                       									   









                 Digest::MD2 0123456789abcdef    Bad convertion type (%d)    Usage: Digest::MD2::new(xclass) Usage: %s(context)  MD2.c   %s::%s  XS_VERSION  %s::%s  VERSION 1.01    $           ::      bootstrap parameter 1.01    Digest::MD2::new    Digest::MD2::DESTROY    Digest::MD2::add    Digest::MD2::addfile    Digest::MD2::hexdigest  Digest::MD2::digest Digest::MD2::b64digest  Digest::MD2::md2_base64 Digest::MD2::md2_hex    Digest::MD2::md2      ˜   ÀNot a reference to a Digest::MD2 object ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/    Usage: Digest::MD2::DESTROY(context)    Usage: Digest::MD2::add(self, ...)  Usage: Digest::MD2::addfile(self, fh)   %s object version %s does not match %s%s%s%s %_                           (   0   <   H   T   `   p   €   �    ).CÉ¢Ø|=6T¡ìðb§óÀÇsŒ˜“+Ù¼L‚Ê›W<ýÔàgBoŠå¾NÄÖÚžÞI ûõŽ»/îz©hy‘²?”Â‰"_!€]šZ�2'5>Ìç¿÷—ÿ0³H¥µÑ×^’*¬VªÆO¸8Ò–¤}¶vükâœtñE�pYdq‡ †[Ïeæ-¨`%­®°¹öFai4@~UG£#ÝQ¯:Ã\ùÎºÅê&,Sn…(„	ÓßÍôA�MRjÜ7ÈlÁ«ú$á{½±Jxˆ•‹ãcèméËÕþ; 9òï·fXÐä¦wrøëuK
1DP´�íÛ™�3Ÿƒ  X        ¼                	¼        ”        ¤        d                                                Ð      Ü  è  ô                                               È         =   -     ô  H  !             @       fread         @
                    @               -      @               =      @               K      @               W      @
               d      @
               p      @
                     @
               Œ      @
               œ      @
               ®      @
               ¼      @
               Ê      @
               Ü      @
               ê      @
                    @
                    @
              )      @
              7  Ä 
          h       l       €       „       ˆ       Œ       �       ”       ˜       œ               ¤       ¨       ¬       °       ´       ¸       ¼       À       Ä        È       Ð        Ô       Ü        à       è        ì       ô        ø                                                            $       (       ,       0       4   
    8       <   	    @       D       H       L       P       T       X       \       `       d       h       l       p       t       x       |       €       „      /usr/lib:/lib:/usr/local/lib    libc.a shr.o  _system_configuration  PL_markstack_ptr  PL_stack_base  PL_stack_sp  
PL_sv_yes  Perl_croak  
Perl_form  Perl_newSVpv  Perl_newXS  Perl_safefree  Perl_safemalloc  Perl_sv_2io  Perl_sv_2iv  Perl_sv_2mortal  Perl_sv_2pv  Perl_sv_derived_from  Perl_sv_newmortal  Perl_sv_setref_pv  perl_get_sv  boot_Digest__MD2        *   @   d    B   ,  €   g   ¢   ,  Z   .�  n   0�  r   2�  ¢   4�      ¯™  4   ´™  @   ¹™  p   ´™  |   ¹™  È   ¯™  Ø   d™      ¾™  *   >�  4   Ã™  >   B�  H   Ã™  R   D�  \   Ã™  f   F�  p   Ã™  ‚   H�  „   Ã™  š   H�  ¤   Ã™  ¶   H�  À   Ã™  Þ   J�  à   Ã™  ò   J�  ü   Ã™  
   J�     Ã™  &   L�  f   .�  v   2�  ‚   0�     ¯™  ª   .�  ¶   0�  º   4�  Â   2�     ¾™  š   .�  ¦   0�  ª   4�  ²   2�  ø   ¾™  	   È™  	H   ª™  	t   ª™  	Â   .�  	Ò   0�  	Ö   4�  	Ú   2�  
(   ¾™  
Œ   ¯™  
   .�     0�     4�  "   2�  h   ¾™  €   Í™  Â   .�  Î   0�  Ò   4�  Ú   2�      ¾™  d   ¯™  t   Ò™  €   ×™      Ü™  *   4�  8   ¾™  H   á™  Œ   á™  ”   æ™  Ê   4�  ‚   4�  ê   4�  ü   ë™  @   ð™  L   ¾™  –   4�  Æ   `�  H   k™  ¸   k™  Ø   k™     4�  R   4�  j   `�  š   6  Â   8  ê   :     <  :   @  b   N  Š   P  ²   R  Ú   T     V  *   X  R   Z  z   \  ¢   ^  h   —   l   —   €   —   „   —   ˆ   —   Œ   —   �   —   ”   —   ˜   —   œ   —       —   ¤   —   ¨   —   ¬   —   °   —   ´   —   ¸   —   ¼   —   À   —   Ä   w   È   (   Ð   ƒ   Ô   (   Ü   �   à   (   è      ì   (   ô   }   ø   (       {      (      y      (                       $      (      ,   —   0      4      8   &   <      @   ›   D      H   �   L   Ÿ   P   ¡   T   £   X   ¥   \   
   `      d      h      l   "   p   $   t      x      |       €      „   •                                 fread                      
                                             +                                9                                E                                O                   
             Z                   
             d                   
             q                   
             |                   
             Š                   
             š                   
             ¦                   
             ²                   
             Â                   
             Î                   
             ã                   
             õ                   
                               
      TOC          k                fread        k                           k                            k                      +  $   k                      9  (   k               _$STATIC  ,   k                      Â  0   k                      Z  4   k                       8   k                      O  <   k                       @   k                      q  D   k                     &  H   k                     =  L   k                     P  P   k                     g  T   k                     }  X   k                      E  \   k                      š  `   k                      |  d   k                      Š  h   k                      ã  l   k                      õ  p   k                      d  t   k                      ²  x   k                      Î  |   k                      ¦  €   k                         „   k                         cÿþùg strcmp.s   fÿþg .strcmp    @     0      )       moveeq.s   qÿþg .bcopy    €     ×      )       .ovbcopy  €      g             ._moveeq         g             .memcpy          g             .memmove         g             .file      §ÿþ gMD2.c                   �               ª                   X   k  @                   ×  X      u                   é  d      u                   ý  ¤      u                     ”      u                   ,  	¼      u                   @        u                   X  ¼      u                   l     k   u                   |  À   k   u             .hex_16   t   k   u                   ‡  à   k   u                   ”  |   k   u                   ž     k   u                   ©     k   u             .MD2Init  h   k   u                       È   k                _$STATIC       k  Ä                  Ø  Ä            
              Ð            
            &  Ü            
            =  è            
            P  ô            
            g               
            }              
      glink.s    ¬ÿþg .fread         k   (            .fread            ¨            glink.s    ±ÿþg       ·  ˜   k   (                  ·  ˜      ­            glink.s    ¶ÿþg       Ä  À   k   (                  Ä  À      ²            glink.s    »ÿþg       Ï  è   k   (                  Ï  è      ·            glink.s    Àÿþg       Ü     k   (                  Ü        ¼            glink.s    Åÿþg       è  8   k   (                  è  8      Á            glink.s    Êÿþg       ô  `   k   (                  ô  `      Æ            glink.s    Ïÿþg         ˆ   k   (                    ˆ      Ë            glink.s    Ôÿþg         °   k   (                    °      Ð            glink.s    Ùÿþg       !  Ø   k   (                  !  Ø      Õ            glink.s    Þÿþg       4      k   (                  4         Ú            glink.s    ãÿþg       G  (   k   (                  G  (      ß            glink.s    èÿþg       U  P   k   (                  U  P      ä            glink.s    íÿþg       f  x   k   (                  f  x      é            glink.s ÿÿÿÿÿþg       |      k   (                  |         î              ‰_system_configuration PL_markstack_ptr PL_stack_base PL_stack_sp PL_sv_yes Perl_croak Perl_form Perl_newSVpv Perl_newXS Perl_safefree Perl_safemalloc Perl_sv_2io Perl_sv_2iv Perl_sv_2mortal Perl_sv_2pv Perl_sv_derived_from Perl_sv_newmortal Perl_sv_setref_pv perl_get_sv XS_Digest__MD2_new XS_Digest__MD2_DESTROY XS_Digest__MD2_add XS_Digest__MD2_addfile XS_Digest__MD2_digest XS_Digest__MD2_md2 Wed Nov 29 14:24:24 2000  IBM C and C++ Compilers Version 3.6.6.3 ---  .boot_Digest__MD2 .XS_Digest__MD2_md2 .XS_Digest__MD2_digest .XS_Digest__MD2_addfile .XS_Digest__MD2_add .XS_Digest__MD2_DESTROY .XS_Digest__MD2_new .make_mortal_sv .base64_16 .get_md2_ctx .MD2Final .MD2Update .MD2Transform .Perl_sv_2pv .Perl_form .perl_get_sv .Perl_croak .Perl_newXS .Perl_sv_2io .Perl_safefree .Perl_safemalloc .Perl_sv_newmortal .Perl_sv_setref_pv .Perl_newSVpv .Perl_sv_2mortal .Perl_sv_derived_from .Perl_sv_2iv   kkê¶Ã š¤ $�              á}·:�%:ÔÎž:!                      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.bs s             ó/      $�          kê_ ]g m�          HJ  á}·:¢%:ÔÎž:!        €î  HJ      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.so                     ó/      m�          ß :%¢  5h   õ H0   %   ¤    ÿÿÿÿ          4         RE                      .text             %   @  /‚     k      .data             ¤  &@  3°     ,     @.bss      ¤  ¤                       €.loader           ž  )ä                                                                                   �‚  �A €  €L |	¦N€               ( |¦+x|§+x|¨+xA� |�¦| *N€  T€Ù|©+x|ª+x|«+x|¬+xA‚ÿà|	¦8   |¦T„þ| *0c  B ÿøKÿÿÀ      @       X _fill         �b �‹ 8  qŒ A‚ ´|¦| +|à"*A‚ H|…8@@@@† |Aš L˜  H  p|£+|ä*A‚ $0  |…8@@@|£+@† P@š D|ä*@‚ÿä|¦,     T øA� |¥0|ç0|…8@H  |…8@|Æ0}0@@@† L˜  A† A… 8`ÿÿN€  8` N€  8`  N€  8cÿÿ8„ÿÿˆ£ ˆÄ ,  |…0@A‚ Œ£ @† ŒÄ ,  |…0@KÿÿèA† A… 8`ÿÿN€  8`  N€  8` N€        @       strcmp                |fx|ƒ#x|Ä3x`   `   `   `   `   �b T Ù�‹ @�qŒ @¢|ƒ @M†  A„ |*|€@A… Œpi A‚ <8„ÿÿ8Ãÿÿ!) })¦Œä œæ B ÿø|©(8„ÿý8Æÿýp¨ T¥èþ|©¦H  p¨ T¥èþ|©¦8„ÿü8Ãÿü„ä …$ ”æ •& B ÿðM‚  }	¦8„ 8Æ Œä œæ B ÿøN€  |Ã*|ä*pÈ A‚ }	¦�'ÿÿ�&ÿÿB ÿø|¨(p¨ T¥èþ|©¦…'ÿü…Gÿü•&ÿü•FÿüB ÿðM‚  }	¦�'ÿÿ�&ÿÿB ÿøN€  |¡¦| $*| *N€  |„@@„ }D(|ƒP@|	¦8   |¦T ÿ�a |dA„ (| $*|£%*0„  B ÿô|¦| $*|£%*€a N€  |„(0„ÿà| $*|£%*B ÿô|€ |¦| $*|£%*€a N€        @      À bcopy €b |¦¿ÿà€ƒ  � ƒâ ƒÂ €  8„ÿü�ƒ  €Þ  T :€¿  |p|c””!ÿ�|| 0ƒ¢ |pZ”8 T:|eÈ.;€  8� @;`  € €Ã  t  A‚ 0€ � @|eÈ.€c  ƒ  ,š c  8} \€  A„ 4H  $H Q€A `x  ,š c  8} \€  A„ |`ÊƒC H  `;} dce  H E€A 8€  H a€A |zyc  A‚ € t ,€  @† (8} p;} xce  H 	€A 8€  H %€A `z  ,  A‚ œ€ €º  cC  8� @tt  ,†  A† <A‚ € � @€z  €ƒ  H  H ‰€A `d  8} €Kÿûi`   ,ƒ  A† D,  8½ °8}°c  cJ  8Ý ˆc  9 ”@‚ 8ý �8Ý Œ9 ˜;} œci  H ©€A €‚ (8} ¸8½ TH ½€A €‚ 08} Ì8½ TH ©€A €‚ 48} ä8½ TH •€A €‚ 88} ø8½ TH �€A 8}8½ T€‚ <H m€A €£  ;` 8}(€‚ <“e 08½ TH M€A €£  ;@ 8}@€‚ <“E 08½ TH -€A €ƒ  8}X8½ T“„ 0€‚ @H €A €Ã  8}l€‚ @8½ T“† 0H õ€A €Ã  €‚ @8}ˆ8½ T“f 0H Ù€A €c  € D“C 0€  |É.€  | Ê�  �� x8! p»ÿà}ˆ¦N€         €    ü€‚ |¦¿Aÿè€¤  ƒÂ � ”!ÿ0ƒâ €å  €Þ  8¥ÿü€  �¤  Tå:€ƒ  | *| 0|¥p|¥”|	p})•8a X;¥ ƒD 0H ÑU#:W¼:8ÿü8� @|€ß  @� p|fà.€ €£  t  A‚ €¥ �¡ @|fà.€c  €ƒ  H  H A€A `d  €¡ @8a XH 
1€ß  |Ø ;œ 8� @@€ |fà.€ €£  t  Kÿÿ¨8� X8a DH %8a DcD  H ¥�� Ø€Ÿ  W¥:8! Ð}ˆ¦|d).€  | *�  »AÿèN€         €    0|¦€¢ ¿�ÿð€å  ƒâ €Â � ƒÂ �  €Ÿ  8çÿü�å  €  €£  8f @U:”!ÿ�|Ä:| | p| ”|æp|Æ”;¦ ,  ƒ… 0A‚ €… 4€„  €„ $H ­€A €Ÿ  W½:|dè.H ±�a X``  8a @`  H 9€a XH 
I8a @c„  H ±€Ÿ  |dé.€  | ê�  �� x8! p»�ÿð}ˆ¦N€         €     à|¦€¢ ¿�ÿð€Å  ƒâ €b � ƒÂ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ï |¤2| | p| ”|Åp|¥”8cˆ,  ;¥ A‚ H Ñ€A €Ÿ  W¼:|dâ€c ¤à.H €A €ƒ  c£  ƒ¤  H ¹,  �aD8a @8€ 8  c¦  A‚ HKÿöY€A |ey€aD8� @A‚ 0H õ8a @8€ 8  c¦  Kÿö-€A |ey€aD8� @@‚ÿØ€  | â�  ��h8!`»�ÿð}ˆ¦N€         €    |¦€¢ ¿aÿì€Å  }€ &ƒâ €b ƒÂ €æ  8Æÿü� €Ÿ  �Å  €  Tå:|Ä*|¥p|¥”| |pœ•‘� . ”!ÿ ;¥ 8cdA� H ¡€A €Ÿ  W½:|dè.H ¥€ß  �a H@‘ „;} W…:|fØ.8¥ÿü�*8� @€ €£  t  A‚ €¥ �¡ @|fØ.€c  €ƒ  H  H Å€A `d  €¡ @€a HH µ€ß  |à ;{ 8� @@€ |fØ.€ €£  t  Kÿÿ¨€  | ê�  �� d€ h8! `|¦}€� »aÿìN€         €    8|¦€¢ ¿¡ÿô€Å  ƒâ €b � ƒ¢ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ÿ°|¤2| | p| ”|Åp|¥”8c<,  ;Å A‚ H a€A €Ÿ  WÞ:|dð.H eH Á€A €  |`ò8ÿü�  �� X8! P»¡ÿô}ˆ¦N€         €     ¨|¦€‚ ¿aÿì€Ä  ƒâ €b � ƒb €æ  8Æÿü€¿  �Ä  €  Tæ:”!ÿ |…2| | p| ”|Äp|„”8c,  ;Ä A‚ H ©€A €¿  8� @WÞ:|eð.€ €£  T ‡>|  Aœ €@� € � @€c  ƒ£  H  H í€A `}  8` `H õ€A `|  H €A €ß  c¤  c…  |fñ.€  |cð.H €A €  |cð.€c  €c  € d  €� H  H `|  cƒ  H Á€  | ò�  �� h8! `»aÿì}ˆ¦N€         €    <|¦,  ¿Áÿø� ,„ / ”!ÿ€A‚ 0€¢ A† 4Aš D8e $H ‘€A cã  cÄ  H ™€A H  D;À `  H  (8� @H `  ;À (H  8� @H  I`  ;À cã  cÄ  H U€A H u€A �� ˆ8! €»Áÿø}ˆ¦N€         €     ¨8Ã 8 €¢ | @`†  €¥ ‰#  9f ah  ˆã U*ð¾U)¾}EP®Tëç>Q+ 6Té>™F  }EX®9f ™F A‚ 8ˆã 8c 9 | @Tè×¾Tç¾Q(:}@®™ |å8®˜æ 8Æ Kÿÿ”8   Tãº|¥®`ƒ  ˜¨  ˜  N€                 ¤8 | @`…  €Â 8  8cÿÿ€æ¤@€ 0|	¦ˆ Tá>|0®˜  Œ T>|0®˜ 8¥ B ÿÜ8   `ƒ  ˜  N€                 \¿Áÿø|¦ƒâ `~  � ”!ÿÀcä  H 5€A ,  8¨A‚ @€ž  €d  € €ƒ  t  A‚ €d �� H8! @»Áÿø}ˆ¦N€  H €A H  H }€A 8`  �� H8! @»Áÿø}ˆ¦N€         €     Œ¿�ÿð`Ÿ  |¦ƒß 8à €� ƒŸ WÆî¾`}  8 |¿2,  8˜å 8 ”!ÿ° † ?|8   @� DKÿð`   cã  H !8 �‚ l8Ÿ 8|¬äª|£åª|¤åªW€F>W…„>W†Â>WÇF>WÈ„>H  $ † 7Kÿï½`   W€F>W…„>W†Â>WÇF>WÈ„>WÉÂ>˜ T˜¿ U˜ß V›Ÿ W˜ÿ X™ Y™? Z›ß [cã  H ¥€  T F>˜  €  T „>˜ €  T Â>˜ €  ˜ € T F>˜ € T „>˜ € T Â>˜ € ˜ € T F>˜ € T „>˜ 	€ T Â>˜ 
€ ˜ € T F>˜ € T „>˜ € T Â>˜ € ˜ € T F>˜ € T „>˜ € T Â>˜ € ˜ �� X8! P»�ÿð}ˆ¦N€         €    È¿aÿì|¦`¾  `  € \� € WÆ8€¿ #ƒ @|À2| @,ƒ  ð ”!ÿ°`�  8¥ �ß WÀ~|@€ �¿ 8c €¿ |� A† <@™ cÜ  c…  KÿïÕ`   € \Üð¼êcã  | â,  @� \@‚ €H , @cã  ;Ÿ ; <8�  A€ 8|½ª|¼ª|¤ª|»ª;ÞÿÀ;½ @H  Í, @8�  cã  A€ |½ªKÿÿÔcƒ  c¤  cÅ  KÿïQ`   “ß \�� X8! P»aÿì}ˆ¦N€  �� X8! P»�ÿð}ˆ¦N€         €    08   <€gE< ïÎ<À˜»= 2<àÃÓ8„#8¥«‰8ÆÜþ9Tv8çáð�ƒ  �£ �Ã �ã ‘ � � � \N€                 P8  ?€ ¿¡ÿô”!þp� @8� |€  � D€ $� H€ (� L€ ,� P€ 0� T€ 4� X€ 8� \€ <|©¦� `€ @� @� d€ D€Á `� h€ H� l€ L� p€ P� t€ T� x€ X€¡ t� |€ H|¦2x|Àx€¤ÿü|Bx€Äÿè€ÿÐTç>�ÿÈ”ä |¦2xB ÿÜ|Àx| BxT >” €  €ã €£ €ƒ �C |¦88T	(>|ˆ(xT¥ð>|ÈCx€Á @}	B}R|
(8|È2|ë x<ÆZ‚�� D�! H9y™}J[xTð>U(>}KR|„R|Œ"}
08<„Z‚|«@x}J[x8„y™T‹(>Uð>}KR|çR|é:}
 8<çZ‚|Ë x�� L�! P}J[x8çy™Të(>T„ð>}KR|¥R|¬*|ê 8<¥Z‚}8x}J[x8¥y™T«(>Tçð>}KR|ÆR|É2|ª88<ÆZ‚|‹(x�� T�! X}J[x8Æy™TË(>T¥ð>}KR}R}B|Ê(8=Z‚|ë0x}J[x9y™U(>TÆð>}KR|Š"|„J}
08<„Z‚|«@x�� \�! `}J[x8„y™T‹(>Uð>}KR|çR|ì:|Š@8<çZ‚|Ë x}J[x8çy™Të(>T„ð>}KR|¥R|©*|Š88<¥Z‚}8x�� d�! h}J[x8¥y™T«(>Tçð>}KR|ÆR|Ì2|ª88<ÆZ‚|‹(x}J[x8Æy™TË(>T¥ð>}KR}R}	B|Ê(8=Z‚|ë0x�� l�! p}J[x9y™U(>TÆð>}KR|„R|Œ"}
08<„Z‚|«@x}J[x8„y™T‹(>Uð>}KR|ê:|çJ|Š@8<çZ‚|Ë x�� t9'y™€á x}J[xU+(>T„ð>}KR|¥R|¬*}* 8<¥Z‚}Hx}J[x8¥y™T«(>U)ð>}KR|ÆR|Ç2}*(8<ÆZ‚|‹(x�� |8æy™€Á €}J[xTë(>T¥ð>}KR}R}B|ê(8=Z‚}+8x}J[x9y™U(>Tçð>}KR|„R|†"}
88<„Z‚|«@x�� „€Á ˆ}J[x8„y™T‹(>Uð>}KR})R},J|Š@8=)Z‚|ë x}J[x9)y™U+(>T„ð>}KR|ª*|¥2}* 8<¥Z‚}Hx€Á �;åy™�� ŒU)ð>Wþ(>}J[x}^RëJx|çR|ŠZx|ì:€¡ ”=gZ‚Wçð>9ky™Ul(>|ÿZx}LR}R}B}>úx€Á ˜=ˆnÚUhð>9lë¡Ul(>}Bx}Œò|„b|…"Ueð><„nÚ|ìúx8„ë¡�A œT‹(>|Ÿ*x}kb})Z|ÆJ}úx<ÆnÚT„ð>;Æë¡�!  €Á ¤Wß(>}Z|çZ|ê:Ì"x|«bx=GnÚ9Jë¡WÇð>}_:xUL(>}lZ}Z}	B|‹úx=nÚ�! ¨9ˆë¡UHð>UŠ(>ƒÁ ¬}JZ|¥R|¦*}†Bx|ê2x<¥nÚ8Åë¡U…ð>|¬2xTË(>}KR|„R}
bx|‰"=$nÚTÄð>9ië¡�! °Ul(>}"x€Á ´}LR|çR|þ:|ªúx=‡nÚUgð>9lë¡Ul(>}:x}LR}R}	B|Šúx=(nÚUhð>9‰ë¡�! ¸U‹(>ƒÁ ¼}KR|¥R|¦*}†Bx|ê2x<¥nÚ8Åë¡U…ð>|Ì*xTË(>}KR|„R|‰"}	bx=DnÚTÄð>9Jë¡ƒá ÀUK(>}L"x}+J|çJ|þ:€Á Ä<çnÚ|©bx9gë¡UJð>}LZxUg(>|çJ}:}BU~ð>=nÚ|‡bx9hë¡Uh(>}iòx|è:|¥:|¦*}IJx<ÅnÚUeð>8Æë¡€á È� Ì|Ì*xTË(>}+J}$J|çJÄbx='nÚTÇð>9)ë¡U&(>}+:x|†"|Š"}"|¦Zx=hnÚU)ð>9kë¡�A Ð€� ÔU(>|ß2|Þ2|Ê2}lJx|êbx=†nÚ;Ìë¡Ufð>Ì2xWË(>}KR|¥R|„*WÅð><„nÚ}*bx8„ë¡� Ø|�ð8|Ÿóx�a ÜTž(>}^R|çR|è:|¬"x|Êbx<çnÚWìð>9ë¡W§ð>U(>}_R})R}+J}`8=)nÚ|êcx9)ë¡|ŒCx�a àU?(>€á ä}_R|ž@8|ÆRUŒð>|Ë2<Æ�}*`8WËð>}H88Æ¼Ü}kSxTÊ(>T„ð>}JZ|¥R|§*}KxUð><¥��A èUkð>UŒð>8¥¼Ü}(08|ËX8}‹[x�� ìUð>T¿(>}Z|„Z|Š"}>3x<„�WÊð>|ªP88„¼ÜT‹(>}
SxëR|çú|Þ+x|ì:|Ê(8� ðWÌð><ç�|«#xU)ð>|¿ 8|Œ`8UJð>8ç¼ÜU~ð>Të(>}Jcx|Œ;x}KR})R}hJT¨ð>=k�TÆð>8«¼Ü�A ô�! ø|‹88|ýð8Wÿð>T¾(>ÿëxþúUkð>|Æú|Ê2<Æ�UŒð>|ª`88Æ¼ÜTÌ(>}SxT‹ð>|Œú|ˆ"|‰"<„��A ü|è+x|é(88„¼Ü|¿08Uð>U>ð>|É@8Tˆ(>ÉKx|¬3x}J}B}
B|Ë#xUžð>=(�T¨ð>8©¼Ü|�ð8Wÿð>Tçð>�! �A|Ì 8T¾(>Ukð>|«X8ÿëxþú|çú|Ÿ+x|é:<ç�U‰ð>|Œ(8})[xTÆð>8ç¼ÜTë(>Wÿð>}+J}(J�}*J|ª;x|«88T„ð>=)�9)¼ÜUŒð>|ÿø8UJð>}*P8U>(>}Œûx|ÿH8}žb|Æb|ìKx|È2=�Ufð>|ÆSx9¼ÜU(>�a�A|Þ2T¥ð>|„2UŒð>|‹"<„�}`8Wëð>}k3x8Ä¼ÜTÌ(>Täð>|ìZ|¥:}J*}+Cx},@8U%ð>=J�Ukð>UŒð>€á|ËX89J¼Ü}‹[x��U_(>}	08}Z|„Z}3x|‡"<„�WÇð>}G888„¼ÜT‹(>U)ð>});x€áëJ|¥ú|ÞSx|ÉP8|¬*WÌð>}K#x<¥�Uð>|Œ`8U)ð>8¥¼ÜU~ð>T«(>})cx|Œ+x}+J}J}gBUGð>=k�}_ 89K¼ÜTÆð>|‹(8� |½ð8Wÿð>U^(>ÿëxþú�!$|Æú|È2UŒð><Æ�Ukð>}H`8}lCx8Æ¼ÜTË(>T„ð>}kb|çZ�(|é:<ç�|¿Sx|¬P8Wÿð>}I3x8ç¼Ü|ßø8}K08UŒð>Tþ(>}ŒûxU)ð>}žb}„bT¤ð>|¨b<¥�Tèð>8¥¼Ü|çH8Uið>T«(>}';xUJð>|ë:|„:ƒá,��0�a4|ÿ"TÄð><Ç�|§Bx|‰:x8Æ¼ÜTÇ(>T¥ð>|çJ|ê:},:|Ê*x}Rx=)Êc€á89IÁÖTÉð>UF(>|Æb|„2|‹"}_Jx|¬úx<ÄÊc;æÁÖUDð>Wê(>|‹úx}Jb}R}B}+Zx=ˆÊcWèð>9ŒÁÖ€Á<€á@�ADUŸ(>}žBx}Z|¥Z|¦*|‹òx<ÅÊcU…ð>8ÆÁÖTÌ(>|ß*x}lZ})Z|çJ}úx<çÊcTÆð>;ÇÁÖ�!H€áLWß(>}Z|„Z|Š"Ì2x|«bx=DÊc9JÁÖWÄð>}_"xUL(>}lZ}Z}	B|Ëúx=Êc�!P9ˆÁÖUHð>UŠ(>ƒÁT}JZ|¥R|§*}‡Bx|Š:x<¥Êc8åÁÖU…ð>|¬:xTë(>}KR|ÆR}
bx|É2=&ÊcTæð>9iÁÖ�!XUl(>}2x}LR|„R|ž"€á\=„Êc|ªúxUdð>9lÁÖUl(>}"x}LR}R}	B|Êúx=(ÊcUhð>9‰ÁÖ�!`U‹(>ƒÁd}KR|¥R|§*}‡Bx|Š:x<¥Êc8åÁÖU…ð>|ì*xTë(>}KR|ÆR|É2}	bx=FÊcTæð>9JÁÖƒáhUK(>}L2x}+J|„J|ž"UIð><„Êc|«bx8„ÁÖ€álTŠ(>},"x}JZ}HR}_R|Èbx=JÊcT„ð>9ŠÁÖUŠ(>}‹"x}
B|¥B|§*}+Zx<åÊcU…ð>8çÁÖ�Ap�tTì(>}lZ|ÆZ|ÿ*x|Ê2|‹úx=FÊc;êÁÖTæð>ê2xWç(>|çZ}):}hJ|§Rx=kÊcWÿð>9kÁÖ�xU~ð>U}(>�C |ý:�!||„:|ˆ"}kúx|ÇZx<„Êc8„ÁÖ�ƒ }DRT„(>|„:|…"€ã |‰"<„Êc€£ 8„ÁÖ| "}ò|‡2|¥ú‘C ‘ �  �£ �ƒ »¡„8!�N€          €    H    �‚ �A €  €L |	¦N€               �‚ �A €  €L |	¦N€               �‚  �A €  €L |	¦N€               �‚ $�A €  €L |	¦N€               �‚ ,�A €  €L |	¦N€               �‚ H�A €  €L |	¦N€               �‚ L�A €  €L |	¦N€               �‚ P�A €  €L |	¦N€               �‚ T�A €  €L |	¦N€               �‚ X�A €  €L |	¦N€               �‚ \�A €  €L |	¦N€               �‚ `�A €  €L |	¦N€               �‚ d�A €  €L |	¦N€               �‚ h�A €  €L |	¦N€                                               Digest::SHA1    0123456789abcdef    Bad convertion type (%d)    Usage: %s(context)  SHA1.c  %s::%s  XS_VERSION  %s::%s  VERSION 1.03    $           ::      bootstrap parameter 1.03    Digest::SHA1::new   Digest::SHA1::DESTROY   Digest::SHA1::add   Digest::SHA1::addfile   Digest::SHA1::b64digest Digest::SHA1::hexdigest Digest::SHA1::digest    Digest::SHA1::sha1  Digest::SHA1::sha1_base64   Digest::SHA1::sha1_hex    Ô   Not a reference to a Digest::SHA1 object    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/    Usage: Digest::SHA1::new(xclass)    Usage: Digest::SHA1::DESTROY(context)   Usage: Digest::SHA1::add(self, ...) Usage: Digest::SHA1::addfile(self, fh)  %s object version %s does not match %s%s%s%s %_   ¸  4        4      d  4      
  4      ô  4        4      Ä  4                                              ì      ø        (                                          $à         ,   -     (  I  U             @       fread         @
                    @               -      @               =      @               K      @               W      @
               d      @
               p      @
                     @
               Œ      @
               œ      @
               ®      @
               ¼      @
               Ê      @
               Ü      @
               ê      @
                    @
                    @
              )      @
              7  à 
                  ¤       à        ä       ì        ð       ø        ü                                                     (        ,       4       8       <       @       D       H       L       P   
    T       X   	    \       `       d       h       l       p       t       x       |       €       „       ˆ       Œ       �       ”       ˜       œ              /usr/lib:/lib:/usr/local/lib    libc.a shr.o  _system_configuration  PL_markstack_ptr  PL_stack_base  PL_stack_sp  
PL_sv_yes  Perl_croak  
Perl_form  Perl_newSVpv  Perl_newXS  Perl_safefree  Perl_safemalloc  Perl_sv_2io  Perl_sv_2iv  Perl_sv_2mortal  Perl_sv_2pv  Perl_sv_derived_from  Perl_sv_newmortal  Perl_sv_setref_pv  perl_get_sv  boot_Digest__SHA1       *   (   d        g    ¢   ,  à   j      ,  º   .�  Î   0�  Ò   2�     4�  `   ²™  ”   ·™      ¼™  Ð   ·™  Ü   ¼™  (   ²™  8   g™  €   Á™  Š   >�  ”   Æ™  ž   B�  ¨   Æ™  ²   D�  ¼   Æ™  Æ   F�  Ð   Æ™  â   H�  ä   Æ™  ú   H�     Æ™     H�  $   Æ™  >   J�  @   Æ™  R   J�  \   Æ™  j   J�  x   Æ™  †   L�  Æ   .�  Ö   2�  â   0�  p   ²™  
   .�     0�     4�  "   2�  |   Á™  ú   .�  	   0�  	
   4�  	   2�  	X   Á™  	t   Ë™  	¨   ­™  	Ô   ­™  
"   .�  
2   0�  
6   4�  
:   2�  
ˆ   Á™  
ì   ²™  j   .�  v   0�  z   4�  ‚   2�  È   Á™  à   Ð™  "   .�  .   0�  2   4�  :   2�  €   Á™  Ä   ²™  Ô   Õ™  à   Ú™      ß™  Š   4�  ˜   Á™  ¨   ä™  ì   ä™  ô   é™  *   4�  â   4�  J   4�  \   î™      ó™  ¬   Á™  (   d™  >   `�  l   d™  ,   n™  °   n™  "²   6  "Ú   8  #   :  #*   <  #R   @  #z   N  #¢   P  #Ê   R  #ò   T  $   V  $B   X  $j   Z  $’   \  $º   ^      š   ¤   š   à   z   ä   (   ì   †   ð   (   ø   „   ü   (      ‚      (      €      (      ~       (   (   |   ,   (   4      8       <      @      D      H   š   L      P      T   &   X      \   ž   `      d       h   ¢   l   ¤   p   ¦   t   ¨   x   
   |      €      „      ˆ   "   Œ   $   �      ”      ˜       œ          ˜                                 fread                      
                                             +                                9                                E                                O                   
             Z                   
             d                   
             q                   
             |                   
             Š                   
             š                   
             ¦                   
             ²                   
             Â                   
             Î                   
             ã                   
             õ                   
                               
      TOC       4   k                fread     4   k                        8   k                        <   k                      +  @   k                      9  D   k               _$STATIC  H   k                      Â  L   k                      Z  P   k                       T   k                      O  X   k                       \   k                      q  `   k                     '  d   k                     ?  h   k                     S  l   k                     k  p   k                     ‚  t   k                      E  x   k                      š  |   k                      |  €   k                      Š  „   k                      ã  ˆ   k                      õ  Œ   k                      d  �   k                      ²  ”   k                      Î  ˜   k                      ¦  œ   k                             k                         cÿþùg noname     fÿþg ._fill     (      o             strcmp.s   iÿþg .strcmp          0      )       moveeq.s   tÿþg .bcopy    à     ×      )       .ovbcopy  à      j             ._moveeq         j             .memcpy          j             .memmove         j             .file      ªÿþ gSHA1.c                  —               ±                   ¸   k  ø                   Þ  ¸      x                   ñ  Ä      x                           x                     ô      x                   8  
      x                   M  d      x                   f        x                   {  h   k   x                   ‹      k   x             .hex_20   Ô   k   x                   –  @   k   x                   ¤  Ü   k   x                   ¯  ´   k   x                   »  ô   k   x                   Å  T   k   x                       $à   k                _$STATIC       k  à                  ß  à            
              ì            
            '  ø            
            ?              
            S              
            k              
            ‚  (            
      glink.s    ¯ÿþg .fread         k   (            .fread            «            glink.s    ´ÿþg       Ô  "°   k   (                  Ô  "°      °            glink.s    ¹ÿþg       á  "Ø   k   (                  á  "Ø      µ            glink.s    ¾ÿþg       ì  #    k   (                  ì  #       º            glink.s    Ãÿþg       ù  #(   k   (                  ù  #(      ¿            glink.s    Èÿþg         #P   k   (                    #P      Ä            glink.s    Íÿþg         #x   k   (                    #x      É            glink.s    Òÿþg         #    k   (                    #       Î            glink.s    ×ÿþg       -  #È   k   (                  -  #È      Ó            glink.s    Üÿþg       >  #ð   k   (                  >  #ð      Ø            glink.s    áÿþg       Q  $   k   (                  Q  $      Ý            glink.s    æÿþg       d  $@   k   (                  d  $@      â            glink.s    ëÿþg       r  $h   k   (                  r  $h      ç            glink.s    ðÿþg       ƒ  $�   k   (                  ƒ  $�      ì            glink.s ÿÿÿÿÿþg       ™  $¸   k   (                  ™  $¸      ñ              ¦_system_configuration PL_markstack_ptr PL_stack_base PL_stack_sp PL_sv_yes Perl_croak Perl_form Perl_newSVpv Perl_newXS Perl_safefree Perl_safemalloc Perl_sv_2io Perl_sv_2iv Perl_sv_2mortal Perl_sv_2pv Perl_sv_derived_from Perl_sv_newmortal Perl_sv_setref_pv perl_get_sv XS_Digest__SHA1_new XS_Digest__SHA1_DESTROY XS_Digest__SHA1_add XS_Digest__SHA1_addfile XS_Digest__SHA1_digest XS_Digest__SHA1_sha1 Wed Nov 29 14:24:40 2000  IBM C and C++ Compilers Version 3.6.6.3 ---  .boot_Digest__SHA1 .XS_Digest__SHA1_sha1 .XS_Digest__SHA1_digest .XS_Digest__SHA1_addfile .XS_Digest__SHA1_add .XS_Digest__SHA1_DESTROY .XS_Digest__SHA1_new .make_mortal_sv .base64_20 .get_sha_info .sha_final .sha_update .sha_init .sha_transform .Perl_sv_2pv .Perl_form .perl_get_sv .Perl_croak .Perl_newXS .Perl_sv_2io .Perl_safefree .Perl_safemalloc .Perl_sv_newmortal .Perl_sv_setref_pv .Perl_newSVpv .Perl_sv_2mortal .Perl_sv_derived_from .Perl_sv_2iv kê˜ê ^g $�              á}·:¢%:ÔÎž:!                      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.bs                     ó/      $�          kêÔ¿ (c $�          >  á}·:&Æ9ÔÎž:!        ûì  >      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD5.pm A1             ó/      $�          package Digest::MD5;

use strict;
use vars qw($VERSION @ISA @EXPORT_OK);

$VERSION = '2.12';  # $Date: 2000/09/18 14:26:37 $

require Exporter;
*import = \&Exporter::import;
@EXPORT_OK = qw(md5 md5_hex md5_base64);

require DynaLoader;
@ISA=qw(DynaLoader);

eval {
    Digest::MD5->bootstrap($VERSION);
};
if ($@) {
    # Try to load the pure perl version
    require Digest::Perl::MD5;

    Digest::Perl::MD5->import(qw(md5 md5_hex md5_base64));
    push(@ISA, "Digest::Perl::MD5");  # make OO interface work
}
else {
    *reset = \&new;
}

1;
__END__

=head1 NAME

Digest::MD5 - Perl interface to the MD5 Algorithm

=head1 SYNOPSIS

 # Functional style
 use Digest::MD5  qw(md5 md5_hex md5_base64);

 $digest = md5($data);
 $digest = md5_hex($data);
 $digest = md5_base64($data);

 # OO style
 use Digest::MD5;

 $ctx = Digest::MD5->new;

 $ctx->add($data);
 $ctx->addfile(*FILE);

 $digest = $ctx->digest;
 $digest = $ctx->hexdigest;
 $digest = $ctx->b64digest;

=head1 DESCRIPTION

The C<Digest::MD5> module allows you to use the RSA Data Security
Inc. MD5 Message Digest algorithm from within Perl programs.  The
algorithm takes as input a message of arbitrary length and produces as
output a 128-bit "fingerprint" or "message digest" of the input.

The C<Digest::MD5> module provide a procedural interface for simple
use, as well as an object oriented interface that can handle messages
of arbitrary length and which can read files directly.

A binary digest will be 16 bytes long.  A hex digest will be 32
characters long.  A base64 digest will be 22 characters long.

=head1 FUNCTIONS

The following functions can be exported from the C<Digest::MD5>
module.  No functions are exported by default.

=over 4

=item md5($data,...)

This function will concatenate all arguments, calculate the MD5 digest
of this "message", and return it in binary form.

=item md5_hex($data,...)

Same as md5(), but will return the digest in hexadecimal form.

=item md5_base64($data,...)

Same as md5(), but will return the digest as a base64 encoded string.

=back

=head1 METHODS

The following methods are available:

=over 4

=item $md5 = Digest::MD5->new

The constructor returns a new C<Digest::MD5> object which encapsulate
the state of the MD5 message-digest algorithm.  You can add data to
the object and finally ask for the digest.

If called as a instance method (i.e. $md5->new) it will just reset the
state the object to the state of a newly created object.  No new
object is created in this case.

=item $md5->reset

This is just an alias for $md5->new.

=item $md5->add($data,...)

The $data provided as argument are appended to the message we
calculate the digest for.  The return value is the $md5 object itself.

=item $md5->addfile($io_handle)

The $io_handle is read until EOF and the content is appended to the
message we calculate the digest for.  The return value is the $md5
object itself.

=item $md5->digest

Return the binary digest for the message.

Note that the C<digest> operation is effectively a destructive,
read-once operation. Once it has been performed, the C<Digest::MD5>
object is automatically C<reset> and can be used to calculate another
digest value.

=item $md5->hexdigest

Same as $md5->digest, but will return the digest in hexadecimal form.

=item $md5->b64digest

Same as $md5->digest, but will return the digest as a base64 encoded
string.

=back


=head1 EXAMPLES

The simplest way to use this library is to import the md5_hex()
function (or one of its cousins):

    use Digest::MD5 qw(md5_hex);
    print "Digest is ", md5_hex("foobarbaz"), "\n";

The above example would print out the message

    Digest is 6df23dc03f9b54cc38a0fc1483df6e21

provided that the implementation is working correctly.  The same
checksum can also be calculated in OO style:

    use Digest::MD5;
    
    $md5 = Digest::MD5->new;
    $md5->add('foo', 'bar');
    $md5->add('baz');
    $digest = $md5->hexdigest;
    
    print "Digest is $digest\n";

With OO style you can break the message arbitrary.  This means that we
are no longer limited to have space for the whole message in memory, i.e.
we can handle messages of any size.

This is useful when calculating checksum for files:

    use Digest::MD5;

    my $file = shift || "/etc/passwd";
    open(FILE, $file) or die "Can't open '$file': $!";
    binmode(FILE);

    $md5 = Digest::MD5->new;
    while (<FILE>) {
        $md5->add($_);
    }
    close(FILE);
    print $md5->b64digest, " $file\n";

Or we can use the builtin addfile method for more efficient reading of
the file:

    use Digest::MD5;

    my $file = shift || "/etc/passwd";
    open(FILE, $file) or die "Can't open '$file': $!";
    binmode(FILE);

    print Digest::MD5->new->addfile(*FILE)->hexdigest, " $file\n";

=head1 SEE ALSO

L<Digest>,
L<Digest::MD2>,
L<Digest::SHA1>,
L<Digest::HMAC>

L<md5sum(1)>

RFC 1321

=head1 COPYRIGHT

This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

 Copyright 1998-2000 Gisle Aas.
 Copyright 1995-1996 Neil Winton.
 Copyright 1991-1992 RSA Data Security, Inc.

The MD5 algorithm is defined in RFC 1321. The basic C code
implementing the algorithm is derived from that in the RFC and is
covered by the following copyright:

=over 4

=item

Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.

License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.

License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.

RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.

These notices must be retained in any copies of any part of this
documentation and/or software.

=back

This copyright does not prohibit distribution of any version of Perl
containing this extension under the terms of the GNU or Artistic
licenses.

=head1 AUTHORS

The original MD5 interface was written by Neil Winton
(C<N.Winton@axion.bt.co.uk>).

This release was made by Gisle Aas <gisle@aas.no>

=cut
. kêPï )c $�          �	  á}·:…V7ÔÎž:!         ¾æ  �	      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC.pm 1             ó/      $�          package Digest::HMAC;
$VERSION = "1.00";

use strict;

# OO interface

sub new
{
    my($class, $key, $hasher, $block_size) =  @_;
    $block_size ||= 64;
    $key = $hasher->new->add($key)->digest if length($key) > $block_size;

    my $self = bless {}, $class;
    $self->{k_ipad} = $key ^ (chr(0x36) x $block_size);
    $self->{k_opad} = $key ^ (chr(0x5c) x $block_size);
    $self->{hasher} = $hasher->new->add($self->{k_ipad});
    $self;
}

sub reset
{
    my $self = shift;
    $self->{hasher}->reset->add($self->{k_ipad});
    $self;
}

sub add     { my $self = shift; $self->{hasher}->add(@_);     $self; }
sub addfile { my $self = shift; $self->{hasher}->addfile(@_); $self; }

sub _digest
{
    my $self = shift;
    my $inner_digest = $self->{hasher}->digest;
    $self->{hasher}->reset->add($self->{k_opad}, $inner_digest);
}

sub digest    { shift->_digest->digest;    }
sub hexdigest { shift->_digest->hexdigest; }
sub b64digest { shift->_digest->b64digest; }


# Functional interface

require Exporter;
*import = \&Exporter::import;
use vars qw(@EXPORT_OK);
@EXPORT_OK = qw(hmac hmac_hex);

sub hmac
{
    my($data, $key, $hash_func, $block_size) = @_;
    $block_size ||= 64;
    $key = &$hash_func($key) if length($key) > $block_size;

    my $k_ipad = $key ^ (chr(0x36) x $block_size);
    my $k_opad = $key ^ (chr(0x5c) x $block_size);

    &$hash_func($k_opad, &$hash_func($k_ipad, $data));
}

sub hmac_hex { unpack("H*", &hmac); }

1;

__END__

=head1 NAME

Digest::HMAC - Keyed-Hashing for Message Authentication

=head1 SYNOPSIS

 # Functional style
 use Digest::HMAC qw(hmac hmac_hex);
 $digest = hmac($data, $key, \&myhash);
 print hmac_hex($data, $key, \&myhash);

 # OO style
 use Digest::HMAC;
 $hmac = Digest::HMAC->new($key, "Digest::MyHash");

 $hmac->add($data);
 $hmac->addfile(*FILE);

 $digest = $hmac->digest;
 $digest = $hmac->hexdigest;
 $digest = $hmac->b64digest;

=head1 DESCRIPTION

HMAC is used for message integrity checks between two parties that
share a secret key, and works in combination with some other Digest
algorithm, usually MD5 or SHA-1.  The HMAC mechanism is described in
RFC 2104.

HMAC follow the common C<Digest::> interface, but the constructor
takes the secret key and the name of some other simple C<Digest::>
as argument.

=head1 SEE ALSO

L<Digest::HMAC_MD5>, L<Digest::HMAC_SHA1>

RFC 2104

=head1 AUTHORS

Graham Barr <gbarr@ti.com>, Gisle Aas <gisle@aas.no>

=cut
f a newkê/ *c $�          m  á}·:œV7ÔÎž:!      0  ýæ  m      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_SHA1.pm 1.bs             ó/      $�          package Digest::HMAC_SHA1;
$VERSION="1.00";

use strict;
use Digest::SHA1 qw(sha1);
use Digest::HMAC qw(hmac);

# OO interface
use vars qw(@ISA);
@ISA=qw(Digest::HMAC);
sub new
{
    my $class = shift;
    $class->SUPER::new($_[0], "Digest::SHA1", 64);
}

# Functional interface
require Exporter;
*import = \&Exporter::import;
use vars qw(@EXPORT_OK);
@EXPORT_OK=qw(hmac_sha1 hmac_sha1_hex);

sub hmac_sha1
{
    hmac($_[0], $_[1], \&sha1, 64);
}

sub hmac_sha1_hex
{
    unpack("H*", &hmac_sha1)
}

1;

__END__

=head1 NAME

Digest::HMAC_SHA1 - Keyed-Hashing for Message Authentication

=head1 SYNOPSIS

 # Functional style
 use Digest::HMAC_SHA1 qw(hmac_sha1 hmac_sha1_hex);
 $digest = hmac_sha1($data, $key);
 print hmac_sha1_hex($data, $key);

 # OO style
 use Digest::HMAC_SHA1;
 $hmac = Digest::HMAC_SHA1->new($key);

 $hmac->add($data);
 $hmac->addfile(*FILE);

 $digest = $hmac->digest;
 $digest = $hmac->hexdigest;
 $digest = $hmac->b64digest;

=head1 DESCRIPTION

This module provide HMAC-SHA-1 hashing.

=head1 SEE ALSO

L<Digest::HMAC>, L<Digest::SHA1>, L<Digest::HMAC_MD5>

=head1 AUTHOR

Gisle Aas <gisle@aas.no>

=cut
keykê¦M +c $�          Z  á}·:ŠV7ÕÎž:!      0  þæ  Z      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/HMAC_MD5.pm  1.bs             ó/      $�          package Digest::HMAC_MD5;
$VERSION="1.00";

use strict;
use Digest::MD5  qw(md5);
use Digest::HMAC qw(hmac);

# OO interface
use vars qw(@ISA);
@ISA=qw(Digest::HMAC);
sub new
{
    my $class = shift;
    $class->SUPER::new($_[0], "Digest::MD5", 64);
}

# Functional interface
require Exporter;
*import = \&Exporter::import;
use vars qw(@EXPORT_OK);
@EXPORT_OK=qw(hmac_md5 hmac_md5_hex);

sub hmac_md5
{
    hmac($_[0], $_[1], \&md5, 64);
}

sub hmac_md5_hex
{
    unpack("H*", &hmac_md5)
}

1;

__END__

=head1 NAME

Digest::HMAC_MD5 - Keyed-Hashing for Message Authentication

=head1 SYNOPSIS

 # Functional style
 use Digest::HMAC_MD5 qw(hmac_md5 hmac_md5_hex);
 $digest = hmac_md5($data, $key);
 print hmac_md5_hex($data, $key);

 # OO style
 use Digest::HMAC_MD5;
 $hmac = Digest::HMAC_MD5->new($key);

 $hmac->add($data);
 $hmac->addfile(*FILE);

 $digest = $hmac->digest;
 $digest = $hmac->hexdigest;
 $digest = $hmac->b64digest;

=head1 DESCRIPTION

This module provide HMAC-MD5 hashing.

=head1 SEE ALSO

L<Digest::HMAC>, L<Digest::MD5>, L<Digest::HMAC_SHA1>

=head1 AUTHOR

Gisle Aas <gisle@aas.no>

=cut
isle@akêÖ“ ,c $�          v  á}·:á%Æ9ÕÎž:!      0  ÿæ  v      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD2.pm 5.             ó/      $�          package Digest::MD2;

use strict;
use vars qw($VERSION @ISA @EXPORT_OK);

$VERSION = '1.01';  # $Date: 2000/09/18 14:25:37 $

require Exporter;
*import = \&Exporter::import;
@EXPORT_OK = qw(md2 md2_hex md2_base64);

require DynaLoader;
@ISA=qw(DynaLoader);
Digest::MD2->bootstrap($VERSION);

*reset = \&new;

1;
__END__

=head1 NAME

Digest::MD2 - Perl interface to the MD2 Algorithm

=head1 SYNOPSIS

 # Functional style
 use Digest::MD2  qw(md2 md2_hex md2_base64);

 $digest = md2($data);
 $digest = md2_hex($data);
 $digest = md2_base64($data);

 # OO style
 use Digest::MD2;

 $ctx = Digest::MD2->new;

 $ctx->add($data);
 $ctx->addfile(*FILE);

 $digest = $ctx->digest;
 $digest = $ctx->hexdigest;
 $digest = $ctx->b64digest;

=head1 DESCRIPTION

The C<Digest::MD2> module allows you to use the RSA Data Security
Inc. MD2 Message Digest algorithm from within Perl programs.  The
algorithm takes as input a message of arbitrary length and produces as
output a 128-bit "fingerprint" or "message digest" of the input.

The C<Digest::MD2> programming interface is identical to the interface
of C<Digest::MD5>.

=head1 SEE ALSO

L<Digest::MD5>

=head1 COPYRIGHT

This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

 Copyright 1998-2000 Gisle Aas.
 Copyright 1990-1992 RSA Data Security, Inc.

=head1 AUTHOR

Gisle Aas <gisle@aas.no>

=cut
pakêÐ¤ -c $�          w
  á}·:&Æ9ÕÎž:!         ~ç  w
      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/SHA1.pm .             ó/      $�          package Digest::SHA1;

use strict;
use vars qw($VERSION @ISA @EXPORT_OK);

$VERSION = '1.03';  # $Date: 2000/09/18 14:26:23 $

require Exporter;
*import = \&Exporter::import;
@EXPORT_OK = qw(sha1 sha1_hex sha1_base64);

require DynaLoader;
@ISA=qw(DynaLoader);
Digest::SHA1->bootstrap($VERSION);

*reset = \&new;

1;
__END__

=head1 NAME

Digest::SHA1 - Perl interface to the SHA-1 Algorithm

=head1 SYNOPSIS

 # Functional style
 use Digest::SHA1  qw(sha1 sha1_hex sha1_base64);

 $digest = sha1($data);
 $digest = sha1_hex($data);
 $digest = sha1_base64($data);


 # OO style
 use Digest::SHA1;

 $ctx = Digest::SHA1->new;

 $ctx->add($data);
 $ctx->addfile(*FILE);

 $digest = $ctx->digest;
 $digest = $ctx->hexdigest;
 $digest = $ctx->b64digest;

=head1 DESCRIPTION

The C<Digest::SHA1> module allows you to use the NIST SHA-1 message
digest algorithm from within Perl programs.  The algorithm takes as
input a message of arbitrary length and produces as output a 160-bit
"fingerprint" or "message digest" of the input.

The C<Digest::SHA1> module provide a procedural interface for simple
use, as well as an object oriented interface that can handle messages
of arbitrary length and which can read files directly.

A binary digest will be 20 bytes long.  A hex digest will be 40
characters long.  A base64 digest will be 27 characters long.


=head1 FUNCTIONS

The following functions can be exported from the C<Digest::SHA1>
module.  No functions are exported by default.

=over 4

=item sha1($data,...)

This function will concatenate all arguments, calculate the SHA-1
digest of this "message", and return it in binary form.

=item sha1_hex($data,...)

Same as sha1(), but will return the digest in hexadecimal form.

=item sha1_base64($data,...)

Same as sha1(), but will return the digest as a base64 encoded string.

=back

=head1 METHODS

The C<Digest::SHA1> module provide the standard C<Digest> OO-interface.
The constructor looks like this:

=over 4

=item $sha1 = Digest->new('SHA-1')

=item $sha1 = Digest::SHA1->new

The constructor returns a new C<Digest::SHA1> object which encapsulate
the state of the SHA-1 message-digest algorithm.  You can add data to
the object and finally ask for the digest using the methods described
in L<Digest>.

=back

=head1 SEE ALSO

L<Digest>, L<Digest::HMAC_SHA1>, L<Digest::MD5>

http://www.itl.nist.gov/fipspubs/fip180-1.htm

=head1 COPYRIGHT

This library is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

 Copyright 1999-2000 Gisle Aas.
 Copyright 1997 Uwe Hollerbach.

=head1 AUTHORS

Peter C. Gutmann,
Uwe Hollerbach <uh@alumni.caltech.edu>,
Gisle Aas <gisle@aas.no>

=cut
ekê‘ ›¤ $�          }  á}·:�ª7ÕÎž:!      #  8k  }      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest.pm 1.pm .             ó/      $�          package Digest;

use strict;
use vars qw($VERSION %MMAP $AUTOLOAD);

$VERSION = "0.02";

%MMAP = (
  "SHA-1"      => "Digest::SHA1",
  "HMAC-MD5"   => "Digest::HMAC_MD5",
  "HMAC-SHA-1" => "Digest::HMAC_SHA1",
);

sub new
{
    shift;  # class ignored
    my $algorithm = shift;
    my $class = $MMAP{$algorithm} || "Digest::$algorithm";
    no strict 'refs';
    unless (exists ${"$class\::"}{"VERSION"}) {
	eval "require $class";
	die $@ if $@;
    }
    $class->new(@_);
}

sub AUTOLOAD
{
    my $class = shift;
    my $algorithm = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
    $class->new($algorithm, @_);
}

1;

__END__

=head1 NAME

Digest:: - Modules that calculate message digests

=head1 SYNOPSIS

  $md2 = Digest->MD2;
  $md5 = Digest->MD5;

  $sha1 = Digest->SHA1;
  $sha1 = Digest->new("SHA-1");

  $hmac = Digest->HMAC_MD5($key);

=head1 DESCRIPTION

The C<Digest::> modules calculate digests, also called "fingerprints"
or "hashes", of some data, called a message.  The digest is some small
fixed size string.  The actual size of the digest depend of the
algorithm used.  The message is simply a sequence of arbitrary bytes.

An important property of the digest algorithms is that the digest is
I<likely> to change if the message change in some way.  Another
property is that digest functions are one-way functions, i.e. it
should be I<hard> to find a message that correspond to some given
digest.  Algorithms differ in how "likely" and how "hard", as well as
how efficient they are to compute.

All C<Digest::> modules provide the same programming interface.  A
functional interface for simple use, as well as an object oriented
interface that can handle messages of arbitrary length and which can
read files directly.

The digest can be delivered in three formats:

=over 8

=item I<binary>

This is the most compact form, but it is not well suited for printing
or embedding in places that can't handle arbitrary data.

=item I<hex>

A twice as long string of (lowercase) hexadecimal digits.

=item I<base64>

A string of portable printable characters.  This is the base64 encoded
representation of the digest with any trailing padding removed.  The
string will be about 30% longer than the binary version.
L<MIME::Base64> tells you more about this encoding.

=back


The functional interface is simply importable functions with the same
name as the algorithm.  The functions take the message as argument and
return the digest.  Example:

  use Digest::MD5 qw(md5);
  $digest = md5($message);

There are also versions of the functions with "_hex" or "_base64"
appended to the name, which returns the digest in the indicated form.

=head1 OO INTERFACE

The following methods are available for all C<Digest::> modules:

=over 4

=item $ctx = Digest->XXX($arg,...)

=item $ctx = Digest->new(XXX => $arg,...)

=item $ctx = Digest::XXX->new($arg,...)

The constructor returns some object that encapsulate the state of the
message-digest algorithm.  You can add data to the object and finally
ask for the digest.  The "XXX" should of course be replaced by the proper
name of the digest algorithm you want to use.

The two first forms are simply syntactic sugar which automatically
load the right module on first use.  The second form allow you to use
algorithm names which contains letters which are not legal perl
identifiers, e.g. "SHA-1".

If new() is called as a instance method (i.e. $ctx->new) it will just
reset the state the object to the state of a newly created object.  No
new object is created in this case, and the return value is the
reference to the object (i.e. $ctx).

=item $ctx->reset

This is just an alias for $ctx->new.

=item $ctx->add($data,...)

The $data provided as argument are appended to the message we
calculate the digest for.  The return value is the $ctx object itself.

=item $ctx->addfile($io_handle)

The $io_handle is read until EOF and the content is appended to the
message we calculate the digest for.  The return value is the $ctx
object itself.

=item $ctx->digest

Return the binary digest for the message.

Note that the C<digest> operation is effectively a destructive,
read-once operation. Once it has been performed, the $ctx object is
automatically C<reset> and can be used to calculate another digest
value.

=item $ctx->hexdigest

Same as $ctx->digest, but will return the digest in hexadecimal form.

=item $ctx->b64digest

Same as $ctx->digest, but will return the digest as a base64 encoded
string.

=back

=head1 SEE ALSO

L<Digest::MD5>, L<Digest::SHA1>, L<Digest::HMAC>, L<Digest::MD2>

L<MIME::Base64>

=head1 AUTHOR

Gisle Aas <gisle@aas.no>

The C<Digest::> interface is based on the interface originally
developed by Neil Winton for his C<MD5> module.

=cut
NAMkêˆ� œ¤ $�          ‡  â}·:¢ª7ÕÎž:!      #0   k  ‡      ./usr/opt/perl5/lib/site_perl/5.005/aix/MD5.pm p             ó/      $�          package MD5;  # legacy stuff

use strict;
use vars qw($VERSION @ISA);

$VERSION = '2.01';  # $Date: 1999/08/05 23:17:54 $

require Digest::MD5;
@ISA=qw(Digest::MD5);

sub hash    { shift->new->add(@_)->digest;    }
sub hexhash { shift->new->add(@_)->hexdigest; }

1;
__END__

=head1 NAME

MD5 - Perl interface to the MD5 Message-Digest Algorithm

=head1 SYNOPSIS

 use MD5;

 $context = new MD5;
 $context->reset();
    
 $context->add(LIST);
 $context->addfile(HANDLE);
    
 $digest = $context->digest();
 $string = $context->hexdigest();

 $digest = MD5->hash(SCALAR);
 $string = MD5->hexhash(SCALAR);

=head1 DESCRIPTION

The C<MD5> module is B<depreciated>.  Use C<Digest::MD5> instead.

The current C<MD5> module is just a wrapper around the C<Digest::MD5>
module.  It is provided so that legacy code that rely on the old
interface still work and get the speed benefit of the new module.

In addition to the methods provided for C<Digest::MD5> objects, this
module provide the class methods MD5->hash() and MD5->hexhash() that
basically do the same as the md5() and md5_hex() functions provided by
C<Digest::MD5>.

=head1 SEE ALSO

L<Digest::MD5>

=cut
okêþ �¤ $�          H  â}·:Ù¼ã6ÕÎž:!      #0  !k  H      ./usr/opt/perl5/lib/site_perl/5.005/aix/SHA.pm p             ó/      $�          package SHA;

use strict;
use vars qw($VERSION @ISA @EXPORT_OK);

$VERSION = '2.00'; # $Date: 1999/03/08 12:04:41 $

require Digest::SHA1;
@ISA=qw(Digest::SHA1);

require Exporter;
*import = *Exporter::imprt;
@EXPORT_OK=qw(sha_version);

sub hexdigest
{
    my $self = shift;
    join(" ", unpack("A8 A8 A8 A8 A8", $self->SUPER::hexdigest(@_)));
}

sub hash        { shift->new->add(@_)->digest;    }
sub hexhash     { shift->new->add(@_)->hexdigest; }
sub sha_version { "SHA-1"; }

1;

__END__

=head1 NAME

SHA - Perl interface to the NIST Secure Hash Algorithm

=head1 SYNOPSIS

    use SHA;

    $version = &SHA::sha_version;

    $context = new SHA;
    $context->reset();

    $context->add(LIST);
    $context->addfile(HANDLE);

    $digest = $context->digest();
    $string = $context->hexdigest();

    $digest = $context->hash($string);
    $string = $context->hexhash($string);

=head1 DESCRIPTION

The C<SHA> module is B<depreciated>.  Use C<Digest::SHA1> instead.

The current C<SHA> module is just a wrapper around the C<Digest::SHA1>
module.  It is provided so that legacy code that rely on the old
interface still work.  This wrapper does not support the old (and
buggy) SHA-0 algorithm.

In addition to the methods provided by C<Digest::SHA1> this module
provide the class methods SHA->hash() and SHA->hexhash() that
basically do the same as the sha1() and sha1_hex() functions provided
C<Digest::SHA1>.

The SHA->hex* methods will insert spaces between groups of 8 hex
characters, while the Digest::SHA1 version of the same methods will not
do this.

=head1 SEE ALSO

L<Digest::SHA1>

=cut

kê$( {¤ íA           â}·:ÒÎž:ÓÎž:!      #0  ±j         ./usr/local rl5/             ó/      íA         
kê¤D |¤ íA             â}·:ÒÎž:ÒÎž:!      #0  ²j         ./usr/local/man              ó/      íA         kê`¢ }¤ íA             â}·:ÒÎž:ÒÎž:!      #0  Øj         ./usr/local/man/man3 ite             ó/      íA         
kêôÇ [g íA             â}·:ÓÎž:ÓÎž:!      0  ´ç         ./usr/local/lib              ó/      íA         kêä Æ íA             â}·:ÓÎž:ÓÎž:!      0  U¬         ./usr/local/lib/MD5-2.12 perl/5.             ó/      íA         kêöÚ ‚ íA             â}·:ÓÎž:ÓÎž:!      0  +         ./usr/local/lib/MD5-2.12/examples 5/aix/             ó/      íA         kêú b§ íA             â}·:ÓÎž:ÓÎž:!      0  tk         ./usr/local/lib/MD5-2.12/t ample             ó/      íA         
kêXq �¤ íA             â}·:ÔÎž:ÕÎž:!      #0  Ýj         ./usr/opt/perl5              ó/      íA         kêTÍ Ž¤ íA             â}·:ÔÎž:ÕÎž:!      #0  Þj         ./usr/opt/perl5/lib 2.12             ó/      íA         kêŒ¤ �¤ íA             â}·:ÔÎž:ÕÎž:!      #0  ßj         ./usr/opt/perl5/lib/site_perl le             ó/      íA         kê¨& �¤ íA             â}·:ÔÎž:ÕÎž:!      #0  àj         ./usr/opt/perl5/lib/site_perl/5.005 aix/             ó/      íA         kê¤5 ‘¤ íA             â}·:ÕÎž:ÕÎž:!      #0  áj         ./usr/opt/perl5/lib/site_perl/5.005/aix              ó/      íA         kêÊ– ’¤ íA             ã}·:ÔÎž:ÔÎž:!      #0  âj         ./usr/opt/perl5/lib/site_perl/5.005/aix/auto m p             ó/      íA         kê< “¤ íA             ã}·:ÔÎž:ÔÎž:!      #0  ãj         ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest pm .             ó/      íA         kêô( ”¤ íA             ã}·:ÔÎž:ÔÎž:!      #0  k         ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD5              ó/      íA         kêT& ˜¤ íA             ã}·:ÔÎž:ÔÎž:!      #0  k         ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2              ó/      íA         kê"× \g íA             ã}·:ÔÎž:ÔÎž:!      0  µç         ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1 m  1.bs             ó/      íA         kê89 'c íA             ã}·:ÕÎž:ÕÎž:!      0  ä         ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest g             ó/      íA         kêŠ
          q                   
             |                   
             Š                   
             š                   
             ¦                   
             ²                   
             Â                   
             Î                   
             ã                   
             õ                   
                               
      TOC          k                fread        k                           k                            k                      +  $   k                      9  (   k               _$STATIC  ,   k                      Â  0   k                      Z  4   k                       8   k                      O  <   k                       @   k                      q  D   k                     &  H   k                     =  L   k                     P  P   k                     g  T   k                     }  X   k                      E  \   k                      š  `   k                      |  d   k                      Š  h   k                      ã  l   k                      õ  p   k                      d  t   k                      ²  x   k                      Î  |   k                      ¦  €   k                         „   k                         cÿþùg strcmp.s   fÿþg .strcmp    @     0      )       moveeq.s   qÿþg .bcopy    €     ×      )       .ovbcopy  €      g             ._moveeq         g             .memcpy          g             .memmove         g             .file      §ÿþ gMD2.c                   �               ª                   X   k  @                   ×  X      u                   é  d      u                   ý  ¤      u                     ”      u                   ,  	¼      u                   @        u                   X  ¼      u                   l     k   u                   |  À   k   u             .hex_16   t   k   u                   ‡  à   k   u                   ”  |   k   u                   ž     k   u                   ©     k   u             .MD2Init  h   k   u                       È   k                _$STATIC       k  Ä                  Ø  Ä            
              Ð            
            &  Ü            
            =  è            
            P  ô            
            g               
            }              
      glink.s    ¬ÿþg .fread         k   (            .fread            ¨            glink.s    ±ÿþg       ·  ˜   k   (                  ·  ˜      ­            glink.s    ¶ÿþg       Ä  À   k   (                  Ä  À      ²            glink.s    »ÿþg       Ï  è   k   (                  Ï  è      ·            glink.s    Àÿþg       Ü     k   (                  Ü        ¼            glink.s    Åÿþg       è  8   k   (                  è  8      Á            glink.s    Êÿþg       ô  `   k   (                  ô  `      Æ            glink.s    Ïÿþg         ˆ   k   (                    ˆ      Ë            glink.s    Ôÿþg         °   k   (                    °      Ð            glink.s    Ùÿþg       !  Ø   k   (                  !  Ø      Õ            glink.s    Þÿþg       4      k   (                  4         Ú            glink.s    ãÿþg       G  (   k   (                  G  (      ß            glink.s    èÿþg       U  P   k   (                  U  P      ä            glink.s    íÿþg       f  x   k   (                  f  x      é            glink.s ÿÿÿÿÿþg       |      k   (                  |         î              ‰_system_configuration PL_markstack_ptr PL_stack_base PL_stack_sp PL_sv_yes Perl_croak Perl_form Perl_newSVpv Perl_newXS Perl_safefree Perl_safemalloc Perl_sv_2io Perl_sv_2iv Perl_sv_2mortal Perl_sv_2pv Perl_sv_derived_from Perl_sv_newmortal Perl_sv_setref_pv perl_get_sv XS_Digest__MD2_new XS_Digest__MD2_DESTROY XS_Digest__MD2_add XS_Digest__MD2_addfile XS_Digest__MD2_digest XS_Digest__MD2_md2 Wed Nov 29 14:24:24 2000  IBM C and C++ Compilers Version 3.6.6.3 ---  .boot_Digest__MD2 .XS_Digest__MD2_md2 .XS_Digest__MD2_digest .XS_Digest__MD2_addfile .XS_Digest__MD2_add .XS_Digest__MD2_DESTROY .XS_Digest__MD2_new .make_mortal_sv .base64_16 .get_md2_ctx .MD2Final .MD2Update .MD2Transform .Perl_sv_2pv .Perl_form .perl_get_sv .Perl_croak .Perl_newXS .Perl_sv_2io .Perl_safefree .Perl_safemalloc .Perl_sv_newmortal .Perl_sv_setref_pv .Perl_newSVpv .Perl_sv_2mortal .Perl_sv_derived_from .Perl_sv_2iv   kkê¶Ã š¤ $�              á}·:�%:ÔÎž:!                      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/MD2/MD2.bs s             ó/      $�          kê_ ]g m�          HJ  á}·:¢%:ÔÎž:!        €î  HJ      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.so                     ó/      m�          ß :%¢  5h   õ H0   %   ¤    ÿÿÿÿ          4         RE                      .text             %   @  /‚     k      .data             ¤  &@  3°     ,     @.bss      ¤  ¤                       €.loader           ž  )ä                                                                                   �‚  �A €  €L |	¦N€               ( |¦+x|§+x|¨+xA� |�¦| *N€  T€Ù|©+x|ª+x|«+x|¬+xA‚ÿà|	¦8   |¦T„þ| *0c  B ÿøKÿÿÀ      @       X _fill         �b �‹ 8  qŒ A‚ ´|¦| +|à"*A‚ H|…8@@@@† |Aš L˜  H  p|£+|ä*A‚ $0  |…8@@@|£+@† P@š D|ä*@‚ÿä|¦,     T øA� |¥0|ç0|…8@H  |…8@|Æ0}0@@@† L˜  A† A… 8`ÿÿN€  8` N€  8`  N€  8cÿÿ8„ÿÿˆ£ ˆÄ ,  |…0@A‚ Œ£ @† ŒÄ ,  |…0@KÿÿèA† A… 8`ÿÿN€  8`  N€  8` N€        @       strcmp                |fx|ƒ#x|Ä3x`   `   `   `   `   �b T Ù�‹ @�qŒ @¢|ƒ @M†  A„ |*|€@A… Œpi A‚ <8„ÿÿ8Ãÿÿ!) })¦Œä œæ B ÿø|©(8„ÿý8Æÿýp¨ T¥èþ|©¦H  p¨ T¥èþ|©¦8„ÿü8Ãÿü„ä …$ ”æ •& B ÿðM‚  }	¦8„ 8Æ Œä œæ B ÿøN€  |Ã*|ä*pÈ A‚ }	¦�'ÿÿ�&ÿÿB ÿø|¨(p¨ T¥èþ|©¦…'ÿü…Gÿü•&ÿü•FÿüB ÿðM‚  }	¦�'ÿÿ�&ÿÿB ÿøN€  |¡¦| $*| *N€  |„@@„ }D(|ƒP@|	¦8   |¦T ÿ�a |dA„ (| $*|£%*0„  B ÿô|¦| $*|£%*€a N€  |„(0„ÿà| $*|£%*B ÿô|€ |¦| $*|£%*€a N€        @      À bcopy €b |¦¿ÿà€ƒ  � ƒâ ƒÂ €  8„ÿü�ƒ  €Þ  T :€¿  |p|c””!ÿ�|| 0ƒ¢ |pZ”8 T:|eÈ.;€  8� @;`  € €Ã  t  A‚ 0€ � @|eÈ.€c  ƒ  ,š c  8} \€  A„ 4H  $H Q€A `x  ,š c  8} \€  A„ |`ÊƒC H  `;} dce  H E€A 8€  H a€A |zyc  A‚ € t ,€  @† (8} p;} xce  H 	€A 8€  H %€A `z  ,  A‚ œ€ €º  cC  8� @tt  ,†  A† <A‚ € � @€z  €ƒ  H  H ‰€A `d  8} €Kÿûi`   ,ƒ  A† D,  8½ °8}°c  cJ  8Ý ˆc  9 ”@‚ 8ý �8Ý Œ9 ˜;} œci  H ©€A €‚ (8} ¸8½ TH ½€A €‚ 08} Ì8½ TH ©€A €‚ 48} ä8½ TH •€A €‚ 88} ø8½ TH �€A 8}8½ T€‚ <H m€A €£  ;` 8}(€‚ <“e 08½ TH M€A €£  ;@ 8}@€‚ <“E 08½ TH -€A €ƒ  8}X8½ T“„ 0€‚ @H €A €Ã  8}l€‚ @8½ T“† 0H õ€A €Ã  €‚ @8}ˆ8½ T“f 0H Ù€A €c  € D“C 0€  |É.€  | Ê�  �� x8! p»ÿà}ˆ¦N€         €    ü€‚ |¦¿Aÿè€¤  ƒÂ � ”!ÿ0ƒâ €å  €Þ  8¥ÿü€  �¤  Tå:€ƒ  | *| 0|¥p|¥”|	p})•8a X;¥ ƒD 0H ÑU#:W¼:8ÿü8� @|€ß  @� p|fà.€ €£  t  A‚ €¥ �¡ @|fà.€c  €ƒ  H  H A€A `d  €¡ @8a XH 
1€ß  |Ø ;œ 8� @@€ |fà.€ €£  t  Kÿÿ¨8� X8a DH %8a DcD  H ¥�� Ø€Ÿ  W¥:8! Ð}ˆ¦|d).€  | *�  »AÿèN€         €    0|¦€¢ ¿�ÿð€å  ƒâ €Â � ƒÂ �  €Ÿ  8çÿü�å  €  €£  8f @U:”!ÿ�|Ä:| | p| ”|æp|Æ”;¦ ,  ƒ… 0A‚ €… 4€„  €„ $H ­€A €Ÿ  W½:|dè.H ±�a X``  8a @`  H 9€a XH 
I8a @c„  H ±€Ÿ  |dé.€  | ê�  �� x8! p»�ÿð}ˆ¦N€         €     à|¦€¢ ¿�ÿð€Å  ƒâ €b � ƒÂ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ï |¤2| | p| ”|Åp|¥”8cˆ,  ;¥ A‚ H Ñ€A €Ÿ  W¼:|dâ€c ¤à.H €A €ƒ  c£  ƒ¤  H ¹,  �aD8a @8€ 8  c¦  A‚ HKÿöY€A |ey€aD8� @A‚ 0H õ8a @8€ 8  c¦  Kÿö-€A |ey€aD8� @@‚ÿØ€  | â�  ��h8!`»�ÿð}ˆ¦N€         €    |¦€¢ ¿aÿì€Å  }€ &ƒâ €b ƒÂ €æ  8Æÿü� €Ÿ  �Å  €  Tå:|Ä*|¥p|¥”| |pœ•‘� . ”!ÿ ;¥ 8cdA� H ¡€A €Ÿ  W½:|dè.H ¥€ß  �a H@‘ „;} W…:|fØ.8¥ÿü�*8� @€ €£  t  A‚ €¥ �¡ @|fØ.€c  €ƒ  H  H Å€A `d  €¡ @€a HH µ€ß  |à ;{ 8� @@€ |fØ.€ €£  t  Kÿÿ¨€  | ê�  �� d€ h8! `|¦}€� »aÿìN€         €    8|¦€¢ ¿¡ÿô€Å  ƒâ €b � ƒ¢ €æ  8Æÿü€Ÿ  �Å  €  Tæ:”!ÿ°|¤2| | p| ”|Åp|¥”8c<,  ;Å A‚ H a€A €Ÿ  WÞ:|dð.H eH Á€A €  |`ò8ÿü�  �� X8! P»¡ÿô}ˆ¦N€         €     ¨|¦€‚ ¿aÿì€Ä  ƒâ €b � ƒb €æ  8Æÿü€¿  �Ä  €  Tæ:”!ÿ |…2| | p| ”|Äp|„”8c,  ;Ä A‚ H ©€A €¿  8� @WÞ:|eð.€ €£  T ‡>|  Aœ €@� € � @€c  ƒ£  H  H í€A `}  8` `H õ€A `|  H €A €ß  c¤  c…  |fñ.€  |cð.H €A €  |cð.€c  €c  € d  €� H  H `|  cƒ  H Á€  | ò�  �� h8! `»aÿì}ˆ¦N€         €    <|¦,  ¿Áÿø� ,„ / ”!ÿ€A‚ 0€¢ A† 4Aš D8e $H ‘€A cã  cÄ  H ™€A H  D;À `  H  (8� @H `  ;À (H  8� @H  I`  ;À cã  cÄ  H U€A H u€A �� ˆ8! €»Áÿø}ˆ¦N€         €     ¨8Ã 8 €¢ | @`†  €¥ ‰#  9f ah  ˆã U*ð¾U)¾}EP®Tëç>Q+ 6Té>™F  }EX®9f ™F A‚ 8ˆã 8c 9 | @Tè×¾Tç¾Q(:}@®™ |å8®˜æ 8Æ Kÿÿ”8   Tãº|¥®`ƒ  ˜¨  ˜  N€                 ¤8 | @`…  €Â 8  8cÿÿ€æ¤@€ 0|	¦ˆ Tá>|0®˜  Œ T>|0®˜ 8¥ B ÿÜ8   `ƒ  ˜  N€                 \¿Áÿø|¦ƒâ `~  � ”!ÿÀcä  H 5€A ,  8¨A‚ @€ž  €d  € €ƒ  t  A‚ €d �� H8! @»Áÿø}ˆ¦N€  H €A H  H }€A 8`  �� H8! @»Áÿø}ˆ¦N€         €     Œ¿�ÿð`Ÿ  |¦ƒß 8à €� ƒŸ WÆî¾`}  8 |¿2,  8˜å 8 ”!ÿ° † ?|8   @� DKÿð`   cã  H !8 �‚ l8Ÿ 8|¬äª|£åª|¤åªW€F>W…„>W†Â>WÇF>WÈ„>H  $ † 7Kÿï½`   W€F>W…„>W†Â>WÇF>WÈ„>WÉÂ>˜ T˜¿ U˜ß V›Ÿ W˜ÿ X™ Y™? Z›ß [cã  H ¥€  T F>˜  €  T „>˜ €  T Â>˜ €  ˜ € T F>˜ € T „>˜ € T Â>˜ € ˜ € T F>˜ € T „>˜ 	€ T Â>˜ 
€ ˜ € T F>˜ € T „>˜ € T Â>˜ € ˜ € T F>˜ € T „>˜ € T Â>˜ € ˜ �� X8! P»�ÿð}ˆ¦N€         €    È¿aÿì|¦`¾  `  € \� € WÆ8€¿ #ƒ @|À2| @,ƒ  ð ”!ÿ°`�  8¥ �ß WÀ~|@€ �¿ 8c €¿ |� A† <@™ cÜ  c…  KÿïÕ`   € \Üð¼êcã  | â,  @� \@‚ €H , @cã  ;Ÿ ; <8�  A€ 8|½ª|¼ª|¤ª|»ª;ÞÿÀ;½ @H  Í, @8�  cã  A€ |½ªKÿÿÔcƒ  c¤  cÅ  KÿïQ`   “ß \�� X8! P»aÿì}ˆ¦N€  �� X8! P»�ÿð}ˆ¦N€         €    08   <€gE< ïÎ<À˜»= 2<àÃÓ8„#8¥«‰8ÆÜþ9Tv8çáð�ƒ  �£ �Ã �ã ‘ � � � \N€                 P8  ?€ ¿¡ÿô”!þp� @8� |€  � D€ $� H€ (� L€ ,� P€ 0� T€ 4� X€ 8� \€ <|©¦� `€ @� @� d€ D€Á `� h€ H� l€ L� p€ P� t€ T� x€ X€¡ t� |€ H|¦2x|Àx€¤ÿü|Bx€Äÿè€ÿÐTç>�ÿÈ”ä |¦2xB ÿÜ|Àx| BxT >” €  €ã €£ €ƒ �C |¦88T	(>|ˆ(xT¥ð>|ÈCx€Á @}	B}R|
(8|È2|ë x<ÆZ‚�� D�! H9y™}J[xTð>U(>}KR|„R|Œ"}
08<„Z‚|«@x}J[x8„y™T‹(>Uð>}KR|çR|é:}
 8<çZ‚|Ë x�� L�! P}J[x8çy™Të(>T„ð>}KR|¥R|¬*|ê 8<¥Z‚}8x}J[x8¥y™T«(>Tçð>}KR|ÆR|É2|ª88<ÆZ‚|‹(x�� T�! X}J[x8Æy™TË(>T¥ð>}KR}R}B|Ê(8=Z‚|ë0x}J[x9y™U(>TÆð>}KR|Š"|„J}
08<„Z‚|«@x�� \�! `}J[x8„y™T‹(>Uð>}KR|çR|ì:|Š@8<çZ‚|Ë x}J[x8çy™Të(>T„ð>}KR|¥R|©*|Š88<¥Z‚}8x�� d�! h}J[x8¥y™T«(>Tçð>}KR|ÆR|Ì2|ª88<ÆZ‚|‹(x}J[x8Æy™TË(>T¥ð>}KR}R}	B|Ê(8=Z‚|ë0x�� l�! p}J[x9y™U(>TÆð>}KR|„R|Œ"}
08<„Z‚|«@x}J[x8„y™T‹(>Uð>}KR|ê:|çJ|Š@8<çZ‚|Ë x�� t9'y™€á x}J[xU+(>T„ð>}KR|¥R|¬*}* 8<¥Z‚}Hx}J[x8¥y™T«(>U)ð>}KR|ÆR|Ç2}*(8<ÆZ‚|‹(x�� |8æy™€Á €}J[xTë(>T¥ð>}KR}R}B|ê(8=Z‚}+8x}J[x9y™U(>Tçð>}KR|„R|†"}
88<„Z‚|«@x�� „€Á ˆ}J[x8„y™T‹(>Uð>}KR})R},J|Š@8=)Z‚|ë x}J[x9)y™U+(>T„ð>}KR|ª*|¥2}* 8<¥Z‚}Hx€Á �;åy™�� ŒU)ð>Wþ(>}J[x}^RëJx|çR|ŠZx|ì:€¡ ”=gZ‚Wçð>9ky™Ul(>|ÿZx}LR}R}B}>úx€Á ˜=ˆnÚUhð>9lë¡Ul(>}Bx}Œò|„b|…"Ueð><„nÚ|ìúx8„ë¡�A œT‹(>|Ÿ*x}kb})Z|ÆJ}úx<ÆnÚT„ð>;Æë¡�!  €Á ¤Wß(>}Z|çZ|ê:Ì"x|«bx=GnÚ9Jë¡WÇð>}_:xUL(>}lZ}Z}	B|‹úx=nÚ�! ¨9ˆë¡UHð>UŠ(>ƒÁ ¬}JZ|¥R|¦*}†Bx|ê2x<¥nÚ8Åë¡U…ð>|¬2xTË(>}KR|„R}
bx|‰"=$nÚTÄð>9ië¡�! °Ul(>}"x€Á ´}LR|çR|þ:|ªúx=‡nÚUgð>9lë¡Ul(>}:x}LR}R}	B|Šúx=(nÚUhð>9‰ë¡�! ¸U‹(>ƒÁ ¼}KR|¥R|¦*}†Bx|ê2x<¥nÚ8Åë¡U…ð>|Ì*xTË(>}KR|„R|‰"}	bx=DnÚTÄð>9Jë¡ƒá ÀUK(>}L"x}+J|çJ|þ:€Á Ä<çnÚ|©bx9gë¡UJð>}LZxUg(>|çJ}:}BU~ð>=nÚ|‡bx9hë¡Uh(>}iòx|è:|¥:|¦*}IJx<ÅnÚUeð>8Æë¡€á È� Ì|Ì*xTË(>}+J}$J|çJÄbx='nÚTÇð>9)ë¡U&(>}+:x|†"|Š"}"|¦Zx=hnÚU)ð>9kë¡�A Ð€� ÔU(>|ß2|Þ2|Ê2}lJx|êbx=†nÚ;Ìë¡Ufð>Ì2xWË(>}KR|¥R|„*WÅð><„nÚ}*bx8„ë¡� Ø|�ð8|Ÿóx�a ÜTž(>}^R|çR|è:|¬"x|Êbx<çnÚWìð>9ë¡W§ð>U(>}_R})R}+J}`8=)nÚ|êcx9)ë¡|ŒCx�a àU?(>€á ä}_R|ž@8|ÆRUŒð>|Ë2<Æ�}*`8WËð>}H88Æ¼Ü}kSxTÊ(>T„ð>}JZ|¥R|§*}KxUð><¥��A èUkð>UŒð>8¥¼Ü}(08|ËX8}‹[x�� ìUð>T¿(>}Z|„Z|Š"}>3x<„�WÊð>|ªP88„¼ÜT‹(>}
SxëR|çú|Þ+x|ì:|Ê(8� ðWÌð><ç�|«#xU)ð>|¿ 8|Œ`8UJð>8ç¼ÜU~ð>Të(>}Jcx|Œ;x}KR})R}hJT¨ð>=k�TÆð>8«¼Ü�A ô�! ø|‹88|ýð8Wÿð>T¾(>ÿëxþúUkð>|Æú|Ê2<Æ�UŒð>|ª`88Æ¼ÜTÌ(>}SxT‹ð>|Œú|ˆ"|‰"<„��A ü|è+x|é(88„¼Ü|¿08Uð>U>ð>|É@8Tˆ(>ÉKx|¬3x}J}B}
B|Ë#xUžð>=(�T¨ð>8©¼Ü|�ð8Wÿð>Tçð>�! �A|Ì 8T¾(>Ukð>|«X8ÿëxþú|çú|Ÿ+x|é:<ç�U‰ð>|Œ(8})[xTÆð>8ç¼ÜTë(>Wÿð>}+J}(J�}*J|ª;x|«88T„ð>=)�9)¼ÜUŒð>|ÿø8UJð>}*P8U>(>}Œûx|ÿH8}žb|Æb|ìKx|È2=�Ufð>|ÆSx9¼ÜU(>�a�A|Þ2T¥ð>|„2UŒð>|‹"<„�}`8Wëð>}k3x8Ä¼ÜTÌ(>Täð>|ìZ|¥:}J*}+Cx},@8U%ð>=J�Ukð>UŒð>€á|ËX89J¼Ü}‹[x��U_(>}	08}Z|„Z}3x|‡"<„�WÇð>}G888„¼ÜT‹(>U)ð>});x€áëJ|¥ú|ÞSx|ÉP8|¬*WÌð>}K#x<¥�Uð>|Œ`8U)ð>8¥¼ÜU~ð>T«(>})cx|Œ+x}+J}J}gBUGð>=k�}_ 89K¼ÜTÆð>|‹(8� |½ð8Wÿð>U^(>ÿëxþú�!$|Æú|È2UŒð><Æ�Ukð>}H`8}lCx8Æ¼ÜTË(>T„ð>}kb|çZ�(|é:<ç�|¿Sx|¬P8Wÿð>}I3x8ç¼Ü|ßø8}K08UŒð>Tþ(>}ŒûxU)ð>}žb}„bT¤ð>|¨b<¥�Tèð>8¥¼Ü|çH8Uið>T«(>}';xUJð>|ë:|„:ƒá,��0�a4|ÿ"TÄð><Ç�|§Bx|‰:x8Æ¼ÜTÇ(>T¥ð>|çJ|ê:},:|Ê*x}Rx=)Êc€á89IÁÖTÉð>UF(>|Æb|„2|‹"}_Jx|¬úx<ÄÊc;æÁÖUDð>Wê(>|‹úx}Jb}R}B}+Zx=ˆÊcWèð>9ŒÁÖ€Á<€á@�ADUŸ(>}žBx}Z|¥Z|¦*|‹òx<ÅÊcU…ð>8ÆÁÖTÌ(>|ß*x}lZ})Z|çJ}úx<çÊcTÆð>;ÇÁÖ�!H€áLWß(>}Z|„Z|Š"Ì2x|«bx=DÊc9JÁÖWÄð>}_"xUL(>}lZ}Z}	B|Ëúx=Êc�!P9ˆÁÖUHð>UŠ(>ƒÁT}JZ|¥R|§*}‡Bx|Š:x<¥Êc8åÁÖU…ð>|¬:xTë(>}KR|ÆR}
bx|É2=&ÊcTæð>9iÁÖ�!XUl(>}2x}LR|„R|ž"€á\=„Êc|ªúxUdð>9lÁÖUl(>}"x}LR}R}	B|Êúx=(ÊcUhð>9‰ÁÖ�!`U‹(>ƒÁd}KR|¥R|§*}‡Bx|Š:x<¥Êc8åÁÖU…ð>|ì*xTë(>}KR|ÆR|É2}	bx=FÊcTæð>9JÁÖƒáhUK(>}L2x}+J|„J|ž"UIð><„Êc|«bx8„ÁÖ€álTŠ(>},"x}JZ}HR}_R|Èbx=JÊcT„ð>9ŠÁÖUŠ(>}‹"x}
B|¥B|§*}+Zx<åÊcU…ð>8çÁÖ�Ap�tTì(>}lZ|ÆZ|ÿ*x|Ê2|‹úx=FÊc;êÁÖTæð>ê2xWç(>|çZ}):}hJ|§Rx=kÊcWÿð>9kÁÖ�xU~ð>U}(>�C |ý:�!||„:|ˆ"}kúx|ÇZx<„Êc8„ÁÖ�ƒ }DRT„(>|„:|…"€ã |‰"<„Êc€£ 8„ÁÖ| "}ò|‡2|¥ú‘C ‘ �  �£ �ƒ »¡„8!�N€          €    H    �‚ �A €  €L |	¦N€               �‚ �A €  €L |	¦N€               �‚  �A €  €L |	¦N€               �‚ $�A €  €L |	¦N€               �‚ ,�A €  €L |	¦N€               �‚ H�A €  €L |	¦N€               �‚ L�A €  €L |	¦N€               �‚ P�A €  €L |	¦N€               �‚ T�A €  €L |	¦N€               �‚ X�A €  €L |	¦N€               �‚ \�A €  €L |	¦N€               �‚ `�A €  €L |	¦N€               �‚ d�A €  €L |	¦N€               �‚ h�A €  €L |	¦N€                                               Digest::SHA1    0123456789abcdef    Bad convertion type (%d)    Usage: %s(context)  SHA1.c  %s::%s  XS_VERSION  %s::%s  VERSION 1.03    $           ::      bootstrap parameter 1.03    Digest::SHA1::new   Digest::SHA1::DESTROY   Digest::SHA1::add   Digest::SHA1::addfile   Digest::SHA1::b64digest Digest::SHA1::hexdigest Digest::SHA1::digest    Digest::SHA1::sha1  Digest::SHA1::sha1_base64   Digest::SHA1::sha1_hex    Ô   Not a reference to a Digest::SHA1 object    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/    Usage: Digest::SHA1::new(xclass)    Usage: Digest::SHA1::DESTROY(context)   Usage: Digest::SHA1::add(self, ...) Usage: Digest::SHA1::addfile(self, fh)  %s object version %s does not match %s%s%s%s %_   ¸  4        4      d  4      
  4      ô  4        4      Ä  4                                              ì      ø        (                                          $à         ,   -     (  I  U             @       fread         @
                    @               -      @               =      @               K      @               W      @
               d      @
               p      @
                     @
               Œ      @
               œ      @
               ®      @
               ¼      @
               Ê      @
               Ü      @
               ê      @
                    @
                    @
              )      @
              7  à 
                  ¤       à        ä       ì        ð       ø        ü                                                     (        ,       4       8       <       @       D       H       L       P   
    T       X   	    \       `       d       h       l       p       t       x       |       €       „       ˆ       Œ       �       ”       ˜       œ              /usr/lib:/lib:/usr/local/lib    libc.a shr.o  _system_configuration  PL_markstack_ptr  PL_stack_base  PL_stack_sp  
PL_sv_yes  Perl_croak  
Perl_form  Perl_newSVpv  Perl_newXS  Perl_safefree  Perl_safemalloc  Perl_sv_2io  Perl_sv_2iv  Perl_sv_2mortal  Perl_sv_2pv  Perl_sv_derived_from  Perl_sv_newmortal  Perl_sv_setref_pv  perl_get_sv  boot_Digest__SHA1       *   (   d        g    ¢   ,  à   j      ,  º   .�  Î   0�  Ò   2�     4�  `   ²™  ”   ·™      ¼™  Ð   ·™  Ü   ¼™  (   ²™  8   g™  €   Á™  Š   >�  ”   Æ™  ž   B�  ¨   Æ™  ²   D�  ¼   Æ™  Æ   F�  Ð   Æ™  â   H�  ä   Æ™  ú   H�     Æ™     H�  $   Æ™  >   J�  @   Æ™  R   J�  \   Æ™  j   J�  x   Æ™  †   L�  Æ   .�  Ö   2�  â   0�  p   ²™  
   .�     0�     4�  "   2�  |   Á™  ú   .�  	   0�  	
   4�  	   2�  	X   Á™  	t   Ë™  	¨   ­™  	Ô   ­™  
"   .�  
2   0�  
6   4�  
:   2�  
ˆ   Á™  
ì   ²™  j   .�  v   0�  z   4�  ‚   2�  È   Á™  à   Ð™  "   .�  .   0�  2   4�  :   2�  €   Á™  Ä   ²™  Ô   Õ™  à   Ú™      ß™  Š   4�  ˜   Á™  ¨   ä™  ì   ä™  ô   é™  *   4�  â   4�  J   4�  \   î™      ó™  ¬   Á™  (   d™  >   `�  l   d™  ,   n™  °   n™  "²   6  "Ú   8  #   :  #*   <  #R   @  #z   N  #¢   P  #Ê   R  #ò   T  $   V  $B   X  $j   Z  $’   \  $º   ^      š   ¤   š   à   z   ä   (   ì   †   ð   (   ø   „   ü   (      ‚      (      €      (      ~       (   (   |   ,   (   4      8       <      @      D      H   š   L      P      T   &   X      \   ž   `      d       h   ¢   l   ¤   p   ¦   t   ¨   x   
   |      €      „      ˆ   "   Œ   $   �      ”      ˜       œ          ˜                                 fread                      
                                             +                                9                                E                                O                   
             Z                   
             d                   
             q                   
             |                   
             Š                   
             š                   
             ¦                   
             ²                   
             Â                   
             Î                   
             ã                   
             õ                   
                               
      TOC       4   k                fread     4   k                        8   k                        <   k                      +  @   k                      9  D   k               _$STATIC  H   k                      Â  L   k                      Z  P   k                       T   k                      O  X   k                       \   k                      q  `   k                     '  d   k                     ?  h   k                     S  l   k                     k  p   k                     ‚  t   k                      E  x   k                      š  |   k                      |  €   k                      Š  „   k                      ã  ˆ   k                      õ  Œ   k                      d  �   k                      ²  ”   k                      Î  ˜   k                      ¦  œ   k                             k                         cÿþùg noname     fÿþg ._fill     (      o             strcmp.s   iÿþg .strcmp          0      )       moveeq.s   tÿþg .bcopy    à     ×      )       .ovbcopy  à      j             ._moveeq         j             .memcpy          j             .memmove         j             .file      ªÿþ gSHA1.c                  —               ±                   ¸   k  ø                   Þ  ¸      x                   ñ  Ä      x                           x                     ô      x                   8  
      x                   M  d      x                   f        x                   {  h   k   x                   ‹      k   x             .hex_20   Ô   k   x                   –  @   k   x                   ¤  Ü   k   x                   ¯  ´   k   x                   »  ô   k   x                   Å  T   k   x                       $à   k                _$STATIC       k  à                  ß  à            
              ì            
            '  ø            
            ?              
            S              
            k              
            ‚  (            
      glink.s    ¯ÿþg .fread         k   (            .fread            «            glink.s    ´ÿþg       Ô  "°   k   (                  Ô  "°      °            glink.s    ¹ÿþg       á  "Ø   k   (                  á  "Ø      µ            glink.s    ¾ÿþg       ì  #    k   (                  ì  #       º            glink.s    Ãÿþg       ù  #(   k   (                  ù  #(      ¿            glink.s    Èÿþg         #P   k   (                    #P      Ä            glink.s    Íÿþg         #x   k   (                    #x      É            glink.s    Òÿþg         #    k   (                    #       Î            glink.s    ×ÿþg       -  #È   k   (                  -  #È      Ó            glink.s    Üÿþg       >  #ð   k   (                  >  #ð      Ø            glink.s    áÿþg       Q  $   k   (                  Q  $      Ý            glink.s    æÿþg       d  $@   k   (                  d  $@      â            glink.s    ëÿþg       r  $h   k   (                  r  $h      ç            glink.s    ðÿþg       ƒ  $�   k   (                  ƒ  $�      ì            glink.s ÿÿÿÿÿþg       ™  $¸   k   (                  ™  $¸      ñ              ¦_system_configuration PL_markstack_ptr PL_stack_base PL_stack_sp PL_sv_yes Perl_croak Perl_form Perl_newSVpv Perl_newXS Perl_safefree Perl_safemalloc Perl_sv_2io Perl_sv_2iv Perl_sv_2mortal Perl_sv_2pv Perl_sv_derived_from Perl_sv_newmortal Perl_sv_setref_pv perl_get_sv XS_Digest__SHA1_new XS_Digest__SHA1_DESTROY XS_Digest__SHA1_add XS_Digest__SHA1_addfile XS_Digest__SHA1_digest XS_Digest__SHA1_sha1 Wed Nov 29 14:24:40 2000  IBM C and C++ Compilers Version 3.6.6.3 ---  .boot_Digest__SHA1 .XS_Digest__SHA1_sha1 .XS_Digest__SHA1_digest .XS_Digest__SHA1_addfile .XS_Digest__SHA1_add .XS_Digest__SHA1_DESTROY .XS_Digest__SHA1_new .make_mortal_sv .base64_20 .get_sha_info .sha_final .sha_update .sha_init .sha_transform .Perl_sv_2pv .Perl_form .perl_get_sv .Perl_croak .Perl_newXS .Perl_sv_2io .Perl_safefree .Perl_safemalloc .Perl_sv_newmortal .Perl_sv_setref_pv .Perl_newSVpv .Perl_sv_2mortal .Perl_sv_derived_from .Perl_sv_2iv kê˜ê ^g $�              á}·:¢%:ÔÎž:!                      ./usr/opt/perl5/lib/site_perl/5.005/aix/auto/Digest/SHA1/SHA1.bs                     ó/      $�          kêÔ¿ (c $�          >  á}·:&Æ9ÔÎž:!        ûì  >      ./usr/opt/perl5/lib/site_perl/5.005/aix/Digest/MD5.pm A1             ó/      $�          package Digest::MD5;

use strict;
use vars qw($VERSION @ISA @EXPORT_OK);

$VERSION = '2.12';  # $Date: 2000/09/18 14:26:37 $

require Exporter;
*import = \&Exporter::import;
@EXPORT_OK = qw(md5 md5_hex md5_base64);

require DynaLoader;
@ISA=qw(DynaLoader);

eval {
    Digest::MD5->bootstrap($VERSION);
};
if ($@) {
    # Try to load the pure perl version
    require Digest::Perl::MD5;

    Digest::Perl::MD5->import(qw(md5 md5_hex md5_base64));
    push(@ISA, "Digest::Perl::MD5");  # make OO interface work
}
else {
    *reset = \&new;
}

1;
__END__

=head1 NAME

Digest::MD5 - Perl interface to the MD5 Algorithm

=head1 SYNOPSIS

 # Functional style
 use Digest::MD5  qw(md5 md5_hex md5_base64);

 $digest = md5($data);
 $digest = md5_hex($data);
 $digest = md5_base64($data);

 # OO style
 use Digest::MD5;

 $ctx = Digest::MD5->new;

 $ctx->add($data);
 $ctx->addfile(*FILE);

 $digest = $ctx->digest;
 $digest = $ctx->hexdigest;
 $digest = $ctx->b64digest;

=head1 DESCRIPTION

The C<Digest::MD5> module allows you to use the RSA Data Security
Inc. MD5 Message Digest algorithm from within Perl programs.  The
algorithm takes as input a message of arbitrary length and produces as
output a 128-bit "fingerprint" or "message digest" of the input.

The C<Digest::MD5> module provide a procedural interface for simple
use, as well as an object oriented interface that can handle messages
of arbitrary length and which can read files directly.

A binary digest will be 16 bytes long.  A hex digest will be 32
characters long.  A base64 digest will be 22 characters long.

=head1 FUNCTIONS

The following functions can be exported from the C<Digest::MD5>
module.  No functions are exported by default.

=over 4

=item md5($data,...)

This function will concatenate all arguments, calculate the MD5 digest
of this "message", and return it in binary form.

=item md5_hex($data,...)

Same as md5(), but will return the digest in hexadecimal form.

=item md5_base64($data,...)

Same as md5(), but will return the digest as a base64 encoded string.

=back

=head1 METHODS

The following methods are available:

=over 4

=item $md5 = Digest::MD5->new

The constructor returns a new C<Digest::MD5> object which encapsulate
the state of the MD5 message-digest algorithm.  You can add data to
the object and finally ask for the digest.

If called as a instance method (i.e. $md5->new) it will just reset the
state the object to the state of a newly created object.  No new
object is created in this case.

=item $md5->reset

This is just an alias for $md5->new.

=item $md5->add($data,...)

The $data provided as argument are appended to the message we
calculate the digest for.  The return value is the $md5 object itself.

=item $md5->addfile($io_handle)

The $io_handle is read until EOF and the content is appended to the
message we calculate the digest for.  The return value is the $md5
object itself.

=item $md5->digest

Return the binary digest for the message.

Note that the C<digest> operation is effectively a destructive,
read-once operation. Once it has been performed, the C<Digest::MD5>
object is automatically C<reset> and can be used to calculate another
digest value.

=item $md5->hexdigest

Same as $md5->digest, but will return the digest in hexadecimal form.

=item $md5->b64digest

Same as $md5->digest, but will return the digest as a base64 encoded
string.

=back


=head1 EXAMPLES

The simplest way to use this library is to import the md5_hex()
function (or one of its cousins):

    use Digest::MD5 qw(md5_hex);
    print "Digest is ", md5_hex("foobarbaz"), "\n";

The above example would print out the message

    Digest is 6df23dc03f9b54cc38a0fc1483df6e21

provided that the implementation is working correctly.  The same
checksum can also be calculated in OO style:

    use Digest::MD5;
    
    $md5 = Digest::MD5->new;
    $md5->add('foo', 'bar');
    $md5->add('baz');
    $digest = $md5->hexdigest;
    
    print "Digest is $digest\n";

With OO style you can break the message arbitrary.  This means that we
are no longer limited to have space for the whole message in memory, i.e.
we can handle messages of any size.

This is useful when calculating checksum for files:

    use Digest::MD5;

    my $file = shift || "/etc/passwd";
    open(FILE, $file) or die "Can't open '$file': $!";
    binmode(FILE);

    $md5 = Digest::MD5->new;
    while (<FILE>) {
        $md5->add($_);
    }
    close(FILE);
    print $md5->b64digest, " $file\n";

Or we can use the builtin addfile method for more efficient reading of
the file:

    use Digest::MD5;

    my $file = shift || "/etc/passwd";
    open(FILE, $file) or die "Can't open '$f